├── .gitignore ├── README.md ├── build.gradle ├── cdk-deployer ├── build.gradle ├── lambda │ ├── bucketStack.js │ ├── cdk.json │ ├── cdkStack.js │ ├── cdkStackDeployer.js │ ├── function.zip │ ├── index.js │ ├── pack.sh │ ├── package-lock.json │ ├── package.json │ ├── utils │ │ └── empty-bucket.js │ └── webpack.config.js └── terraform │ ├── prod │ └── main.tf │ ├── remote-state │ └── main.tf │ └── resources │ ├── main.tf │ ├── modules │ └── lambda │ │ ├── .terraform │ │ └── modules │ │ │ └── modules.json │ │ ├── main.tf │ │ ├── outputs.tf │ │ └── variables.tf │ ├── res │ └── deployer_lambda_policy.tpl │ └── variables.tf ├── cdk-lambda-layer ├── build.gradle ├── layer.zip ├── pack.sh └── package.json ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── intellij-java-google-style.xml ├── settings.gradle └── terraform-utils ├── deploy.sh └── modules └── service_prefixed_lambda_role ├── lambda-assume-role-policy.tpl ├── main.tf ├── outputs.tf └── variables.tf /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /.gradle/ 3 | /cdk-deployer/lambda/node_modules/ 4 | /cdk-lambda-layer/node_modules/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CDK Layer in Lambda 2 | 3 | This is an example how I used CDK in a Lambda layer to deploy and manage multiple but similar stacks. 4 | 5 | ## Overview 6 | 7 | Gradle is used to zip the lambda layer, run Webpack to optimize lambda's code and dependencies, pack it and to run terraform apply. Please note that in this example I used `-auto-approve` flag. (see /terraform-utils/deploy.sh) 8 | 9 | ## Prerequisite 10 | 11 | - terraform (v0.12.28 was used) 12 | 13 | 14 | ## Usage 15 | 16 | If you want to run this example you need to 17 | 18 | 1. You might need to run cdk bootstrap "cdk bootstrap --profile aws:///" in the acc/region when running CDK for the first time in this AWS account 19 | 20 | 2. Setup remote state for terraform: 21 | 22 | In `cdk-deployer/terraform/remote-state` set your provider settings and run 23 | ``` 24 | terraform init 25 | terraform apply 26 | ``` 27 | 28 | 4. Get the names of remote state S3 bucket and DynamoDB table and set them in 29 | 30 | `cdk_layer_in_lambda/cdk-deployer/terraform/prod/main.tf 31 | 32 | 5. To deploy your lambda run: 33 | ``` 34 | sh gradlew cdk-lambda-layer:packageLayer 35 | sh gradlew cdk-deployer:deploy 36 | ``` 37 | Or use Gradle in Intellij 38 | 39 | 6. Call deploy/destroy lambda with payload 40 | ``` 41 | { 42 | "id": "myStackName" 43 | } 44 | ``` 45 | 46 | ## Content 47 | `/cdk-lambda-layer` - install CDK, prepare zip 48 | `/cdk-deployer/lambda` - Stack definition, Lambda code 49 | `/cdk-deployer/terraform` - terraform to deployer Lambda together with CDK in layer 50 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | } 4 | 5 | group 'org.vgulkevic' 6 | version '1.0-SNAPSHOT' 7 | 8 | repositories { 9 | mavenCentral() 10 | } 11 | 12 | dependencies { 13 | testCompile group: 'junit', name: 'junit', version: '4.12' 14 | } 15 | -------------------------------------------------------------------------------- /cdk-deployer/build.gradle: -------------------------------------------------------------------------------- 1 | subprojects { 2 | task packageLambda(type: Exec) { 3 | doFirst { 4 | println "packaging $project.name.." 5 | } 6 | commandLine "bash", "./pack.sh" 7 | } 8 | } 9 | 10 | task deploy(type: Exec, dependsOn: subprojects.tasks['packageLambda']) { 11 | def env = project.hasProperty('env') 12 | ? project.getProperty('env') : 'prod' 13 | 14 | doFirst { 15 | println "deploying to ${env}.." 16 | } 17 | commandLine "bash", "../terraform-utils/deploy.sh", "-e", "$env" 18 | } 19 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/bucketStack.js: -------------------------------------------------------------------------------- 1 | const {App, Stack, CfnOutput, RemovalPolicy} = require("@aws-cdk/core"); 2 | const {Bucket} = require('@aws-cdk/aws-s3'); 3 | const {PolicyStatement, Effect} = require('@aws-cdk/aws-iam'); 4 | 5 | const STACK_ID = process.env.ID_ENV; 6 | 7 | class MyBucketStack extends Stack { 8 | constructor(scope, id, props) { 9 | super(scope, id, props); 10 | 11 | const siteBucket = new Bucket(this, 'siteBucket', { 12 | removalPolicy: RemovalPolicy.DESTROY, 13 | }); 14 | 15 | const bucketPolicyStatement = new PolicyStatement({ 16 | effect: Effect.ALLOW, 17 | resources: [ 18 | `${siteBucket.bucketArn}/*` 19 | ], 20 | actions: ["s3:GetObject"] 21 | }) 22 | 23 | bucketPolicyStatement.addAnyPrincipal(); 24 | siteBucket.addToResourcePolicy(bucketPolicyStatement); 25 | 26 | new CfnOutput(this, 'bucketName', { 27 | value: siteBucket.bucketName 28 | }); 29 | } 30 | } 31 | 32 | const runStack = () => { 33 | new MyBucketStack(new App(), STACK_ID); 34 | } 35 | 36 | module.exports = { 37 | runStack 38 | } 39 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "node cdkStackbundle.js", 3 | "output": "/tmp/cdk.out", 4 | "requireApproval": "never" 5 | } -------------------------------------------------------------------------------- /cdk-deployer/lambda/cdkStack.js: -------------------------------------------------------------------------------- 1 | const {runStack} = require('./bucketStack'); 2 | 3 | runStack(); 4 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/cdkStackDeployer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const AWS = require('aws-sdk'); 4 | const cloudformation = new AWS.CloudFormation(); 5 | const {execSync} = require('child_process'); 6 | const default_region = process.env.AWS_REGION || 'eu-west-1'; 7 | const {emptyBucket} = require('./utils/empty-bucket'); 8 | 9 | const deploySucceeded = (id) => { 10 | console.log(`Deploy succeed. Id ${id}`); 11 | } 12 | 13 | const deployFailed = (res, id) => { 14 | console.log(`Deploy deployFailed. Id ${id}`); 15 | console.log(`Reason: ${res}`); 16 | } 17 | 18 | const destroySucceeded = (id) => { 19 | console.log(`Destroy succeeded. id: ${id}`); 20 | } 21 | 22 | const destroyFailed = (res, id) => { 23 | console.log(`Destroy failed: ${id}`); 24 | console.log(`Reason: ${res}`); 25 | } 26 | 27 | module.exports.deploy = async (id) => { 28 | console.log(`Deploy stack ${id}`); 29 | console.log(id); 30 | let res; 31 | try { 32 | res = await deployCDK({ 33 | id: id, 34 | command: 'deploy', 35 | additionalCommandParam: '' 36 | }); 37 | } catch (e) { 38 | deployFailed("Failed to deploy CDK" + e, id); 39 | } 40 | 41 | console.log('Deploy returned'); 42 | console.log(res); 43 | 44 | // CDK deploy finished/failed 45 | if (isResultReturnCloudformationArn(res)) { 46 | const stackName = res.split('/')[1]; 47 | console.log(`Deploy succeeded, stack name - ${stackName}`); 48 | deploySucceeded(id); 49 | } else { 50 | console.log('Deploy failed - return result is not stack arn'); 51 | deployFailed(res, id); 52 | } 53 | } 54 | 55 | module.exports.destroy = async (id) => { 56 | console.log(`Destroy stack ${id}`); 57 | 58 | // empty buckets so that CDK destroy can delete it 59 | const siteBucketName = await getOutputFromStack(id, 'bucketName'); 60 | await emptyBucket(siteBucketName); 61 | 62 | const res = await deployCDK({ 63 | id: id, 64 | awsRegion: default_region, 65 | command: 'destroy', 66 | additionalCommandParam: '--force' 67 | }); 68 | 69 | console.log('Destroy returned'); 70 | console.log(res); 71 | 72 | if (res === "") { 73 | await destroySucceeded(id); 74 | } else { 75 | await destroyFailed(res, id); 76 | } 77 | } 78 | 79 | const isResultReturnCloudformationArn = (res) =>{ 80 | const regex = new RegExp('^arn:aws:cloudformation:' + default_region + ':.+:stack\\/.*\\/.*', 'gi'); 81 | return regex.test(res); 82 | } 83 | 84 | const getOutputFromStack = async (stackId, outputKey) => { 85 | return new Promise((resolve, reject) => { 86 | try { 87 | const params = { 88 | StackName: stackId 89 | }; 90 | 91 | cloudformation.describeStacks(params, function (err, data) { 92 | if (err) { 93 | console.log(err, err.stack); 94 | reject(); 95 | } else { 96 | console.log(data); 97 | console.log(data.Stacks[0].Outputs); 98 | resolve(data.Stacks[0].Outputs.find(stackOutput => stackOutput.OutputKey === outputKey).OutputValue); 99 | } 100 | }); 101 | } catch (e) { 102 | console.log(e); 103 | reject(); 104 | } 105 | }); 106 | } 107 | 108 | const deployCDK = async (params) => { 109 | console.log(`Stack request for: ${params.id}`); 110 | console.log('Request started'); 111 | 112 | // Set process.env.HOME Lambda default HOME is /home/usrXXX. 113 | const cmd = ` 114 | export HOME='/tmp' 115 | ID_ENV='${params.id}' /opt/nodejs/node_modules/aws-cdk/bin/cdk ${params.command} -v ${params.additionalCommandParam} 116 | `; 117 | 118 | console.log(cmd); 119 | 120 | return execSync(cmd).toString(); 121 | } 122 | 123 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/function.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vgulkevic/cdk_layer_in_lambda/bd2e0a8cb6ba8390e5439ba8da981c454922afde/cdk-deployer/lambda/function.zip -------------------------------------------------------------------------------- /cdk-deployer/lambda/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const {deploy, destroy} = require("./cdkStackDeployer"); 4 | 5 | // might need to run "cdk bootstrap --profile aws:///" in the acc/region when setting up for the first time 6 | exports.deploy = async (event) => { 7 | console.log(event); 8 | await deploy(event['id']); 9 | } 10 | 11 | exports.destroy = async (event) => { 12 | console.log(event); 13 | await destroy(event['id']); 14 | } 15 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/pack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | rm -r function.zip 4 | rm -r ./out 5 | npm install 6 | npm run-script build 7 | cp cdk.json ./out 8 | # see https://github.com/aws/aws-cdk/issues/7284. this line is not needed if you don't use custom resources. 9 | #cp ./node_modules/@aws-cdk/custom-resources/lib/aws-custom-resource/sdk-api-metadata.json ./out 10 | cd ./out && zip -r function.zip ./* && cd .. && mv ./out/function.zip ./function.zip 11 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cdk-deployer", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@aws-cdk/aws-events": { 8 | "version": "1.67.0", 9 | "resolved": "https://registry.npmjs.org/@aws-cdk/aws-events/-/aws-events-1.67.0.tgz", 10 | "integrity": "sha512-d5Ef00rvOA1SSLPrBpR5lu6jo1WSXsLc61vkb50b0/+eDmfivtSCpj6F59TRn7eaENXOVOIlCWeS2q9M5I/oow==", 11 | "requires": { 12 | "@aws-cdk/aws-iam": "1.67.0", 13 | "@aws-cdk/core": "1.67.0", 14 | "constructs": "^3.0.4" 15 | }, 16 | "dependencies": { 17 | "@aws-cdk/core": { 18 | "version": "1.67.0", 19 | "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.67.0.tgz", 20 | "integrity": "sha512-qAfq/mTcSr5SuhjqQODPEmK24cSki+5Uquw9zHkq+gKue7g98PkzYyR1mDQWneJTeUZa7NqkwepTJq6gbandRQ==", 21 | "requires": { 22 | "@aws-cdk/cloud-assembly-schema": "1.67.0", 23 | "@aws-cdk/cx-api": "1.67.0", 24 | "@aws-cdk/region-info": "1.67.0", 25 | "constructs": "^3.0.4", 26 | "fs-extra": "^9.0.1", 27 | "minimatch": "^3.0.4" 28 | }, 29 | "dependencies": { 30 | "at-least-node": { 31 | "version": "1.0.0", 32 | "bundled": true 33 | }, 34 | "balanced-match": { 35 | "version": "1.0.0", 36 | "bundled": true 37 | }, 38 | "brace-expansion": { 39 | "version": "1.1.11", 40 | "bundled": true, 41 | "requires": { 42 | "balanced-match": "^1.0.0", 43 | "concat-map": "0.0.1" 44 | } 45 | }, 46 | "concat-map": { 47 | "version": "0.0.1", 48 | "bundled": true 49 | }, 50 | "fs-extra": { 51 | "version": "9.0.1", 52 | "bundled": true, 53 | "requires": { 54 | "at-least-node": "^1.0.0", 55 | "graceful-fs": "^4.2.0", 56 | "jsonfile": "^6.0.1", 57 | "universalify": "^1.0.0" 58 | } 59 | }, 60 | "graceful-fs": { 61 | "version": "4.2.4", 62 | "bundled": true 63 | }, 64 | "jsonfile": { 65 | "version": "6.0.1", 66 | "bundled": true, 67 | "requires": { 68 | "graceful-fs": "^4.1.6", 69 | "universalify": "^1.0.0" 70 | } 71 | }, 72 | "minimatch": { 73 | "version": "3.0.4", 74 | "bundled": true, 75 | "requires": { 76 | "brace-expansion": "^1.1.7" 77 | } 78 | }, 79 | "universalify": { 80 | "version": "1.0.0", 81 | "bundled": true 82 | } 83 | } 84 | } 85 | } 86 | }, 87 | "@aws-cdk/aws-iam": { 88 | "version": "1.67.0", 89 | "resolved": "https://registry.npmjs.org/@aws-cdk/aws-iam/-/aws-iam-1.67.0.tgz", 90 | "integrity": "sha512-CuXakd982jI9vr7mOhaBjFxhmMAr8UrnV7D7qgiNwha4imw/a285Yo/+acm6rzGpgysDQ5qi2VtEcNhAQkj0IQ==", 91 | "requires": { 92 | "@aws-cdk/core": "1.67.0", 93 | "@aws-cdk/region-info": "1.67.0", 94 | "constructs": "^3.0.4" 95 | }, 96 | "dependencies": { 97 | "@aws-cdk/core": { 98 | "version": "1.67.0", 99 | "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.67.0.tgz", 100 | "integrity": "sha512-qAfq/mTcSr5SuhjqQODPEmK24cSki+5Uquw9zHkq+gKue7g98PkzYyR1mDQWneJTeUZa7NqkwepTJq6gbandRQ==", 101 | "requires": { 102 | "@aws-cdk/cloud-assembly-schema": "1.67.0", 103 | "@aws-cdk/cx-api": "1.67.0", 104 | "@aws-cdk/region-info": "1.67.0", 105 | "constructs": "^3.0.4", 106 | "fs-extra": "^9.0.1", 107 | "minimatch": "^3.0.4" 108 | }, 109 | "dependencies": { 110 | "at-least-node": { 111 | "version": "1.0.0", 112 | "bundled": true 113 | }, 114 | "balanced-match": { 115 | "version": "1.0.0", 116 | "bundled": true 117 | }, 118 | "brace-expansion": { 119 | "version": "1.1.11", 120 | "bundled": true, 121 | "requires": { 122 | "balanced-match": "^1.0.0", 123 | "concat-map": "0.0.1" 124 | } 125 | }, 126 | "concat-map": { 127 | "version": "0.0.1", 128 | "bundled": true 129 | }, 130 | "fs-extra": { 131 | "version": "9.0.1", 132 | "bundled": true, 133 | "requires": { 134 | "at-least-node": "^1.0.0", 135 | "graceful-fs": "^4.2.0", 136 | "jsonfile": "^6.0.1", 137 | "universalify": "^1.0.0" 138 | } 139 | }, 140 | "graceful-fs": { 141 | "version": "4.2.4", 142 | "bundled": true 143 | }, 144 | "jsonfile": { 145 | "version": "6.0.1", 146 | "bundled": true, 147 | "requires": { 148 | "graceful-fs": "^4.1.6", 149 | "universalify": "^1.0.0" 150 | } 151 | }, 152 | "minimatch": { 153 | "version": "3.0.4", 154 | "bundled": true, 155 | "requires": { 156 | "brace-expansion": "^1.1.7" 157 | } 158 | }, 159 | "universalify": { 160 | "version": "1.0.0", 161 | "bundled": true 162 | } 163 | } 164 | } 165 | } 166 | }, 167 | "@aws-cdk/aws-kms": { 168 | "version": "1.67.0", 169 | "resolved": "https://registry.npmjs.org/@aws-cdk/aws-kms/-/aws-kms-1.67.0.tgz", 170 | "integrity": "sha512-Yflkkj3J0TktVcf5C7eqQjr4x8M91rKaV97qMe4gStzY3QhaUrKhD0g4zEqa0f49bpBnZhY74ECzHN9Z7/giqQ==", 171 | "requires": { 172 | "@aws-cdk/aws-iam": "1.67.0", 173 | "@aws-cdk/core": "1.67.0", 174 | "constructs": "^3.0.4" 175 | }, 176 | "dependencies": { 177 | "@aws-cdk/core": { 178 | "version": "1.67.0", 179 | "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.67.0.tgz", 180 | "integrity": "sha512-qAfq/mTcSr5SuhjqQODPEmK24cSki+5Uquw9zHkq+gKue7g98PkzYyR1mDQWneJTeUZa7NqkwepTJq6gbandRQ==", 181 | "requires": { 182 | "@aws-cdk/cloud-assembly-schema": "1.67.0", 183 | "@aws-cdk/cx-api": "1.67.0", 184 | "@aws-cdk/region-info": "1.67.0", 185 | "constructs": "^3.0.4", 186 | "fs-extra": "^9.0.1", 187 | "minimatch": "^3.0.4" 188 | }, 189 | "dependencies": { 190 | "at-least-node": { 191 | "version": "1.0.0", 192 | "bundled": true 193 | }, 194 | "balanced-match": { 195 | "version": "1.0.0", 196 | "bundled": true 197 | }, 198 | "brace-expansion": { 199 | "version": "1.1.11", 200 | "bundled": true, 201 | "requires": { 202 | "balanced-match": "^1.0.0", 203 | "concat-map": "0.0.1" 204 | } 205 | }, 206 | "concat-map": { 207 | "version": "0.0.1", 208 | "bundled": true 209 | }, 210 | "fs-extra": { 211 | "version": "9.0.1", 212 | "bundled": true, 213 | "requires": { 214 | "at-least-node": "^1.0.0", 215 | "graceful-fs": "^4.2.0", 216 | "jsonfile": "^6.0.1", 217 | "universalify": "^1.0.0" 218 | } 219 | }, 220 | "graceful-fs": { 221 | "version": "4.2.4", 222 | "bundled": true 223 | }, 224 | "jsonfile": { 225 | "version": "6.0.1", 226 | "bundled": true, 227 | "requires": { 228 | "graceful-fs": "^4.1.6", 229 | "universalify": "^1.0.0" 230 | } 231 | }, 232 | "minimatch": { 233 | "version": "3.0.4", 234 | "bundled": true, 235 | "requires": { 236 | "brace-expansion": "^1.1.7" 237 | } 238 | }, 239 | "universalify": { 240 | "version": "1.0.0", 241 | "bundled": true 242 | } 243 | } 244 | } 245 | } 246 | }, 247 | "@aws-cdk/aws-s3": { 248 | "version": "1.67.0", 249 | "resolved": "https://registry.npmjs.org/@aws-cdk/aws-s3/-/aws-s3-1.67.0.tgz", 250 | "integrity": "sha512-uXrPJQ8PyM8ecEnamaQic4sA0qqgffXjB/RnxmlblQW8DxWrwjDkEUpVc2W4OiQ3sKe0+l8G2H+8CqPH+oIGoA==", 251 | "requires": { 252 | "@aws-cdk/aws-events": "1.67.0", 253 | "@aws-cdk/aws-iam": "1.67.0", 254 | "@aws-cdk/aws-kms": "1.67.0", 255 | "@aws-cdk/core": "1.67.0", 256 | "constructs": "^3.0.4" 257 | }, 258 | "dependencies": { 259 | "@aws-cdk/core": { 260 | "version": "1.67.0", 261 | "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.67.0.tgz", 262 | "integrity": "sha512-qAfq/mTcSr5SuhjqQODPEmK24cSki+5Uquw9zHkq+gKue7g98PkzYyR1mDQWneJTeUZa7NqkwepTJq6gbandRQ==", 263 | "requires": { 264 | "@aws-cdk/cloud-assembly-schema": "1.67.0", 265 | "@aws-cdk/cx-api": "1.67.0", 266 | "@aws-cdk/region-info": "1.67.0", 267 | "constructs": "^3.0.4", 268 | "fs-extra": "^9.0.1", 269 | "minimatch": "^3.0.4" 270 | }, 271 | "dependencies": { 272 | "at-least-node": { 273 | "version": "1.0.0", 274 | "bundled": true 275 | }, 276 | "balanced-match": { 277 | "version": "1.0.0", 278 | "bundled": true 279 | }, 280 | "brace-expansion": { 281 | "version": "1.1.11", 282 | "bundled": true, 283 | "requires": { 284 | "balanced-match": "^1.0.0", 285 | "concat-map": "0.0.1" 286 | } 287 | }, 288 | "concat-map": { 289 | "version": "0.0.1", 290 | "bundled": true 291 | }, 292 | "fs-extra": { 293 | "version": "9.0.1", 294 | "bundled": true, 295 | "requires": { 296 | "at-least-node": "^1.0.0", 297 | "graceful-fs": "^4.2.0", 298 | "jsonfile": "^6.0.1", 299 | "universalify": "^1.0.0" 300 | } 301 | }, 302 | "graceful-fs": { 303 | "version": "4.2.4", 304 | "bundled": true 305 | }, 306 | "jsonfile": { 307 | "version": "6.0.1", 308 | "bundled": true, 309 | "requires": { 310 | "graceful-fs": "^4.1.6", 311 | "universalify": "^1.0.0" 312 | } 313 | }, 314 | "minimatch": { 315 | "version": "3.0.4", 316 | "bundled": true, 317 | "requires": { 318 | "brace-expansion": "^1.1.7" 319 | } 320 | }, 321 | "universalify": { 322 | "version": "1.0.0", 323 | "bundled": true 324 | } 325 | } 326 | } 327 | } 328 | }, 329 | "@aws-cdk/cloud-assembly-schema": { 330 | "version": "1.67.0", 331 | "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.67.0.tgz", 332 | "integrity": "sha512-O/UZ9iH+JnkgrTlyGQXc2Eg7dr1GV9l8GF0IhfynxT/5/PMA1bC96PEdsFu8Zv72+ZaGncFk5rEVx/j79MeiPA==", 333 | "requires": { 334 | "jsonschema": "^1.2.10", 335 | "semver": "^7.3.2" 336 | }, 337 | "dependencies": { 338 | "jsonschema": { 339 | "version": "1.2.10", 340 | "bundled": true 341 | }, 342 | "semver": { 343 | "version": "7.3.2", 344 | "bundled": true 345 | } 346 | } 347 | }, 348 | "@aws-cdk/core": { 349 | "version": "1.69.0", 350 | "resolved": "https://registry.npmjs.org/@aws-cdk/core/-/core-1.69.0.tgz", 351 | "integrity": "sha512-z1jzuAta/+pSmjPuMa1CcLndhhppXtOezSXNsAcu5s7zjV8kSf7i+k0z5mMnuYK/yY8Mxd+9btdFCQI0iE6ZQw==", 352 | "requires": { 353 | "@aws-cdk/cloud-assembly-schema": "1.69.0", 354 | "@aws-cdk/cx-api": "1.69.0", 355 | "@aws-cdk/region-info": "1.69.0", 356 | "constructs": "^3.0.4", 357 | "fs-extra": "^9.0.1", 358 | "minimatch": "^3.0.4" 359 | }, 360 | "dependencies": { 361 | "@aws-cdk/cloud-assembly-schema": { 362 | "version": "1.69.0", 363 | "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.69.0.tgz", 364 | "integrity": "sha512-8wT7wIR6RDTBfBLUavj338liQYysKm3RSXLPMcrhEWqkmLqskOd0Q/Oeoz8be08tNC3BshiKs0cjfjHCMtVy/g==", 365 | "requires": { 366 | "jsonschema": "^1.2.10", 367 | "semver": "^7.3.2" 368 | }, 369 | "dependencies": { 370 | "jsonschema": { 371 | "version": "1.2.10", 372 | "bundled": true 373 | }, 374 | "semver": { 375 | "version": "7.3.2", 376 | "bundled": true 377 | } 378 | } 379 | }, 380 | "@aws-cdk/cx-api": { 381 | "version": "1.69.0", 382 | "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.69.0.tgz", 383 | "integrity": "sha512-94zBqeEKPxsaGEhSahTcD2rUMBpR7nRzGEap/HqhbaOXRgjdp4mSBNFJgX7tRqufTFfE9ePHgOQS62mYQhjWnA==", 384 | "requires": { 385 | "@aws-cdk/cloud-assembly-schema": "1.69.0", 386 | "semver": "^7.3.2" 387 | }, 388 | "dependencies": { 389 | "semver": { 390 | "version": "7.3.2", 391 | "bundled": true 392 | } 393 | } 394 | }, 395 | "@aws-cdk/region-info": { 396 | "version": "1.69.0", 397 | "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.69.0.tgz", 398 | "integrity": "sha512-lEniN/SA3Q1hcpZDXhycbRtly7+ojYWznf/Ykqz7M7K3e7zh7c3DB9+pjul0Hwesx59ahKWQBUNrqM5XObc98g==" 399 | }, 400 | "at-least-node": { 401 | "version": "1.0.0", 402 | "bundled": true 403 | }, 404 | "balanced-match": { 405 | "version": "1.0.0", 406 | "bundled": true 407 | }, 408 | "brace-expansion": { 409 | "version": "1.1.11", 410 | "bundled": true, 411 | "requires": { 412 | "balanced-match": "^1.0.0", 413 | "concat-map": "0.0.1" 414 | } 415 | }, 416 | "concat-map": { 417 | "version": "0.0.1", 418 | "bundled": true 419 | }, 420 | "fs-extra": { 421 | "version": "9.0.1", 422 | "bundled": true, 423 | "requires": { 424 | "at-least-node": "^1.0.0", 425 | "graceful-fs": "^4.2.0", 426 | "jsonfile": "^6.0.1", 427 | "universalify": "^1.0.0" 428 | } 429 | }, 430 | "graceful-fs": { 431 | "version": "4.2.4", 432 | "bundled": true 433 | }, 434 | "jsonfile": { 435 | "version": "6.0.1", 436 | "bundled": true, 437 | "requires": { 438 | "graceful-fs": "^4.1.6", 439 | "universalify": "^1.0.0" 440 | } 441 | }, 442 | "minimatch": { 443 | "version": "3.0.4", 444 | "bundled": true, 445 | "requires": { 446 | "brace-expansion": "^1.1.7" 447 | } 448 | }, 449 | "universalify": { 450 | "version": "1.0.0", 451 | "bundled": true 452 | } 453 | } 454 | }, 455 | "@aws-cdk/cx-api": { 456 | "version": "1.67.0", 457 | "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-1.67.0.tgz", 458 | "integrity": "sha512-uTeEy6OmGSUS09BhHsZUJjalWGblODZS0nfwws0qE/XG6ue3KNQ2vkOwO3f1pT3a3Ntn8SDO52gMFp7Nu8UC7g==", 459 | "requires": { 460 | "@aws-cdk/cloud-assembly-schema": "1.67.0", 461 | "semver": "^7.3.2" 462 | }, 463 | "dependencies": { 464 | "semver": { 465 | "version": "7.3.2", 466 | "bundled": true 467 | } 468 | } 469 | }, 470 | "@aws-cdk/region-info": { 471 | "version": "1.67.0", 472 | "resolved": "https://registry.npmjs.org/@aws-cdk/region-info/-/region-info-1.67.0.tgz", 473 | "integrity": "sha512-qM63kG2SCs3rCf5ieccWadu1tuqn5VpJ9Hf1HapJXryoVTGf3S/a0HPxmMbVwMKDatsV7kWmMscmD3xfNwB4PA==" 474 | }, 475 | "@babel/code-frame": { 476 | "version": "7.10.4", 477 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 478 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 479 | "dev": true, 480 | "requires": { 481 | "@babel/highlight": "^7.10.4" 482 | } 483 | }, 484 | "@babel/compat-data": { 485 | "version": "7.12.1", 486 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", 487 | "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", 488 | "dev": true 489 | }, 490 | "@babel/core": { 491 | "version": "7.12.3", 492 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", 493 | "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", 494 | "dev": true, 495 | "requires": { 496 | "@babel/code-frame": "^7.10.4", 497 | "@babel/generator": "^7.12.1", 498 | "@babel/helper-module-transforms": "^7.12.1", 499 | "@babel/helpers": "^7.12.1", 500 | "@babel/parser": "^7.12.3", 501 | "@babel/template": "^7.10.4", 502 | "@babel/traverse": "^7.12.1", 503 | "@babel/types": "^7.12.1", 504 | "convert-source-map": "^1.7.0", 505 | "debug": "^4.1.0", 506 | "gensync": "^1.0.0-beta.1", 507 | "json5": "^2.1.2", 508 | "lodash": "^4.17.19", 509 | "resolve": "^1.3.2", 510 | "semver": "^5.4.1", 511 | "source-map": "^0.5.0" 512 | } 513 | }, 514 | "@babel/generator": { 515 | "version": "7.12.1", 516 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", 517 | "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", 518 | "dev": true, 519 | "requires": { 520 | "@babel/types": "^7.12.1", 521 | "jsesc": "^2.5.1", 522 | "source-map": "^0.5.0" 523 | } 524 | }, 525 | "@babel/helper-annotate-as-pure": { 526 | "version": "7.10.4", 527 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", 528 | "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", 529 | "dev": true, 530 | "requires": { 531 | "@babel/types": "^7.10.4" 532 | } 533 | }, 534 | "@babel/helper-builder-binary-assignment-operator-visitor": { 535 | "version": "7.10.4", 536 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", 537 | "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", 538 | "dev": true, 539 | "requires": { 540 | "@babel/helper-explode-assignable-expression": "^7.10.4", 541 | "@babel/types": "^7.10.4" 542 | } 543 | }, 544 | "@babel/helper-compilation-targets": { 545 | "version": "7.12.1", 546 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", 547 | "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", 548 | "dev": true, 549 | "requires": { 550 | "@babel/compat-data": "^7.12.1", 551 | "@babel/helper-validator-option": "^7.12.1", 552 | "browserslist": "^4.12.0", 553 | "semver": "^5.5.0" 554 | } 555 | }, 556 | "@babel/helper-create-class-features-plugin": { 557 | "version": "7.12.1", 558 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", 559 | "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", 560 | "dev": true, 561 | "requires": { 562 | "@babel/helper-function-name": "^7.10.4", 563 | "@babel/helper-member-expression-to-functions": "^7.12.1", 564 | "@babel/helper-optimise-call-expression": "^7.10.4", 565 | "@babel/helper-replace-supers": "^7.12.1", 566 | "@babel/helper-split-export-declaration": "^7.10.4" 567 | } 568 | }, 569 | "@babel/helper-create-regexp-features-plugin": { 570 | "version": "7.12.1", 571 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", 572 | "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", 573 | "dev": true, 574 | "requires": { 575 | "@babel/helper-annotate-as-pure": "^7.10.4", 576 | "@babel/helper-regex": "^7.10.4", 577 | "regexpu-core": "^4.7.1" 578 | } 579 | }, 580 | "@babel/helper-define-map": { 581 | "version": "7.10.5", 582 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", 583 | "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", 584 | "dev": true, 585 | "requires": { 586 | "@babel/helper-function-name": "^7.10.4", 587 | "@babel/types": "^7.10.5", 588 | "lodash": "^4.17.19" 589 | } 590 | }, 591 | "@babel/helper-explode-assignable-expression": { 592 | "version": "7.12.1", 593 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", 594 | "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", 595 | "dev": true, 596 | "requires": { 597 | "@babel/types": "^7.12.1" 598 | } 599 | }, 600 | "@babel/helper-function-name": { 601 | "version": "7.10.4", 602 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", 603 | "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", 604 | "dev": true, 605 | "requires": { 606 | "@babel/helper-get-function-arity": "^7.10.4", 607 | "@babel/template": "^7.10.4", 608 | "@babel/types": "^7.10.4" 609 | } 610 | }, 611 | "@babel/helper-get-function-arity": { 612 | "version": "7.10.4", 613 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", 614 | "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", 615 | "dev": true, 616 | "requires": { 617 | "@babel/types": "^7.10.4" 618 | } 619 | }, 620 | "@babel/helper-hoist-variables": { 621 | "version": "7.10.4", 622 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", 623 | "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", 624 | "dev": true, 625 | "requires": { 626 | "@babel/types": "^7.10.4" 627 | } 628 | }, 629 | "@babel/helper-member-expression-to-functions": { 630 | "version": "7.12.1", 631 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", 632 | "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", 633 | "dev": true, 634 | "requires": { 635 | "@babel/types": "^7.12.1" 636 | } 637 | }, 638 | "@babel/helper-module-imports": { 639 | "version": "7.12.1", 640 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", 641 | "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", 642 | "dev": true, 643 | "requires": { 644 | "@babel/types": "^7.12.1" 645 | } 646 | }, 647 | "@babel/helper-module-transforms": { 648 | "version": "7.12.1", 649 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", 650 | "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", 651 | "dev": true, 652 | "requires": { 653 | "@babel/helper-module-imports": "^7.12.1", 654 | "@babel/helper-replace-supers": "^7.12.1", 655 | "@babel/helper-simple-access": "^7.12.1", 656 | "@babel/helper-split-export-declaration": "^7.11.0", 657 | "@babel/helper-validator-identifier": "^7.10.4", 658 | "@babel/template": "^7.10.4", 659 | "@babel/traverse": "^7.12.1", 660 | "@babel/types": "^7.12.1", 661 | "lodash": "^4.17.19" 662 | } 663 | }, 664 | "@babel/helper-optimise-call-expression": { 665 | "version": "7.10.4", 666 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", 667 | "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", 668 | "dev": true, 669 | "requires": { 670 | "@babel/types": "^7.10.4" 671 | } 672 | }, 673 | "@babel/helper-plugin-utils": { 674 | "version": "7.10.4", 675 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", 676 | "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", 677 | "dev": true 678 | }, 679 | "@babel/helper-regex": { 680 | "version": "7.10.5", 681 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", 682 | "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", 683 | "dev": true, 684 | "requires": { 685 | "lodash": "^4.17.19" 686 | } 687 | }, 688 | "@babel/helper-remap-async-to-generator": { 689 | "version": "7.12.1", 690 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", 691 | "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", 692 | "dev": true, 693 | "requires": { 694 | "@babel/helper-annotate-as-pure": "^7.10.4", 695 | "@babel/helper-wrap-function": "^7.10.4", 696 | "@babel/types": "^7.12.1" 697 | } 698 | }, 699 | "@babel/helper-replace-supers": { 700 | "version": "7.12.1", 701 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", 702 | "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", 703 | "dev": true, 704 | "requires": { 705 | "@babel/helper-member-expression-to-functions": "^7.12.1", 706 | "@babel/helper-optimise-call-expression": "^7.10.4", 707 | "@babel/traverse": "^7.12.1", 708 | "@babel/types": "^7.12.1" 709 | } 710 | }, 711 | "@babel/helper-simple-access": { 712 | "version": "7.12.1", 713 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", 714 | "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", 715 | "dev": true, 716 | "requires": { 717 | "@babel/types": "^7.12.1" 718 | } 719 | }, 720 | "@babel/helper-skip-transparent-expression-wrappers": { 721 | "version": "7.12.1", 722 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", 723 | "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", 724 | "dev": true, 725 | "requires": { 726 | "@babel/types": "^7.12.1" 727 | } 728 | }, 729 | "@babel/helper-split-export-declaration": { 730 | "version": "7.11.0", 731 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", 732 | "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", 733 | "dev": true, 734 | "requires": { 735 | "@babel/types": "^7.11.0" 736 | } 737 | }, 738 | "@babel/helper-validator-identifier": { 739 | "version": "7.10.4", 740 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 741 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 742 | "dev": true 743 | }, 744 | "@babel/helper-validator-option": { 745 | "version": "7.12.1", 746 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", 747 | "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", 748 | "dev": true 749 | }, 750 | "@babel/helper-wrap-function": { 751 | "version": "7.12.3", 752 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", 753 | "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", 754 | "dev": true, 755 | "requires": { 756 | "@babel/helper-function-name": "^7.10.4", 757 | "@babel/template": "^7.10.4", 758 | "@babel/traverse": "^7.10.4", 759 | "@babel/types": "^7.10.4" 760 | } 761 | }, 762 | "@babel/helpers": { 763 | "version": "7.12.1", 764 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", 765 | "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", 766 | "dev": true, 767 | "requires": { 768 | "@babel/template": "^7.10.4", 769 | "@babel/traverse": "^7.12.1", 770 | "@babel/types": "^7.12.1" 771 | } 772 | }, 773 | "@babel/highlight": { 774 | "version": "7.10.4", 775 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 776 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 777 | "dev": true, 778 | "requires": { 779 | "@babel/helper-validator-identifier": "^7.10.4", 780 | "chalk": "^2.0.0", 781 | "js-tokens": "^4.0.0" 782 | } 783 | }, 784 | "@babel/parser": { 785 | "version": "7.12.3", 786 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", 787 | "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", 788 | "dev": true 789 | }, 790 | "@babel/plugin-proposal-async-generator-functions": { 791 | "version": "7.12.1", 792 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", 793 | "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", 794 | "dev": true, 795 | "requires": { 796 | "@babel/helper-plugin-utils": "^7.10.4", 797 | "@babel/helper-remap-async-to-generator": "^7.12.1", 798 | "@babel/plugin-syntax-async-generators": "^7.8.0" 799 | } 800 | }, 801 | "@babel/plugin-proposal-class-properties": { 802 | "version": "7.12.1", 803 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", 804 | "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", 805 | "dev": true, 806 | "requires": { 807 | "@babel/helper-create-class-features-plugin": "^7.12.1", 808 | "@babel/helper-plugin-utils": "^7.10.4" 809 | } 810 | }, 811 | "@babel/plugin-proposal-dynamic-import": { 812 | "version": "7.12.1", 813 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", 814 | "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", 815 | "dev": true, 816 | "requires": { 817 | "@babel/helper-plugin-utils": "^7.10.4", 818 | "@babel/plugin-syntax-dynamic-import": "^7.8.0" 819 | } 820 | }, 821 | "@babel/plugin-proposal-export-namespace-from": { 822 | "version": "7.12.1", 823 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", 824 | "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", 825 | "dev": true, 826 | "requires": { 827 | "@babel/helper-plugin-utils": "^7.10.4", 828 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3" 829 | } 830 | }, 831 | "@babel/plugin-proposal-json-strings": { 832 | "version": "7.12.1", 833 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", 834 | "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", 835 | "dev": true, 836 | "requires": { 837 | "@babel/helper-plugin-utils": "^7.10.4", 838 | "@babel/plugin-syntax-json-strings": "^7.8.0" 839 | } 840 | }, 841 | "@babel/plugin-proposal-logical-assignment-operators": { 842 | "version": "7.12.1", 843 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", 844 | "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", 845 | "dev": true, 846 | "requires": { 847 | "@babel/helper-plugin-utils": "^7.10.4", 848 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 849 | } 850 | }, 851 | "@babel/plugin-proposal-nullish-coalescing-operator": { 852 | "version": "7.12.1", 853 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", 854 | "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", 855 | "dev": true, 856 | "requires": { 857 | "@babel/helper-plugin-utils": "^7.10.4", 858 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" 859 | } 860 | }, 861 | "@babel/plugin-proposal-numeric-separator": { 862 | "version": "7.12.1", 863 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", 864 | "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", 865 | "dev": true, 866 | "requires": { 867 | "@babel/helper-plugin-utils": "^7.10.4", 868 | "@babel/plugin-syntax-numeric-separator": "^7.10.4" 869 | } 870 | }, 871 | "@babel/plugin-proposal-object-rest-spread": { 872 | "version": "7.12.1", 873 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", 874 | "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", 875 | "dev": true, 876 | "requires": { 877 | "@babel/helper-plugin-utils": "^7.10.4", 878 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 879 | "@babel/plugin-transform-parameters": "^7.12.1" 880 | } 881 | }, 882 | "@babel/plugin-proposal-optional-catch-binding": { 883 | "version": "7.12.1", 884 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", 885 | "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", 886 | "dev": true, 887 | "requires": { 888 | "@babel/helper-plugin-utils": "^7.10.4", 889 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" 890 | } 891 | }, 892 | "@babel/plugin-proposal-optional-chaining": { 893 | "version": "7.12.1", 894 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", 895 | "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", 896 | "dev": true, 897 | "requires": { 898 | "@babel/helper-plugin-utils": "^7.10.4", 899 | "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", 900 | "@babel/plugin-syntax-optional-chaining": "^7.8.0" 901 | } 902 | }, 903 | "@babel/plugin-proposal-private-methods": { 904 | "version": "7.12.1", 905 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", 906 | "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", 907 | "dev": true, 908 | "requires": { 909 | "@babel/helper-create-class-features-plugin": "^7.12.1", 910 | "@babel/helper-plugin-utils": "^7.10.4" 911 | } 912 | }, 913 | "@babel/plugin-proposal-unicode-property-regex": { 914 | "version": "7.12.1", 915 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", 916 | "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", 917 | "dev": true, 918 | "requires": { 919 | "@babel/helper-create-regexp-features-plugin": "^7.12.1", 920 | "@babel/helper-plugin-utils": "^7.10.4" 921 | } 922 | }, 923 | "@babel/plugin-syntax-async-generators": { 924 | "version": "7.8.4", 925 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 926 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 927 | "dev": true, 928 | "requires": { 929 | "@babel/helper-plugin-utils": "^7.8.0" 930 | } 931 | }, 932 | "@babel/plugin-syntax-class-properties": { 933 | "version": "7.12.1", 934 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", 935 | "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", 936 | "dev": true, 937 | "requires": { 938 | "@babel/helper-plugin-utils": "^7.10.4" 939 | } 940 | }, 941 | "@babel/plugin-syntax-dynamic-import": { 942 | "version": "7.8.3", 943 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 944 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 945 | "dev": true, 946 | "requires": { 947 | "@babel/helper-plugin-utils": "^7.8.0" 948 | } 949 | }, 950 | "@babel/plugin-syntax-export-namespace-from": { 951 | "version": "7.8.3", 952 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", 953 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", 954 | "dev": true, 955 | "requires": { 956 | "@babel/helper-plugin-utils": "^7.8.3" 957 | } 958 | }, 959 | "@babel/plugin-syntax-json-strings": { 960 | "version": "7.8.3", 961 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 962 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 963 | "dev": true, 964 | "requires": { 965 | "@babel/helper-plugin-utils": "^7.8.0" 966 | } 967 | }, 968 | "@babel/plugin-syntax-logical-assignment-operators": { 969 | "version": "7.10.4", 970 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 971 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 972 | "dev": true, 973 | "requires": { 974 | "@babel/helper-plugin-utils": "^7.10.4" 975 | } 976 | }, 977 | "@babel/plugin-syntax-nullish-coalescing-operator": { 978 | "version": "7.8.3", 979 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 980 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 981 | "dev": true, 982 | "requires": { 983 | "@babel/helper-plugin-utils": "^7.8.0" 984 | } 985 | }, 986 | "@babel/plugin-syntax-numeric-separator": { 987 | "version": "7.10.4", 988 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 989 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 990 | "dev": true, 991 | "requires": { 992 | "@babel/helper-plugin-utils": "^7.10.4" 993 | } 994 | }, 995 | "@babel/plugin-syntax-object-rest-spread": { 996 | "version": "7.8.3", 997 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 998 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 999 | "dev": true, 1000 | "requires": { 1001 | "@babel/helper-plugin-utils": "^7.8.0" 1002 | } 1003 | }, 1004 | "@babel/plugin-syntax-optional-catch-binding": { 1005 | "version": "7.8.3", 1006 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 1007 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 1008 | "dev": true, 1009 | "requires": { 1010 | "@babel/helper-plugin-utils": "^7.8.0" 1011 | } 1012 | }, 1013 | "@babel/plugin-syntax-optional-chaining": { 1014 | "version": "7.8.3", 1015 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 1016 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 1017 | "dev": true, 1018 | "requires": { 1019 | "@babel/helper-plugin-utils": "^7.8.0" 1020 | } 1021 | }, 1022 | "@babel/plugin-syntax-top-level-await": { 1023 | "version": "7.12.1", 1024 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", 1025 | "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", 1026 | "dev": true, 1027 | "requires": { 1028 | "@babel/helper-plugin-utils": "^7.10.4" 1029 | } 1030 | }, 1031 | "@babel/plugin-transform-arrow-functions": { 1032 | "version": "7.12.1", 1033 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", 1034 | "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", 1035 | "dev": true, 1036 | "requires": { 1037 | "@babel/helper-plugin-utils": "^7.10.4" 1038 | } 1039 | }, 1040 | "@babel/plugin-transform-async-to-generator": { 1041 | "version": "7.12.1", 1042 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", 1043 | "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", 1044 | "dev": true, 1045 | "requires": { 1046 | "@babel/helper-module-imports": "^7.12.1", 1047 | "@babel/helper-plugin-utils": "^7.10.4", 1048 | "@babel/helper-remap-async-to-generator": "^7.12.1" 1049 | } 1050 | }, 1051 | "@babel/plugin-transform-block-scoped-functions": { 1052 | "version": "7.12.1", 1053 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", 1054 | "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", 1055 | "dev": true, 1056 | "requires": { 1057 | "@babel/helper-plugin-utils": "^7.10.4" 1058 | } 1059 | }, 1060 | "@babel/plugin-transform-block-scoping": { 1061 | "version": "7.12.1", 1062 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", 1063 | "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", 1064 | "dev": true, 1065 | "requires": { 1066 | "@babel/helper-plugin-utils": "^7.10.4" 1067 | } 1068 | }, 1069 | "@babel/plugin-transform-classes": { 1070 | "version": "7.12.1", 1071 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", 1072 | "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", 1073 | "dev": true, 1074 | "requires": { 1075 | "@babel/helper-annotate-as-pure": "^7.10.4", 1076 | "@babel/helper-define-map": "^7.10.4", 1077 | "@babel/helper-function-name": "^7.10.4", 1078 | "@babel/helper-optimise-call-expression": "^7.10.4", 1079 | "@babel/helper-plugin-utils": "^7.10.4", 1080 | "@babel/helper-replace-supers": "^7.12.1", 1081 | "@babel/helper-split-export-declaration": "^7.10.4", 1082 | "globals": "^11.1.0" 1083 | } 1084 | }, 1085 | "@babel/plugin-transform-computed-properties": { 1086 | "version": "7.12.1", 1087 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", 1088 | "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", 1089 | "dev": true, 1090 | "requires": { 1091 | "@babel/helper-plugin-utils": "^7.10.4" 1092 | } 1093 | }, 1094 | "@babel/plugin-transform-destructuring": { 1095 | "version": "7.12.1", 1096 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", 1097 | "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", 1098 | "dev": true, 1099 | "requires": { 1100 | "@babel/helper-plugin-utils": "^7.10.4" 1101 | } 1102 | }, 1103 | "@babel/plugin-transform-dotall-regex": { 1104 | "version": "7.12.1", 1105 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", 1106 | "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", 1107 | "dev": true, 1108 | "requires": { 1109 | "@babel/helper-create-regexp-features-plugin": "^7.12.1", 1110 | "@babel/helper-plugin-utils": "^7.10.4" 1111 | } 1112 | }, 1113 | "@babel/plugin-transform-duplicate-keys": { 1114 | "version": "7.12.1", 1115 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", 1116 | "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", 1117 | "dev": true, 1118 | "requires": { 1119 | "@babel/helper-plugin-utils": "^7.10.4" 1120 | } 1121 | }, 1122 | "@babel/plugin-transform-exponentiation-operator": { 1123 | "version": "7.12.1", 1124 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", 1125 | "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", 1126 | "dev": true, 1127 | "requires": { 1128 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", 1129 | "@babel/helper-plugin-utils": "^7.10.4" 1130 | } 1131 | }, 1132 | "@babel/plugin-transform-for-of": { 1133 | "version": "7.12.1", 1134 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", 1135 | "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", 1136 | "dev": true, 1137 | "requires": { 1138 | "@babel/helper-plugin-utils": "^7.10.4" 1139 | } 1140 | }, 1141 | "@babel/plugin-transform-function-name": { 1142 | "version": "7.12.1", 1143 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", 1144 | "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", 1145 | "dev": true, 1146 | "requires": { 1147 | "@babel/helper-function-name": "^7.10.4", 1148 | "@babel/helper-plugin-utils": "^7.10.4" 1149 | } 1150 | }, 1151 | "@babel/plugin-transform-literals": { 1152 | "version": "7.12.1", 1153 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", 1154 | "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", 1155 | "dev": true, 1156 | "requires": { 1157 | "@babel/helper-plugin-utils": "^7.10.4" 1158 | } 1159 | }, 1160 | "@babel/plugin-transform-member-expression-literals": { 1161 | "version": "7.12.1", 1162 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", 1163 | "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", 1164 | "dev": true, 1165 | "requires": { 1166 | "@babel/helper-plugin-utils": "^7.10.4" 1167 | } 1168 | }, 1169 | "@babel/plugin-transform-modules-amd": { 1170 | "version": "7.12.1", 1171 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", 1172 | "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", 1173 | "dev": true, 1174 | "requires": { 1175 | "@babel/helper-module-transforms": "^7.12.1", 1176 | "@babel/helper-plugin-utils": "^7.10.4", 1177 | "babel-plugin-dynamic-import-node": "^2.3.3" 1178 | } 1179 | }, 1180 | "@babel/plugin-transform-modules-commonjs": { 1181 | "version": "7.12.1", 1182 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", 1183 | "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", 1184 | "dev": true, 1185 | "requires": { 1186 | "@babel/helper-module-transforms": "^7.12.1", 1187 | "@babel/helper-plugin-utils": "^7.10.4", 1188 | "@babel/helper-simple-access": "^7.12.1", 1189 | "babel-plugin-dynamic-import-node": "^2.3.3" 1190 | } 1191 | }, 1192 | "@babel/plugin-transform-modules-systemjs": { 1193 | "version": "7.12.1", 1194 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", 1195 | "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", 1196 | "dev": true, 1197 | "requires": { 1198 | "@babel/helper-hoist-variables": "^7.10.4", 1199 | "@babel/helper-module-transforms": "^7.12.1", 1200 | "@babel/helper-plugin-utils": "^7.10.4", 1201 | "@babel/helper-validator-identifier": "^7.10.4", 1202 | "babel-plugin-dynamic-import-node": "^2.3.3" 1203 | } 1204 | }, 1205 | "@babel/plugin-transform-modules-umd": { 1206 | "version": "7.12.1", 1207 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", 1208 | "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", 1209 | "dev": true, 1210 | "requires": { 1211 | "@babel/helper-module-transforms": "^7.12.1", 1212 | "@babel/helper-plugin-utils": "^7.10.4" 1213 | } 1214 | }, 1215 | "@babel/plugin-transform-named-capturing-groups-regex": { 1216 | "version": "7.12.1", 1217 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", 1218 | "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", 1219 | "dev": true, 1220 | "requires": { 1221 | "@babel/helper-create-regexp-features-plugin": "^7.12.1" 1222 | } 1223 | }, 1224 | "@babel/plugin-transform-new-target": { 1225 | "version": "7.12.1", 1226 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", 1227 | "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", 1228 | "dev": true, 1229 | "requires": { 1230 | "@babel/helper-plugin-utils": "^7.10.4" 1231 | } 1232 | }, 1233 | "@babel/plugin-transform-object-super": { 1234 | "version": "7.12.1", 1235 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", 1236 | "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", 1237 | "dev": true, 1238 | "requires": { 1239 | "@babel/helper-plugin-utils": "^7.10.4", 1240 | "@babel/helper-replace-supers": "^7.12.1" 1241 | } 1242 | }, 1243 | "@babel/plugin-transform-parameters": { 1244 | "version": "7.12.1", 1245 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", 1246 | "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", 1247 | "dev": true, 1248 | "requires": { 1249 | "@babel/helper-plugin-utils": "^7.10.4" 1250 | } 1251 | }, 1252 | "@babel/plugin-transform-property-literals": { 1253 | "version": "7.12.1", 1254 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", 1255 | "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", 1256 | "dev": true, 1257 | "requires": { 1258 | "@babel/helper-plugin-utils": "^7.10.4" 1259 | } 1260 | }, 1261 | "@babel/plugin-transform-regenerator": { 1262 | "version": "7.12.1", 1263 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", 1264 | "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", 1265 | "dev": true, 1266 | "requires": { 1267 | "regenerator-transform": "^0.14.2" 1268 | } 1269 | }, 1270 | "@babel/plugin-transform-reserved-words": { 1271 | "version": "7.12.1", 1272 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", 1273 | "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", 1274 | "dev": true, 1275 | "requires": { 1276 | "@babel/helper-plugin-utils": "^7.10.4" 1277 | } 1278 | }, 1279 | "@babel/plugin-transform-shorthand-properties": { 1280 | "version": "7.12.1", 1281 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", 1282 | "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", 1283 | "dev": true, 1284 | "requires": { 1285 | "@babel/helper-plugin-utils": "^7.10.4" 1286 | } 1287 | }, 1288 | "@babel/plugin-transform-spread": { 1289 | "version": "7.12.1", 1290 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", 1291 | "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", 1292 | "dev": true, 1293 | "requires": { 1294 | "@babel/helper-plugin-utils": "^7.10.4", 1295 | "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" 1296 | } 1297 | }, 1298 | "@babel/plugin-transform-sticky-regex": { 1299 | "version": "7.12.1", 1300 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", 1301 | "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", 1302 | "dev": true, 1303 | "requires": { 1304 | "@babel/helper-plugin-utils": "^7.10.4", 1305 | "@babel/helper-regex": "^7.10.4" 1306 | } 1307 | }, 1308 | "@babel/plugin-transform-template-literals": { 1309 | "version": "7.12.1", 1310 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", 1311 | "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", 1312 | "dev": true, 1313 | "requires": { 1314 | "@babel/helper-plugin-utils": "^7.10.4" 1315 | } 1316 | }, 1317 | "@babel/plugin-transform-typeof-symbol": { 1318 | "version": "7.12.1", 1319 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", 1320 | "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", 1321 | "dev": true, 1322 | "requires": { 1323 | "@babel/helper-plugin-utils": "^7.10.4" 1324 | } 1325 | }, 1326 | "@babel/plugin-transform-unicode-escapes": { 1327 | "version": "7.12.1", 1328 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", 1329 | "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", 1330 | "dev": true, 1331 | "requires": { 1332 | "@babel/helper-plugin-utils": "^7.10.4" 1333 | } 1334 | }, 1335 | "@babel/plugin-transform-unicode-regex": { 1336 | "version": "7.12.1", 1337 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", 1338 | "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", 1339 | "dev": true, 1340 | "requires": { 1341 | "@babel/helper-create-regexp-features-plugin": "^7.12.1", 1342 | "@babel/helper-plugin-utils": "^7.10.4" 1343 | } 1344 | }, 1345 | "@babel/preset-env": { 1346 | "version": "7.12.1", 1347 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", 1348 | "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", 1349 | "dev": true, 1350 | "requires": { 1351 | "@babel/compat-data": "^7.12.1", 1352 | "@babel/helper-compilation-targets": "^7.12.1", 1353 | "@babel/helper-module-imports": "^7.12.1", 1354 | "@babel/helper-plugin-utils": "^7.10.4", 1355 | "@babel/helper-validator-option": "^7.12.1", 1356 | "@babel/plugin-proposal-async-generator-functions": "^7.12.1", 1357 | "@babel/plugin-proposal-class-properties": "^7.12.1", 1358 | "@babel/plugin-proposal-dynamic-import": "^7.12.1", 1359 | "@babel/plugin-proposal-export-namespace-from": "^7.12.1", 1360 | "@babel/plugin-proposal-json-strings": "^7.12.1", 1361 | "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", 1362 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", 1363 | "@babel/plugin-proposal-numeric-separator": "^7.12.1", 1364 | "@babel/plugin-proposal-object-rest-spread": "^7.12.1", 1365 | "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", 1366 | "@babel/plugin-proposal-optional-chaining": "^7.12.1", 1367 | "@babel/plugin-proposal-private-methods": "^7.12.1", 1368 | "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", 1369 | "@babel/plugin-syntax-async-generators": "^7.8.0", 1370 | "@babel/plugin-syntax-class-properties": "^7.12.1", 1371 | "@babel/plugin-syntax-dynamic-import": "^7.8.0", 1372 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3", 1373 | "@babel/plugin-syntax-json-strings": "^7.8.0", 1374 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", 1375 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", 1376 | "@babel/plugin-syntax-numeric-separator": "^7.10.4", 1377 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 1378 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", 1379 | "@babel/plugin-syntax-optional-chaining": "^7.8.0", 1380 | "@babel/plugin-syntax-top-level-await": "^7.12.1", 1381 | "@babel/plugin-transform-arrow-functions": "^7.12.1", 1382 | "@babel/plugin-transform-async-to-generator": "^7.12.1", 1383 | "@babel/plugin-transform-block-scoped-functions": "^7.12.1", 1384 | "@babel/plugin-transform-block-scoping": "^7.12.1", 1385 | "@babel/plugin-transform-classes": "^7.12.1", 1386 | "@babel/plugin-transform-computed-properties": "^7.12.1", 1387 | "@babel/plugin-transform-destructuring": "^7.12.1", 1388 | "@babel/plugin-transform-dotall-regex": "^7.12.1", 1389 | "@babel/plugin-transform-duplicate-keys": "^7.12.1", 1390 | "@babel/plugin-transform-exponentiation-operator": "^7.12.1", 1391 | "@babel/plugin-transform-for-of": "^7.12.1", 1392 | "@babel/plugin-transform-function-name": "^7.12.1", 1393 | "@babel/plugin-transform-literals": "^7.12.1", 1394 | "@babel/plugin-transform-member-expression-literals": "^7.12.1", 1395 | "@babel/plugin-transform-modules-amd": "^7.12.1", 1396 | "@babel/plugin-transform-modules-commonjs": "^7.12.1", 1397 | "@babel/plugin-transform-modules-systemjs": "^7.12.1", 1398 | "@babel/plugin-transform-modules-umd": "^7.12.1", 1399 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", 1400 | "@babel/plugin-transform-new-target": "^7.12.1", 1401 | "@babel/plugin-transform-object-super": "^7.12.1", 1402 | "@babel/plugin-transform-parameters": "^7.12.1", 1403 | "@babel/plugin-transform-property-literals": "^7.12.1", 1404 | "@babel/plugin-transform-regenerator": "^7.12.1", 1405 | "@babel/plugin-transform-reserved-words": "^7.12.1", 1406 | "@babel/plugin-transform-shorthand-properties": "^7.12.1", 1407 | "@babel/plugin-transform-spread": "^7.12.1", 1408 | "@babel/plugin-transform-sticky-regex": "^7.12.1", 1409 | "@babel/plugin-transform-template-literals": "^7.12.1", 1410 | "@babel/plugin-transform-typeof-symbol": "^7.12.1", 1411 | "@babel/plugin-transform-unicode-escapes": "^7.12.1", 1412 | "@babel/plugin-transform-unicode-regex": "^7.12.1", 1413 | "@babel/preset-modules": "^0.1.3", 1414 | "@babel/types": "^7.12.1", 1415 | "core-js-compat": "^3.6.2", 1416 | "semver": "^5.5.0" 1417 | } 1418 | }, 1419 | "@babel/preset-modules": { 1420 | "version": "0.1.4", 1421 | "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", 1422 | "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", 1423 | "dev": true, 1424 | "requires": { 1425 | "@babel/helper-plugin-utils": "^7.0.0", 1426 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 1427 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 1428 | "@babel/types": "^7.4.4", 1429 | "esutils": "^2.0.2" 1430 | } 1431 | }, 1432 | "@babel/runtime": { 1433 | "version": "7.12.1", 1434 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", 1435 | "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", 1436 | "dev": true, 1437 | "requires": { 1438 | "regenerator-runtime": "^0.13.4" 1439 | } 1440 | }, 1441 | "@babel/template": { 1442 | "version": "7.10.4", 1443 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", 1444 | "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", 1445 | "dev": true, 1446 | "requires": { 1447 | "@babel/code-frame": "^7.10.4", 1448 | "@babel/parser": "^7.10.4", 1449 | "@babel/types": "^7.10.4" 1450 | } 1451 | }, 1452 | "@babel/traverse": { 1453 | "version": "7.12.1", 1454 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", 1455 | "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", 1456 | "dev": true, 1457 | "requires": { 1458 | "@babel/code-frame": "^7.10.4", 1459 | "@babel/generator": "^7.12.1", 1460 | "@babel/helper-function-name": "^7.10.4", 1461 | "@babel/helper-split-export-declaration": "^7.11.0", 1462 | "@babel/parser": "^7.12.1", 1463 | "@babel/types": "^7.12.1", 1464 | "debug": "^4.1.0", 1465 | "globals": "^11.1.0", 1466 | "lodash": "^4.17.19" 1467 | } 1468 | }, 1469 | "@babel/types": { 1470 | "version": "7.12.1", 1471 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", 1472 | "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", 1473 | "dev": true, 1474 | "requires": { 1475 | "@babel/helper-validator-identifier": "^7.10.4", 1476 | "lodash": "^4.17.19", 1477 | "to-fast-properties": "^2.0.0" 1478 | } 1479 | }, 1480 | "@types/eslint": { 1481 | "version": "7.2.4", 1482 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.4.tgz", 1483 | "integrity": "sha512-YCY4kzHMsHoyKspQH+nwSe+70Kep7Vjt2X+dZe5Vs2vkRudqtoFoUIv1RlJmZB8Hbp7McneupoZij4PadxsK5Q==", 1484 | "dev": true, 1485 | "requires": { 1486 | "@types/estree": "*", 1487 | "@types/json-schema": "*" 1488 | } 1489 | }, 1490 | "@types/eslint-scope": { 1491 | "version": "3.7.0", 1492 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", 1493 | "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", 1494 | "dev": true, 1495 | "requires": { 1496 | "@types/eslint": "*", 1497 | "@types/estree": "*" 1498 | } 1499 | }, 1500 | "@types/estree": { 1501 | "version": "0.0.45", 1502 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", 1503 | "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", 1504 | "dev": true 1505 | }, 1506 | "@types/json-schema": { 1507 | "version": "7.0.6", 1508 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", 1509 | "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", 1510 | "dev": true 1511 | }, 1512 | "@types/node": { 1513 | "version": "14.14.2", 1514 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.2.tgz", 1515 | "integrity": "sha512-jeYJU2kl7hL9U5xuI/BhKPZ4vqGM/OmK6whiFAXVhlstzZhVamWhDSmHyGLIp+RVyuF9/d0dqr2P85aFj4BvJg==", 1516 | "dev": true 1517 | }, 1518 | "@webassemblyjs/ast": { 1519 | "version": "1.9.0", 1520 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", 1521 | "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", 1522 | "dev": true, 1523 | "requires": { 1524 | "@webassemblyjs/helper-module-context": "1.9.0", 1525 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0", 1526 | "@webassemblyjs/wast-parser": "1.9.0" 1527 | } 1528 | }, 1529 | "@webassemblyjs/floating-point-hex-parser": { 1530 | "version": "1.9.0", 1531 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", 1532 | "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", 1533 | "dev": true 1534 | }, 1535 | "@webassemblyjs/helper-api-error": { 1536 | "version": "1.9.0", 1537 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", 1538 | "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", 1539 | "dev": true 1540 | }, 1541 | "@webassemblyjs/helper-buffer": { 1542 | "version": "1.9.0", 1543 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", 1544 | "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", 1545 | "dev": true 1546 | }, 1547 | "@webassemblyjs/helper-code-frame": { 1548 | "version": "1.9.0", 1549 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", 1550 | "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", 1551 | "dev": true, 1552 | "requires": { 1553 | "@webassemblyjs/wast-printer": "1.9.0" 1554 | } 1555 | }, 1556 | "@webassemblyjs/helper-fsm": { 1557 | "version": "1.9.0", 1558 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", 1559 | "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", 1560 | "dev": true 1561 | }, 1562 | "@webassemblyjs/helper-module-context": { 1563 | "version": "1.9.0", 1564 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", 1565 | "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", 1566 | "dev": true, 1567 | "requires": { 1568 | "@webassemblyjs/ast": "1.9.0" 1569 | } 1570 | }, 1571 | "@webassemblyjs/helper-wasm-bytecode": { 1572 | "version": "1.9.0", 1573 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", 1574 | "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", 1575 | "dev": true 1576 | }, 1577 | "@webassemblyjs/helper-wasm-section": { 1578 | "version": "1.9.0", 1579 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", 1580 | "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", 1581 | "dev": true, 1582 | "requires": { 1583 | "@webassemblyjs/ast": "1.9.0", 1584 | "@webassemblyjs/helper-buffer": "1.9.0", 1585 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0", 1586 | "@webassemblyjs/wasm-gen": "1.9.0" 1587 | } 1588 | }, 1589 | "@webassemblyjs/ieee754": { 1590 | "version": "1.9.0", 1591 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", 1592 | "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", 1593 | "dev": true, 1594 | "requires": { 1595 | "@xtuc/ieee754": "^1.2.0" 1596 | } 1597 | }, 1598 | "@webassemblyjs/leb128": { 1599 | "version": "1.9.0", 1600 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", 1601 | "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", 1602 | "dev": true, 1603 | "requires": { 1604 | "@xtuc/long": "4.2.2" 1605 | } 1606 | }, 1607 | "@webassemblyjs/utf8": { 1608 | "version": "1.9.0", 1609 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", 1610 | "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", 1611 | "dev": true 1612 | }, 1613 | "@webassemblyjs/wasm-edit": { 1614 | "version": "1.9.0", 1615 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", 1616 | "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", 1617 | "dev": true, 1618 | "requires": { 1619 | "@webassemblyjs/ast": "1.9.0", 1620 | "@webassemblyjs/helper-buffer": "1.9.0", 1621 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0", 1622 | "@webassemblyjs/helper-wasm-section": "1.9.0", 1623 | "@webassemblyjs/wasm-gen": "1.9.0", 1624 | "@webassemblyjs/wasm-opt": "1.9.0", 1625 | "@webassemblyjs/wasm-parser": "1.9.0", 1626 | "@webassemblyjs/wast-printer": "1.9.0" 1627 | } 1628 | }, 1629 | "@webassemblyjs/wasm-gen": { 1630 | "version": "1.9.0", 1631 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", 1632 | "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", 1633 | "dev": true, 1634 | "requires": { 1635 | "@webassemblyjs/ast": "1.9.0", 1636 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0", 1637 | "@webassemblyjs/ieee754": "1.9.0", 1638 | "@webassemblyjs/leb128": "1.9.0", 1639 | "@webassemblyjs/utf8": "1.9.0" 1640 | } 1641 | }, 1642 | "@webassemblyjs/wasm-opt": { 1643 | "version": "1.9.0", 1644 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", 1645 | "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", 1646 | "dev": true, 1647 | "requires": { 1648 | "@webassemblyjs/ast": "1.9.0", 1649 | "@webassemblyjs/helper-buffer": "1.9.0", 1650 | "@webassemblyjs/wasm-gen": "1.9.0", 1651 | "@webassemblyjs/wasm-parser": "1.9.0" 1652 | } 1653 | }, 1654 | "@webassemblyjs/wasm-parser": { 1655 | "version": "1.9.0", 1656 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", 1657 | "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", 1658 | "dev": true, 1659 | "requires": { 1660 | "@webassemblyjs/ast": "1.9.0", 1661 | "@webassemblyjs/helper-api-error": "1.9.0", 1662 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0", 1663 | "@webassemblyjs/ieee754": "1.9.0", 1664 | "@webassemblyjs/leb128": "1.9.0", 1665 | "@webassemblyjs/utf8": "1.9.0" 1666 | } 1667 | }, 1668 | "@webassemblyjs/wast-parser": { 1669 | "version": "1.9.0", 1670 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", 1671 | "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", 1672 | "dev": true, 1673 | "requires": { 1674 | "@webassemblyjs/ast": "1.9.0", 1675 | "@webassemblyjs/floating-point-hex-parser": "1.9.0", 1676 | "@webassemblyjs/helper-api-error": "1.9.0", 1677 | "@webassemblyjs/helper-code-frame": "1.9.0", 1678 | "@webassemblyjs/helper-fsm": "1.9.0", 1679 | "@xtuc/long": "4.2.2" 1680 | } 1681 | }, 1682 | "@webassemblyjs/wast-printer": { 1683 | "version": "1.9.0", 1684 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", 1685 | "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", 1686 | "dev": true, 1687 | "requires": { 1688 | "@webassemblyjs/ast": "1.9.0", 1689 | "@webassemblyjs/wast-parser": "1.9.0", 1690 | "@xtuc/long": "4.2.2" 1691 | } 1692 | }, 1693 | "@webpack-cli/info": { 1694 | "version": "1.0.2", 1695 | "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.0.2.tgz", 1696 | "integrity": "sha512-FEfLQwmN4pXZSYSrtp+KC84rFanoCIxXFpS2wUvviDCE2fnajwxw2GXzbj83IlH4Dl8Wq8kJjavVwvxv3YJmnw==", 1697 | "dev": true, 1698 | "requires": { 1699 | "envinfo": "^7.7.3" 1700 | } 1701 | }, 1702 | "@webpack-cli/serve": { 1703 | "version": "1.0.1", 1704 | "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.0.1.tgz", 1705 | "integrity": "sha512-WGMaTMTK6NOe29Hw1WBEok9vGLfKg5C6jWzNOS/6HH1YadR+RL+TRWRcSyc81Dzulljhk/Ree9mrDM4Np9GGOQ==", 1706 | "dev": true 1707 | }, 1708 | "@xtuc/ieee754": { 1709 | "version": "1.2.0", 1710 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 1711 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 1712 | "dev": true 1713 | }, 1714 | "@xtuc/long": { 1715 | "version": "4.2.2", 1716 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 1717 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 1718 | "dev": true 1719 | }, 1720 | "acorn": { 1721 | "version": "8.0.4", 1722 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", 1723 | "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", 1724 | "dev": true 1725 | }, 1726 | "ajv": { 1727 | "version": "6.12.6", 1728 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1729 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1730 | "dev": true, 1731 | "requires": { 1732 | "fast-deep-equal": "^3.1.1", 1733 | "fast-json-stable-stringify": "^2.0.0", 1734 | "json-schema-traverse": "^0.4.1", 1735 | "uri-js": "^4.2.2" 1736 | } 1737 | }, 1738 | "ajv-keywords": { 1739 | "version": "3.5.2", 1740 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 1741 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 1742 | "dev": true 1743 | }, 1744 | "ansi-colors": { 1745 | "version": "4.1.1", 1746 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 1747 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 1748 | "dev": true 1749 | }, 1750 | "ansi-escapes": { 1751 | "version": "4.3.1", 1752 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 1753 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 1754 | "dev": true, 1755 | "requires": { 1756 | "type-fest": "^0.11.0" 1757 | } 1758 | }, 1759 | "ansi-styles": { 1760 | "version": "3.2.1", 1761 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1762 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1763 | "dev": true, 1764 | "requires": { 1765 | "color-convert": "^1.9.0" 1766 | } 1767 | }, 1768 | "array-back": { 1769 | "version": "4.0.1", 1770 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", 1771 | "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", 1772 | "dev": true 1773 | }, 1774 | "at-least-node": { 1775 | "version": "1.0.0", 1776 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 1777 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" 1778 | }, 1779 | "babel-loader": { 1780 | "version": "8.1.0", 1781 | "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", 1782 | "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", 1783 | "dev": true, 1784 | "requires": { 1785 | "find-cache-dir": "^2.1.0", 1786 | "loader-utils": "^1.4.0", 1787 | "mkdirp": "^0.5.3", 1788 | "pify": "^4.0.1", 1789 | "schema-utils": "^2.6.5" 1790 | } 1791 | }, 1792 | "babel-plugin-dynamic-import-node": { 1793 | "version": "2.3.3", 1794 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 1795 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 1796 | "dev": true, 1797 | "requires": { 1798 | "object.assign": "^4.1.0" 1799 | } 1800 | }, 1801 | "big.js": { 1802 | "version": "5.2.2", 1803 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 1804 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 1805 | "dev": true 1806 | }, 1807 | "browserslist": { 1808 | "version": "4.14.5", 1809 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", 1810 | "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", 1811 | "dev": true, 1812 | "requires": { 1813 | "caniuse-lite": "^1.0.30001135", 1814 | "electron-to-chromium": "^1.3.571", 1815 | "escalade": "^3.1.0", 1816 | "node-releases": "^1.1.61" 1817 | } 1818 | }, 1819 | "buffer-from": { 1820 | "version": "1.1.1", 1821 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1822 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1823 | "dev": true 1824 | }, 1825 | "caniuse-lite": { 1826 | "version": "1.0.30001150", 1827 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz", 1828 | "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==", 1829 | "dev": true 1830 | }, 1831 | "chalk": { 1832 | "version": "2.4.2", 1833 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1834 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1835 | "dev": true, 1836 | "requires": { 1837 | "ansi-styles": "^3.2.1", 1838 | "escape-string-regexp": "^1.0.5", 1839 | "supports-color": "^5.3.0" 1840 | } 1841 | }, 1842 | "chrome-trace-event": { 1843 | "version": "1.0.2", 1844 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", 1845 | "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", 1846 | "dev": true, 1847 | "requires": { 1848 | "tslib": "^1.9.0" 1849 | } 1850 | }, 1851 | "color-convert": { 1852 | "version": "1.9.3", 1853 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1854 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1855 | "dev": true, 1856 | "requires": { 1857 | "color-name": "1.1.3" 1858 | } 1859 | }, 1860 | "color-name": { 1861 | "version": "1.1.3", 1862 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1863 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1864 | "dev": true 1865 | }, 1866 | "colorette": { 1867 | "version": "1.2.1", 1868 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", 1869 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", 1870 | "dev": true 1871 | }, 1872 | "command-line-usage": { 1873 | "version": "6.1.0", 1874 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.0.tgz", 1875 | "integrity": "sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw==", 1876 | "dev": true, 1877 | "requires": { 1878 | "array-back": "^4.0.0", 1879 | "chalk": "^2.4.2", 1880 | "table-layout": "^1.0.0", 1881 | "typical": "^5.2.0" 1882 | } 1883 | }, 1884 | "commander": { 1885 | "version": "2.20.3", 1886 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1887 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1888 | "dev": true 1889 | }, 1890 | "commondir": { 1891 | "version": "1.0.1", 1892 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1893 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 1894 | "dev": true 1895 | }, 1896 | "constructs": { 1897 | "version": "3.1.2", 1898 | "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.1.2.tgz", 1899 | "integrity": "sha512-J7Elc/RC916QaIDAX6Z9r2glT/TsJjXHAwjp64DbXuftGzc64rFN0VP+EwhvVi/tlJ7cjwe9QDx+SKKOXoi+pQ==" 1900 | }, 1901 | "convert-source-map": { 1902 | "version": "1.7.0", 1903 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 1904 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 1905 | "dev": true, 1906 | "requires": { 1907 | "safe-buffer": "~5.1.1" 1908 | } 1909 | }, 1910 | "core-js-compat": { 1911 | "version": "3.6.5", 1912 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", 1913 | "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", 1914 | "dev": true, 1915 | "requires": { 1916 | "browserslist": "^4.8.5", 1917 | "semver": "7.0.0" 1918 | }, 1919 | "dependencies": { 1920 | "semver": { 1921 | "version": "7.0.0", 1922 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1923 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1924 | "dev": true 1925 | } 1926 | } 1927 | }, 1928 | "cross-spawn": { 1929 | "version": "7.0.3", 1930 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1931 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1932 | "dev": true, 1933 | "requires": { 1934 | "path-key": "^3.1.0", 1935 | "shebang-command": "^2.0.0", 1936 | "which": "^2.0.1" 1937 | } 1938 | }, 1939 | "debug": { 1940 | "version": "4.2.0", 1941 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", 1942 | "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", 1943 | "dev": true, 1944 | "requires": { 1945 | "ms": "2.1.2" 1946 | } 1947 | }, 1948 | "deep-extend": { 1949 | "version": "0.6.0", 1950 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1951 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1952 | "dev": true 1953 | }, 1954 | "define-properties": { 1955 | "version": "1.1.3", 1956 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1957 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1958 | "dev": true, 1959 | "requires": { 1960 | "object-keys": "^1.0.12" 1961 | } 1962 | }, 1963 | "electron-to-chromium": { 1964 | "version": "1.3.583", 1965 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.583.tgz", 1966 | "integrity": "sha512-L9BwLwJohjZW9mQESI79HRzhicPk1DFgM+8hOCfGgGCFEcA3Otpv7QK6SGtYoZvfQfE3wKLh0Hd5ptqUFv3gvQ==", 1967 | "dev": true 1968 | }, 1969 | "emojis-list": { 1970 | "version": "3.0.0", 1971 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", 1972 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", 1973 | "dev": true 1974 | }, 1975 | "end-of-stream": { 1976 | "version": "1.4.4", 1977 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1978 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1979 | "dev": true, 1980 | "requires": { 1981 | "once": "^1.4.0" 1982 | } 1983 | }, 1984 | "enhanced-resolve": { 1985 | "version": "5.3.1", 1986 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", 1987 | "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", 1988 | "dev": true, 1989 | "requires": { 1990 | "graceful-fs": "^4.2.4", 1991 | "tapable": "^2.0.0" 1992 | } 1993 | }, 1994 | "enquirer": { 1995 | "version": "2.3.6", 1996 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 1997 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 1998 | "dev": true, 1999 | "requires": { 2000 | "ansi-colors": "^4.1.1" 2001 | } 2002 | }, 2003 | "envinfo": { 2004 | "version": "7.7.3", 2005 | "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", 2006 | "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", 2007 | "dev": true 2008 | }, 2009 | "es-abstract": { 2010 | "version": "1.18.0-next.1", 2011 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", 2012 | "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", 2013 | "dev": true, 2014 | "requires": { 2015 | "es-to-primitive": "^1.2.1", 2016 | "function-bind": "^1.1.1", 2017 | "has": "^1.0.3", 2018 | "has-symbols": "^1.0.1", 2019 | "is-callable": "^1.2.2", 2020 | "is-negative-zero": "^2.0.0", 2021 | "is-regex": "^1.1.1", 2022 | "object-inspect": "^1.8.0", 2023 | "object-keys": "^1.1.1", 2024 | "object.assign": "^4.1.1", 2025 | "string.prototype.trimend": "^1.0.1", 2026 | "string.prototype.trimstart": "^1.0.1" 2027 | } 2028 | }, 2029 | "es-to-primitive": { 2030 | "version": "1.2.1", 2031 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 2032 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 2033 | "dev": true, 2034 | "requires": { 2035 | "is-callable": "^1.1.4", 2036 | "is-date-object": "^1.0.1", 2037 | "is-symbol": "^1.0.2" 2038 | } 2039 | }, 2040 | "escalade": { 2041 | "version": "3.1.1", 2042 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2043 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2044 | "dev": true 2045 | }, 2046 | "escape-string-regexp": { 2047 | "version": "1.0.5", 2048 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2049 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 2050 | "dev": true 2051 | }, 2052 | "eslint-scope": { 2053 | "version": "5.1.1", 2054 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 2055 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 2056 | "dev": true, 2057 | "requires": { 2058 | "esrecurse": "^4.3.0", 2059 | "estraverse": "^4.1.1" 2060 | } 2061 | }, 2062 | "esrecurse": { 2063 | "version": "4.3.0", 2064 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2065 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2066 | "dev": true, 2067 | "requires": { 2068 | "estraverse": "^5.2.0" 2069 | }, 2070 | "dependencies": { 2071 | "estraverse": { 2072 | "version": "5.2.0", 2073 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 2074 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 2075 | "dev": true 2076 | } 2077 | } 2078 | }, 2079 | "estraverse": { 2080 | "version": "4.3.0", 2081 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2082 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2083 | "dev": true 2084 | }, 2085 | "esutils": { 2086 | "version": "2.0.3", 2087 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2088 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2089 | "dev": true 2090 | }, 2091 | "events": { 2092 | "version": "3.2.0", 2093 | "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", 2094 | "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", 2095 | "dev": true 2096 | }, 2097 | "execa": { 2098 | "version": "4.0.3", 2099 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", 2100 | "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", 2101 | "dev": true, 2102 | "requires": { 2103 | "cross-spawn": "^7.0.0", 2104 | "get-stream": "^5.0.0", 2105 | "human-signals": "^1.1.1", 2106 | "is-stream": "^2.0.0", 2107 | "merge-stream": "^2.0.0", 2108 | "npm-run-path": "^4.0.0", 2109 | "onetime": "^5.1.0", 2110 | "signal-exit": "^3.0.2", 2111 | "strip-final-newline": "^2.0.0" 2112 | } 2113 | }, 2114 | "fast-deep-equal": { 2115 | "version": "3.1.3", 2116 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2117 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2118 | "dev": true 2119 | }, 2120 | "fast-json-stable-stringify": { 2121 | "version": "2.1.0", 2122 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2123 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2124 | "dev": true 2125 | }, 2126 | "find-cache-dir": { 2127 | "version": "2.1.0", 2128 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", 2129 | "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", 2130 | "dev": true, 2131 | "requires": { 2132 | "commondir": "^1.0.1", 2133 | "make-dir": "^2.0.0", 2134 | "pkg-dir": "^3.0.0" 2135 | } 2136 | }, 2137 | "find-up": { 2138 | "version": "3.0.0", 2139 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 2140 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 2141 | "dev": true, 2142 | "requires": { 2143 | "locate-path": "^3.0.0" 2144 | } 2145 | }, 2146 | "fs-extra": { 2147 | "version": "9.0.1", 2148 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", 2149 | "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", 2150 | "requires": { 2151 | "at-least-node": "^1.0.0", 2152 | "graceful-fs": "^4.2.0", 2153 | "jsonfile": "^6.0.1", 2154 | "universalify": "^1.0.0" 2155 | } 2156 | }, 2157 | "function-bind": { 2158 | "version": "1.1.1", 2159 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2160 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2161 | "dev": true 2162 | }, 2163 | "gensync": { 2164 | "version": "1.0.0-beta.1", 2165 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", 2166 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", 2167 | "dev": true 2168 | }, 2169 | "get-stream": { 2170 | "version": "5.2.0", 2171 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2172 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2173 | "dev": true, 2174 | "requires": { 2175 | "pump": "^3.0.0" 2176 | } 2177 | }, 2178 | "glob-to-regexp": { 2179 | "version": "0.4.1", 2180 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 2181 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 2182 | "dev": true 2183 | }, 2184 | "globals": { 2185 | "version": "11.12.0", 2186 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2187 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2188 | "dev": true 2189 | }, 2190 | "graceful-fs": { 2191 | "version": "4.2.4", 2192 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 2193 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 2194 | }, 2195 | "has": { 2196 | "version": "1.0.3", 2197 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2198 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2199 | "dev": true, 2200 | "requires": { 2201 | "function-bind": "^1.1.1" 2202 | } 2203 | }, 2204 | "has-flag": { 2205 | "version": "3.0.0", 2206 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2207 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2208 | "dev": true 2209 | }, 2210 | "has-symbols": { 2211 | "version": "1.0.1", 2212 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 2213 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 2214 | "dev": true 2215 | }, 2216 | "human-signals": { 2217 | "version": "1.1.1", 2218 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 2219 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 2220 | "dev": true 2221 | }, 2222 | "import-local": { 2223 | "version": "3.0.2", 2224 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", 2225 | "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", 2226 | "dev": true, 2227 | "requires": { 2228 | "pkg-dir": "^4.2.0", 2229 | "resolve-cwd": "^3.0.0" 2230 | }, 2231 | "dependencies": { 2232 | "find-up": { 2233 | "version": "4.1.0", 2234 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 2235 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 2236 | "dev": true, 2237 | "requires": { 2238 | "locate-path": "^5.0.0", 2239 | "path-exists": "^4.0.0" 2240 | } 2241 | }, 2242 | "locate-path": { 2243 | "version": "5.0.0", 2244 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2245 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2246 | "dev": true, 2247 | "requires": { 2248 | "p-locate": "^4.1.0" 2249 | } 2250 | }, 2251 | "p-locate": { 2252 | "version": "4.1.0", 2253 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2254 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2255 | "dev": true, 2256 | "requires": { 2257 | "p-limit": "^2.2.0" 2258 | } 2259 | }, 2260 | "path-exists": { 2261 | "version": "4.0.0", 2262 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2263 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2264 | "dev": true 2265 | }, 2266 | "pkg-dir": { 2267 | "version": "4.2.0", 2268 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 2269 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 2270 | "dev": true, 2271 | "requires": { 2272 | "find-up": "^4.0.0" 2273 | } 2274 | } 2275 | } 2276 | }, 2277 | "interpret": { 2278 | "version": "2.2.0", 2279 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", 2280 | "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", 2281 | "dev": true 2282 | }, 2283 | "is-callable": { 2284 | "version": "1.2.2", 2285 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", 2286 | "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", 2287 | "dev": true 2288 | }, 2289 | "is-core-module": { 2290 | "version": "2.0.0", 2291 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", 2292 | "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", 2293 | "dev": true, 2294 | "requires": { 2295 | "has": "^1.0.3" 2296 | } 2297 | }, 2298 | "is-date-object": { 2299 | "version": "1.0.2", 2300 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 2301 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 2302 | "dev": true 2303 | }, 2304 | "is-negative-zero": { 2305 | "version": "2.0.0", 2306 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", 2307 | "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", 2308 | "dev": true 2309 | }, 2310 | "is-regex": { 2311 | "version": "1.1.1", 2312 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 2313 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 2314 | "dev": true, 2315 | "requires": { 2316 | "has-symbols": "^1.0.1" 2317 | } 2318 | }, 2319 | "is-stream": { 2320 | "version": "2.0.0", 2321 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 2322 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 2323 | "dev": true 2324 | }, 2325 | "is-symbol": { 2326 | "version": "1.0.3", 2327 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 2328 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 2329 | "dev": true, 2330 | "requires": { 2331 | "has-symbols": "^1.0.1" 2332 | } 2333 | }, 2334 | "isexe": { 2335 | "version": "2.0.0", 2336 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2337 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2338 | "dev": true 2339 | }, 2340 | "jest-worker": { 2341 | "version": "26.6.1", 2342 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.1.tgz", 2343 | "integrity": "sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw==", 2344 | "dev": true, 2345 | "requires": { 2346 | "@types/node": "*", 2347 | "merge-stream": "^2.0.0", 2348 | "supports-color": "^7.0.0" 2349 | }, 2350 | "dependencies": { 2351 | "has-flag": { 2352 | "version": "4.0.0", 2353 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2354 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2355 | "dev": true 2356 | }, 2357 | "supports-color": { 2358 | "version": "7.2.0", 2359 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2360 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2361 | "dev": true, 2362 | "requires": { 2363 | "has-flag": "^4.0.0" 2364 | } 2365 | } 2366 | } 2367 | }, 2368 | "js-tokens": { 2369 | "version": "4.0.0", 2370 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2371 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2372 | "dev": true 2373 | }, 2374 | "jsesc": { 2375 | "version": "2.5.2", 2376 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2377 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2378 | "dev": true 2379 | }, 2380 | "json-parse-better-errors": { 2381 | "version": "1.0.2", 2382 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 2383 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 2384 | "dev": true 2385 | }, 2386 | "json-schema-traverse": { 2387 | "version": "0.4.1", 2388 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2389 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2390 | "dev": true 2391 | }, 2392 | "json5": { 2393 | "version": "2.1.3", 2394 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", 2395 | "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", 2396 | "dev": true, 2397 | "requires": { 2398 | "minimist": "^1.2.5" 2399 | } 2400 | }, 2401 | "jsonfile": { 2402 | "version": "6.0.1", 2403 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", 2404 | "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", 2405 | "requires": { 2406 | "graceful-fs": "^4.1.6", 2407 | "universalify": "^1.0.0" 2408 | } 2409 | }, 2410 | "loader-runner": { 2411 | "version": "4.1.0", 2412 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", 2413 | "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", 2414 | "dev": true 2415 | }, 2416 | "loader-utils": { 2417 | "version": "1.4.0", 2418 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", 2419 | "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", 2420 | "dev": true, 2421 | "requires": { 2422 | "big.js": "^5.2.2", 2423 | "emojis-list": "^3.0.0", 2424 | "json5": "^1.0.1" 2425 | }, 2426 | "dependencies": { 2427 | "json5": { 2428 | "version": "1.0.1", 2429 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 2430 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 2431 | "dev": true, 2432 | "requires": { 2433 | "minimist": "^1.2.0" 2434 | } 2435 | } 2436 | } 2437 | }, 2438 | "locate-path": { 2439 | "version": "3.0.0", 2440 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2441 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2442 | "dev": true, 2443 | "requires": { 2444 | "p-locate": "^3.0.0", 2445 | "path-exists": "^3.0.0" 2446 | } 2447 | }, 2448 | "lodash": { 2449 | "version": "4.17.20", 2450 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 2451 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 2452 | "dev": true 2453 | }, 2454 | "make-dir": { 2455 | "version": "2.1.0", 2456 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 2457 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 2458 | "dev": true, 2459 | "requires": { 2460 | "pify": "^4.0.1", 2461 | "semver": "^5.6.0" 2462 | } 2463 | }, 2464 | "merge-stream": { 2465 | "version": "2.0.0", 2466 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2467 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2468 | "dev": true 2469 | }, 2470 | "mime-db": { 2471 | "version": "1.44.0", 2472 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 2473 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 2474 | "dev": true 2475 | }, 2476 | "mime-types": { 2477 | "version": "2.1.27", 2478 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 2479 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 2480 | "dev": true, 2481 | "requires": { 2482 | "mime-db": "1.44.0" 2483 | } 2484 | }, 2485 | "mimic-fn": { 2486 | "version": "2.1.0", 2487 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2488 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2489 | "dev": true 2490 | }, 2491 | "minimist": { 2492 | "version": "1.2.5", 2493 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2494 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 2495 | "dev": true 2496 | }, 2497 | "mkdirp": { 2498 | "version": "0.5.5", 2499 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 2500 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 2501 | "dev": true, 2502 | "requires": { 2503 | "minimist": "^1.2.5" 2504 | } 2505 | }, 2506 | "ms": { 2507 | "version": "2.1.2", 2508 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2509 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2510 | "dev": true 2511 | }, 2512 | "neo-async": { 2513 | "version": "2.6.2", 2514 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 2515 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 2516 | "dev": true 2517 | }, 2518 | "node-releases": { 2519 | "version": "1.1.64", 2520 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", 2521 | "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", 2522 | "dev": true 2523 | }, 2524 | "npm-run-path": { 2525 | "version": "4.0.1", 2526 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2527 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2528 | "dev": true, 2529 | "requires": { 2530 | "path-key": "^3.0.0" 2531 | } 2532 | }, 2533 | "object-inspect": { 2534 | "version": "1.8.0", 2535 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 2536 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 2537 | "dev": true 2538 | }, 2539 | "object-keys": { 2540 | "version": "1.1.1", 2541 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2542 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2543 | "dev": true 2544 | }, 2545 | "object.assign": { 2546 | "version": "4.1.1", 2547 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", 2548 | "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", 2549 | "dev": true, 2550 | "requires": { 2551 | "define-properties": "^1.1.3", 2552 | "es-abstract": "^1.18.0-next.0", 2553 | "has-symbols": "^1.0.1", 2554 | "object-keys": "^1.1.1" 2555 | } 2556 | }, 2557 | "once": { 2558 | "version": "1.4.0", 2559 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2560 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2561 | "dev": true, 2562 | "requires": { 2563 | "wrappy": "1" 2564 | } 2565 | }, 2566 | "onetime": { 2567 | "version": "5.1.2", 2568 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2569 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2570 | "dev": true, 2571 | "requires": { 2572 | "mimic-fn": "^2.1.0" 2573 | } 2574 | }, 2575 | "p-limit": { 2576 | "version": "2.3.0", 2577 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2578 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2579 | "dev": true, 2580 | "requires": { 2581 | "p-try": "^2.0.0" 2582 | } 2583 | }, 2584 | "p-locate": { 2585 | "version": "3.0.0", 2586 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2587 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2588 | "dev": true, 2589 | "requires": { 2590 | "p-limit": "^2.0.0" 2591 | } 2592 | }, 2593 | "p-try": { 2594 | "version": "2.2.0", 2595 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2596 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2597 | "dev": true 2598 | }, 2599 | "path-exists": { 2600 | "version": "3.0.0", 2601 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2602 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2603 | "dev": true 2604 | }, 2605 | "path-key": { 2606 | "version": "3.1.1", 2607 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2608 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2609 | "dev": true 2610 | }, 2611 | "path-parse": { 2612 | "version": "1.0.6", 2613 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2614 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2615 | "dev": true 2616 | }, 2617 | "pify": { 2618 | "version": "4.0.1", 2619 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 2620 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 2621 | "dev": true 2622 | }, 2623 | "pkg-dir": { 2624 | "version": "3.0.0", 2625 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", 2626 | "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", 2627 | "dev": true, 2628 | "requires": { 2629 | "find-up": "^3.0.0" 2630 | } 2631 | }, 2632 | "pump": { 2633 | "version": "3.0.0", 2634 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2635 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2636 | "dev": true, 2637 | "requires": { 2638 | "end-of-stream": "^1.1.0", 2639 | "once": "^1.3.1" 2640 | } 2641 | }, 2642 | "punycode": { 2643 | "version": "2.1.1", 2644 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2645 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2646 | "dev": true 2647 | }, 2648 | "randombytes": { 2649 | "version": "2.1.0", 2650 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2651 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2652 | "dev": true, 2653 | "requires": { 2654 | "safe-buffer": "^5.1.0" 2655 | } 2656 | }, 2657 | "rechoir": { 2658 | "version": "0.7.0", 2659 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", 2660 | "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", 2661 | "dev": true, 2662 | "requires": { 2663 | "resolve": "^1.9.0" 2664 | } 2665 | }, 2666 | "reduce-flatten": { 2667 | "version": "2.0.0", 2668 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", 2669 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", 2670 | "dev": true 2671 | }, 2672 | "regenerate": { 2673 | "version": "1.4.1", 2674 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", 2675 | "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", 2676 | "dev": true 2677 | }, 2678 | "regenerate-unicode-properties": { 2679 | "version": "8.2.0", 2680 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", 2681 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", 2682 | "dev": true, 2683 | "requires": { 2684 | "regenerate": "^1.4.0" 2685 | } 2686 | }, 2687 | "regenerator-runtime": { 2688 | "version": "0.13.7", 2689 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", 2690 | "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", 2691 | "dev": true 2692 | }, 2693 | "regenerator-transform": { 2694 | "version": "0.14.5", 2695 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", 2696 | "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", 2697 | "dev": true, 2698 | "requires": { 2699 | "@babel/runtime": "^7.8.4" 2700 | } 2701 | }, 2702 | "regexpu-core": { 2703 | "version": "4.7.1", 2704 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", 2705 | "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", 2706 | "dev": true, 2707 | "requires": { 2708 | "regenerate": "^1.4.0", 2709 | "regenerate-unicode-properties": "^8.2.0", 2710 | "regjsgen": "^0.5.1", 2711 | "regjsparser": "^0.6.4", 2712 | "unicode-match-property-ecmascript": "^1.0.4", 2713 | "unicode-match-property-value-ecmascript": "^1.2.0" 2714 | } 2715 | }, 2716 | "regjsgen": { 2717 | "version": "0.5.2", 2718 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", 2719 | "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", 2720 | "dev": true 2721 | }, 2722 | "regjsparser": { 2723 | "version": "0.6.4", 2724 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", 2725 | "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", 2726 | "dev": true, 2727 | "requires": { 2728 | "jsesc": "~0.5.0" 2729 | }, 2730 | "dependencies": { 2731 | "jsesc": { 2732 | "version": "0.5.0", 2733 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2734 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2735 | "dev": true 2736 | } 2737 | } 2738 | }, 2739 | "resolve": { 2740 | "version": "1.18.1", 2741 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", 2742 | "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", 2743 | "dev": true, 2744 | "requires": { 2745 | "is-core-module": "^2.0.0", 2746 | "path-parse": "^1.0.6" 2747 | } 2748 | }, 2749 | "resolve-cwd": { 2750 | "version": "3.0.0", 2751 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2752 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2753 | "dev": true, 2754 | "requires": { 2755 | "resolve-from": "^5.0.0" 2756 | } 2757 | }, 2758 | "resolve-from": { 2759 | "version": "5.0.0", 2760 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2761 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2762 | "dev": true 2763 | }, 2764 | "safe-buffer": { 2765 | "version": "5.1.2", 2766 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2767 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2768 | "dev": true 2769 | }, 2770 | "schema-utils": { 2771 | "version": "2.7.1", 2772 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", 2773 | "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", 2774 | "dev": true, 2775 | "requires": { 2776 | "@types/json-schema": "^7.0.5", 2777 | "ajv": "^6.12.4", 2778 | "ajv-keywords": "^3.5.2" 2779 | } 2780 | }, 2781 | "semver": { 2782 | "version": "5.7.1", 2783 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2784 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2785 | "dev": true 2786 | }, 2787 | "serialize-javascript": { 2788 | "version": "5.0.1", 2789 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", 2790 | "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", 2791 | "dev": true, 2792 | "requires": { 2793 | "randombytes": "^2.1.0" 2794 | } 2795 | }, 2796 | "shebang-command": { 2797 | "version": "2.0.0", 2798 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2799 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2800 | "dev": true, 2801 | "requires": { 2802 | "shebang-regex": "^3.0.0" 2803 | } 2804 | }, 2805 | "shebang-regex": { 2806 | "version": "3.0.0", 2807 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2808 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2809 | "dev": true 2810 | }, 2811 | "signal-exit": { 2812 | "version": "3.0.3", 2813 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2814 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2815 | "dev": true 2816 | }, 2817 | "source-list-map": { 2818 | "version": "2.0.1", 2819 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", 2820 | "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", 2821 | "dev": true 2822 | }, 2823 | "source-map": { 2824 | "version": "0.5.7", 2825 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2826 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2827 | "dev": true 2828 | }, 2829 | "source-map-support": { 2830 | "version": "0.5.19", 2831 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 2832 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 2833 | "dev": true, 2834 | "requires": { 2835 | "buffer-from": "^1.0.0", 2836 | "source-map": "^0.6.0" 2837 | }, 2838 | "dependencies": { 2839 | "source-map": { 2840 | "version": "0.6.1", 2841 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2842 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2843 | "dev": true 2844 | } 2845 | } 2846 | }, 2847 | "string.prototype.trimend": { 2848 | "version": "1.0.2", 2849 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", 2850 | "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", 2851 | "dev": true, 2852 | "requires": { 2853 | "define-properties": "^1.1.3", 2854 | "es-abstract": "^1.18.0-next.1" 2855 | } 2856 | }, 2857 | "string.prototype.trimstart": { 2858 | "version": "1.0.2", 2859 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", 2860 | "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", 2861 | "dev": true, 2862 | "requires": { 2863 | "define-properties": "^1.1.3", 2864 | "es-abstract": "^1.18.0-next.1" 2865 | } 2866 | }, 2867 | "strip-final-newline": { 2868 | "version": "2.0.0", 2869 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2870 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2871 | "dev": true 2872 | }, 2873 | "supports-color": { 2874 | "version": "5.5.0", 2875 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2876 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2877 | "dev": true, 2878 | "requires": { 2879 | "has-flag": "^3.0.0" 2880 | } 2881 | }, 2882 | "table-layout": { 2883 | "version": "1.0.1", 2884 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", 2885 | "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", 2886 | "dev": true, 2887 | "requires": { 2888 | "array-back": "^4.0.1", 2889 | "deep-extend": "~0.6.0", 2890 | "typical": "^5.2.0", 2891 | "wordwrapjs": "^4.0.0" 2892 | } 2893 | }, 2894 | "tapable": { 2895 | "version": "2.0.0", 2896 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.0.0.tgz", 2897 | "integrity": "sha512-bjzn0C0RWoffnNdTzNi7rNDhs1Zlwk2tRXgk8EiHKAOX1Mag3d6T0Y5zNa7l9CJ+EoUne/0UHdwS8tMbkh9zDg==", 2898 | "dev": true 2899 | }, 2900 | "terser": { 2901 | "version": "5.3.8", 2902 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz", 2903 | "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==", 2904 | "dev": true, 2905 | "requires": { 2906 | "commander": "^2.20.0", 2907 | "source-map": "~0.7.2", 2908 | "source-map-support": "~0.5.19" 2909 | }, 2910 | "dependencies": { 2911 | "source-map": { 2912 | "version": "0.7.3", 2913 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 2914 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 2915 | "dev": true 2916 | } 2917 | } 2918 | }, 2919 | "terser-webpack-plugin": { 2920 | "version": "5.0.1", 2921 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.1.tgz", 2922 | "integrity": "sha512-EwUe+XDTFf/2cAlmAlZZ7vRpNKMZUAypX2kIRm0Fmjlz4l7SqbI/VabmgiesNZW2nq/LR0N7ku/wlTQ6ygen0w==", 2923 | "dev": true, 2924 | "requires": { 2925 | "jest-worker": "^26.6.1", 2926 | "p-limit": "^3.0.2", 2927 | "schema-utils": "^3.0.0", 2928 | "serialize-javascript": "^5.0.1", 2929 | "source-map": "^0.6.1", 2930 | "terser": "^5.3.8" 2931 | }, 2932 | "dependencies": { 2933 | "p-limit": { 2934 | "version": "3.0.2", 2935 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", 2936 | "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", 2937 | "dev": true, 2938 | "requires": { 2939 | "p-try": "^2.0.0" 2940 | } 2941 | }, 2942 | "schema-utils": { 2943 | "version": "3.0.0", 2944 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", 2945 | "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", 2946 | "dev": true, 2947 | "requires": { 2948 | "@types/json-schema": "^7.0.6", 2949 | "ajv": "^6.12.5", 2950 | "ajv-keywords": "^3.5.2" 2951 | } 2952 | }, 2953 | "source-map": { 2954 | "version": "0.6.1", 2955 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2956 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2957 | "dev": true 2958 | } 2959 | } 2960 | }, 2961 | "to-fast-properties": { 2962 | "version": "2.0.0", 2963 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2964 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2965 | "dev": true 2966 | }, 2967 | "tslib": { 2968 | "version": "1.14.1", 2969 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 2970 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 2971 | "dev": true 2972 | }, 2973 | "type-fest": { 2974 | "version": "0.11.0", 2975 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 2976 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 2977 | "dev": true 2978 | }, 2979 | "typical": { 2980 | "version": "5.2.0", 2981 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 2982 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 2983 | "dev": true 2984 | }, 2985 | "unicode-canonical-property-names-ecmascript": { 2986 | "version": "1.0.4", 2987 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 2988 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 2989 | "dev": true 2990 | }, 2991 | "unicode-match-property-ecmascript": { 2992 | "version": "1.0.4", 2993 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 2994 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 2995 | "dev": true, 2996 | "requires": { 2997 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 2998 | "unicode-property-aliases-ecmascript": "^1.0.4" 2999 | } 3000 | }, 3001 | "unicode-match-property-value-ecmascript": { 3002 | "version": "1.2.0", 3003 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", 3004 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", 3005 | "dev": true 3006 | }, 3007 | "unicode-property-aliases-ecmascript": { 3008 | "version": "1.1.0", 3009 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", 3010 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", 3011 | "dev": true 3012 | }, 3013 | "universalify": { 3014 | "version": "1.0.0", 3015 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", 3016 | "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" 3017 | }, 3018 | "uri-js": { 3019 | "version": "4.4.0", 3020 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", 3021 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", 3022 | "dev": true, 3023 | "requires": { 3024 | "punycode": "^2.1.0" 3025 | } 3026 | }, 3027 | "v8-compile-cache": { 3028 | "version": "2.1.1", 3029 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 3030 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", 3031 | "dev": true 3032 | }, 3033 | "watchpack": { 3034 | "version": "2.0.0", 3035 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.0.tgz", 3036 | "integrity": "sha512-xSdCxxYZWNk3VK13bZRYhsQpfa8Vg63zXG+3pyU8ouqSLRCv4IGXIp9Kr226q6GBkGRlZrST2wwKtjfKz2m7Cg==", 3037 | "dev": true, 3038 | "requires": { 3039 | "glob-to-regexp": "^0.4.1", 3040 | "graceful-fs": "^4.1.2" 3041 | } 3042 | }, 3043 | "webpack": { 3044 | "version": "5.2.0", 3045 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.2.0.tgz", 3046 | "integrity": "sha512-evtOjOJQq3zaHJIWsJjM4TGtNHtSrNVAIyQ+tdPW/fRd+4PLGbUG6S3xt+N4+QwDBOaCVd0xCWiHd4R6lWO5DQ==", 3047 | "dev": true, 3048 | "requires": { 3049 | "@types/eslint-scope": "^3.7.0", 3050 | "@types/estree": "^0.0.45", 3051 | "@webassemblyjs/ast": "1.9.0", 3052 | "@webassemblyjs/helper-module-context": "1.9.0", 3053 | "@webassemblyjs/wasm-edit": "1.9.0", 3054 | "@webassemblyjs/wasm-parser": "1.9.0", 3055 | "acorn": "^8.0.4", 3056 | "browserslist": "^4.14.5", 3057 | "chrome-trace-event": "^1.0.2", 3058 | "enhanced-resolve": "^5.3.0", 3059 | "eslint-scope": "^5.1.1", 3060 | "events": "^3.2.0", 3061 | "glob-to-regexp": "^0.4.1", 3062 | "graceful-fs": "^4.2.4", 3063 | "json-parse-better-errors": "^1.0.2", 3064 | "loader-runner": "^4.1.0", 3065 | "mime-types": "^2.1.27", 3066 | "neo-async": "^2.6.2", 3067 | "pkg-dir": "^4.2.0", 3068 | "schema-utils": "^3.0.0", 3069 | "tapable": "^2.0.0", 3070 | "terser-webpack-plugin": "^5.0.0", 3071 | "watchpack": "^2.0.0", 3072 | "webpack-sources": "^2.0.1" 3073 | }, 3074 | "dependencies": { 3075 | "find-up": { 3076 | "version": "4.1.0", 3077 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 3078 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 3079 | "dev": true, 3080 | "requires": { 3081 | "locate-path": "^5.0.0", 3082 | "path-exists": "^4.0.0" 3083 | } 3084 | }, 3085 | "locate-path": { 3086 | "version": "5.0.0", 3087 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 3088 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 3089 | "dev": true, 3090 | "requires": { 3091 | "p-locate": "^4.1.0" 3092 | } 3093 | }, 3094 | "p-locate": { 3095 | "version": "4.1.0", 3096 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 3097 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 3098 | "dev": true, 3099 | "requires": { 3100 | "p-limit": "^2.2.0" 3101 | } 3102 | }, 3103 | "path-exists": { 3104 | "version": "4.0.0", 3105 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3106 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3107 | "dev": true 3108 | }, 3109 | "pkg-dir": { 3110 | "version": "4.2.0", 3111 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 3112 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 3113 | "dev": true, 3114 | "requires": { 3115 | "find-up": "^4.0.0" 3116 | } 3117 | }, 3118 | "schema-utils": { 3119 | "version": "3.0.0", 3120 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", 3121 | "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", 3122 | "dev": true, 3123 | "requires": { 3124 | "@types/json-schema": "^7.0.6", 3125 | "ajv": "^6.12.5", 3126 | "ajv-keywords": "^3.5.2" 3127 | } 3128 | } 3129 | } 3130 | }, 3131 | "webpack-cli": { 3132 | "version": "4.1.0", 3133 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.1.0.tgz", 3134 | "integrity": "sha512-NdhxXMZmoik62Y05t0h1y65LjBM7BwFPq311ihXuMM3RY6dlc4KkCTyHLzTuBEc+bqq6d3xh+CWmU0xRexNJBA==", 3135 | "dev": true, 3136 | "requires": { 3137 | "@webpack-cli/info": "^1.0.2", 3138 | "@webpack-cli/serve": "^1.0.1", 3139 | "ansi-escapes": "^4.3.1", 3140 | "colorette": "^1.2.1", 3141 | "command-line-usage": "^6.1.0", 3142 | "commander": "^6.0.0", 3143 | "enquirer": "^2.3.4", 3144 | "execa": "^4.0.0", 3145 | "import-local": "^3.0.2", 3146 | "interpret": "^2.0.0", 3147 | "rechoir": "^0.7.0", 3148 | "v8-compile-cache": "^2.1.0", 3149 | "webpack-merge": "^4.2.2" 3150 | }, 3151 | "dependencies": { 3152 | "commander": { 3153 | "version": "6.1.0", 3154 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", 3155 | "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", 3156 | "dev": true 3157 | } 3158 | } 3159 | }, 3160 | "webpack-merge": { 3161 | "version": "4.2.2", 3162 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", 3163 | "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", 3164 | "dev": true, 3165 | "requires": { 3166 | "lodash": "^4.17.15" 3167 | } 3168 | }, 3169 | "webpack-node-externals": { 3170 | "version": "2.5.2", 3171 | "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz", 3172 | "integrity": "sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w==", 3173 | "dev": true 3174 | }, 3175 | "webpack-sources": { 3176 | "version": "2.0.1", 3177 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", 3178 | "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", 3179 | "dev": true, 3180 | "requires": { 3181 | "source-list-map": "^2.0.1", 3182 | "source-map": "^0.6.1" 3183 | }, 3184 | "dependencies": { 3185 | "source-map": { 3186 | "version": "0.6.1", 3187 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3188 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3189 | "dev": true 3190 | } 3191 | } 3192 | }, 3193 | "which": { 3194 | "version": "2.0.2", 3195 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3196 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3197 | "dev": true, 3198 | "requires": { 3199 | "isexe": "^2.0.0" 3200 | } 3201 | }, 3202 | "wordwrapjs": { 3203 | "version": "4.0.0", 3204 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", 3205 | "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", 3206 | "dev": true, 3207 | "requires": { 3208 | "reduce-flatten": "^2.0.0", 3209 | "typical": "^5.0.0" 3210 | } 3211 | }, 3212 | "wrappy": { 3213 | "version": "1.0.2", 3214 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3215 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3216 | "dev": true 3217 | } 3218 | } 3219 | } 3220 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cdk-deployer", 3 | "version": "1.0.0", 4 | "author": "vgulkevic", 5 | "scripts": { 6 | "build": "webpack", 7 | "setup": "npm install" 8 | }, 9 | "keywords": [], 10 | "repository": { 11 | "type": "git", 12 | "url": "https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/management" 13 | }, 14 | "license": "ISC", 15 | "dependencies": { 16 | "fs-extra": "^9.0.1", 17 | "@aws-cdk/core": "^1.18.0", 18 | "@aws-cdk/aws-s3": "1.67.0", 19 | "@aws-cdk/aws-iam": "1.67.0" 20 | }, 21 | "devDependencies": { 22 | "@babel/core": "^7.11.6", 23 | "@babel/preset-env": "^7.11.5", 24 | "babel-loader": "^8.1.0", 25 | "webpack": "^5.0.0", 26 | "webpack-cli": "^4.0.0", 27 | "webpack-node-externals": "^2.5.2" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/utils/empty-bucket.js: -------------------------------------------------------------------------------- 1 | const AWS = require('aws-sdk'); 2 | const s3 = new AWS.S3() 3 | 4 | export const emptyBucket = async bucketName => { 5 | // delete bucket contents 6 | const listedObjects = await s3 7 | .listObjectVersions({ Bucket: bucketName }) 8 | .promise() 9 | 10 | // nothing left - we're done! 11 | const contents = (listedObjects.Versions || []).concat( 12 | listedObjects.DeleteMarkers || [] 13 | ) 14 | if (contents.length === 0) return 15 | 16 | let records = [] 17 | 18 | // make a list of objects to delete 19 | for (let record of contents) { 20 | records.push({ Key: record.Key, VersionId: record.VersionId }) 21 | } 22 | 23 | await s3 24 | .deleteObjects({ Bucket: bucketName, Delete: { Objects: records } }) 25 | .promise() 26 | 27 | // repeat as necessary 28 | if (listedObjects.IsTruncated) await emptyBucket(bucketName) 29 | } 30 | -------------------------------------------------------------------------------- /cdk-deployer/lambda/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | 4 | module.exports = { 5 | context: __dirname, 6 | entry: { 7 | index: './index.js', 8 | cdkStack: './cdkStack.js' 9 | }, 10 | output: { 11 | path: path.join(__dirname, "/out"), 12 | filename: '[name]bundle.js', 13 | libraryTarget: 'commonjs2' 14 | }, 15 | module: { 16 | rules: [ 17 | { 18 | test: /\.js$/, 19 | exclude: /(node_modules|bower_components)/, 20 | use: { 21 | loader: 'babel-loader', 22 | options: { 23 | babelrc: true 24 | } 25 | } 26 | } 27 | ], 28 | }, 29 | optimization:{ 30 | minimize: false, 31 | }, 32 | target: 'node', 33 | externals: [ "custom_common_lib", "aws-sdk"] 34 | }; -------------------------------------------------------------------------------- /cdk-deployer/terraform/prod/main.tf: -------------------------------------------------------------------------------- 1 | provider "aws" { 2 | region = "eu-west-1" 3 | } 4 | 5 | locals { 6 | service_prefix = "cdk-deployer" 7 | } 8 | 9 | terraform { 10 | backend "s3" { 11 | region = "eu-west-1" 12 | bucket = "" 13 | key = "prod/terraform.tfstate" 14 | dynamodb_table = "cdk-deployer-terraform-locks-prod" 15 | encrypt = true 16 | } 17 | } 18 | 19 | module "main" { 20 | source = "../resources" 21 | env = "prod" 22 | aws_region = "eu-west-1" 23 | } 24 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/remote-state/main.tf: -------------------------------------------------------------------------------- 1 | provider "aws" { 2 | region = "eu-west-1" 3 | } 4 | 5 | locals { 6 | service_prefix = "cdk-deployer" 7 | } 8 | 9 | resource "aws_s3_bucket" "remote_state_prod" { 10 | bucket_prefix = "${local.service_prefix}-tfstate-prod" 11 | versioning { 12 | enabled = true 13 | } 14 | server_side_encryption_configuration { 15 | rule { 16 | apply_server_side_encryption_by_default { 17 | sse_algorithm = "AES256" 18 | } 19 | } 20 | } 21 | } 22 | 23 | resource "aws_dynamodb_table" "terraform_locks_prod" { 24 | name = "${local.service_prefix}-terraform-locks-prod" 25 | billing_mode = "PAY_PER_REQUEST" 26 | hash_key = "LockID" 27 | attribute { 28 | name = "LockID" 29 | type = "S" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/main.tf: -------------------------------------------------------------------------------- 1 | locals { 2 | service_prefix = "cdk-deployer" 3 | lambda_layers = [aws_lambda_layer_version.lambda_cdk_layer.arn] 4 | } 5 | 6 | resource "aws_lambda_layer_version" "lambda_cdk_layer" { 7 | layer_name = "${local.service_prefix}-cdk-${var.env}" 8 | filename = "../../../cdk-lambda-layer/layer.zip" 9 | source_code_hash = filebase64sha256("../../../cdk-lambda-layer/layer.zip") 10 | compatible_runtimes = ["nodejs12.x"] 11 | } 12 | 13 | module "lambda" { 14 | source = "./modules/lambda" 15 | service_prefix = local.service_prefix 16 | env = var.env 17 | layers = local.lambda_layers 18 | service_lambda_execution_role = module.service_lambda_execution_role.role_arn 19 | 20 | env_vars = { 21 | MY_ENV = "ENV_TO_PASS_TO_LAMBDA" 22 | } 23 | } 24 | 25 | // NOTE: amend the role permissions to meet your needs 26 | resource "aws_iam_policy" "allow_deploy_destroy" { 27 | name_prefix = "${local.service_prefix}-${var.env}" 28 | policy = templatefile("../resources/res/deployer_lambda_policy.tpl", {}) 29 | } 30 | 31 | module "service_lambda_execution_role" { 32 | source = "../../../terraform-utils/modules/service_prefixed_lambda_role" 33 | additional_policies = [aws_iam_policy.allow_deploy_destroy.arn] 34 | name_prefix = "${local.service_prefix}-${var.env}" 35 | 36 | allowed_service_prefixes = [ 37 | local.service_prefix 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/modules/lambda/.terraform/modules/modules.json: -------------------------------------------------------------------------------- 1 | {"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"cdk_deploy_lambda","Source":"vladcar/serverless-common-basic-lambda/aws","Version":"1.2.2","Dir":".terraform/modules/cdk_deploy_lambda"}]} -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/modules/lambda/main.tf: -------------------------------------------------------------------------------- 1 | module "cdk_deploy_lambda" { 2 | source = "vladcar/serverless-common-basic-lambda/aws" 3 | version = "1.2.2" 4 | source_path = "../../lambda/function.zip" 5 | function_name = "${var.service_prefix}-deploy-${var.env}" 6 | handler = "indexbundle.deploy" 7 | memory_size = 128 8 | runtime = "nodejs12.x" 9 | execution_role = var.service_lambda_execution_role 10 | env_vars = var.env_vars 11 | layers = var.layers 12 | create_role = false 13 | // amend the timeout to meet your needs 14 | timeout = 120 15 | } 16 | 17 | module "cdk_destroy_lambda" { 18 | source = "vladcar/serverless-common-basic-lambda/aws" 19 | version = "1.2.2" 20 | source_path = "../../lambda/function.zip" 21 | function_name = "${var.service_prefix}-destroy-${var.env}" 22 | handler = "indexbundle.destroy" 23 | memory_size = 128 24 | runtime = "nodejs12.x" 25 | execution_role = var.service_lambda_execution_role 26 | env_vars = var.env_vars 27 | layers = var.layers 28 | create_role = false 29 | // amend the timeout to meet your needs 30 | timeout = 120 31 | } 32 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/modules/lambda/outputs.tf: -------------------------------------------------------------------------------- 1 | output "deploy_online_auction_lambda_arn" { 2 | value = module.cdk_deploy_lambda.lambda_invoke_arn 3 | } 4 | 5 | output "destroy_online_auction_lambda_arn" { 6 | value = module.cdk_destroy_lambda.lambda_invoke_arn 7 | } 8 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/modules/lambda/variables.tf: -------------------------------------------------------------------------------- 1 | variable "env" { 2 | description = "Deployment environment" 3 | } 4 | 5 | variable "service_prefix" { 6 | type = string 7 | } 8 | 9 | variable "service_lambda_execution_role" { 10 | type = string 11 | } 12 | 13 | variable "env_vars" { 14 | description = "A map that defines environment variables for the Lambda Functions" 15 | type = map(string) 16 | default = {} 17 | } 18 | 19 | variable "layers" { 20 | type = list(string) 21 | description = "Lambda layer ARNs" 22 | } 23 | -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/res/deployer_lambda_policy.tpl: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Effect": "Allow", 6 | "Action": "*", 7 | "Resource": "*" 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /cdk-deployer/terraform/resources/variables.tf: -------------------------------------------------------------------------------- 1 | variable "env" { 2 | default = "dev" 3 | } 4 | 5 | variable "aws_region" { 6 | } 7 | -------------------------------------------------------------------------------- /cdk-lambda-layer/build.gradle: -------------------------------------------------------------------------------- 1 | task packageLayer(type: Exec) { 2 | doFirst { 3 | println "packaging $project.name.." 4 | } 5 | commandLine "bash", "./pack.sh" 6 | } 7 | 8 | -------------------------------------------------------------------------------- /cdk-lambda-layer/layer.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vgulkevic/cdk_layer_in_lambda/bd2e0a8cb6ba8390e5439ba8da981c454922afde/cdk-lambda-layer/layer.zip -------------------------------------------------------------------------------- /cdk-lambda-layer/pack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # lambda layer should be in a /nodejs/node_modules folder 4 | rm -r ./nodejs 5 | npm install 6 | mkdir -p ./nodejs/node_modules 7 | # remove aws-sdk as it's size is 50mb and it is available in Lambda anyway 8 | rm -r ./node_modules/aws-cdk/node_modules/aws-sdk 9 | cp -r ./node_modules/aws-cdk ./nodejs/node_modules 10 | # zip lambda layer 11 | zip -9 -FS -r layer.zip ./nodejs 12 | 13 | # note that the maximum size of the a lambda and all its layers is 250mb 14 | -------------------------------------------------------------------------------- /cdk-lambda-layer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cdk-lambda-layer", 3 | "version": "1.0.0", 4 | "description": "Shared code", 5 | "private": true, 6 | "author": "vgulkevic", 7 | "dependencies": { 8 | "aws-cdk": "1.67.0" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.console=rich 2 | org.gradle.parallel=true 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vgulkevic/cdk_layer_in_lambda/bd2e0a8cb6ba8390e5439ba8da981c454922afde/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto init 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto init 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :init 68 | @rem Get command-line arguments, handling Windows variants 69 | 70 | if not "%OS%" == "Windows_NT" goto win9xME_args 71 | 72 | :win9xME_args 73 | @rem Slurp the command line arguments. 74 | set CMD_LINE_ARGS= 75 | set _SKIP=2 76 | 77 | :win9xME_args_slurp 78 | if "x%~1" == "x" goto execute 79 | 80 | set CMD_LINE_ARGS=%* 81 | 82 | :execute 83 | @rem Setup the command line 84 | 85 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 86 | 87 | 88 | @rem Execute Gradle 89 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 90 | 91 | :end 92 | @rem End local scope for the variables with windows NT shell 93 | if "%ERRORLEVEL%"=="0" goto mainEnd 94 | 95 | :fail 96 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 97 | rem the _cmd.exe /c_ return code! 98 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 99 | exit /b 1 100 | 101 | :mainEnd 102 | if "%OS%"=="Windows_NT" endlocal 103 | 104 | :omega 105 | -------------------------------------------------------------------------------- /intellij-java-google-style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 21 | 28 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'cdk_layer_in_lambda' 2 | 3 | include "cdk-lambda-layer" 4 | include "cdk-deployer" 5 | include "cdk-deployer:lambda" 6 | -------------------------------------------------------------------------------- /terraform-utils/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | while getopts "e:": option; do 4 | case "${option}" in 5 | e) ENV=${OPTARG} ;; 6 | *) 7 | echo "usage: $0 [-v] [-r]" >&2 8 | exit 1 9 | ;; 10 | esac 11 | done 12 | 13 | cd ./terraform/"$ENV" || exit 14 | terraform init 15 | terraform apply -auto-approve 16 | -------------------------------------------------------------------------------- /terraform-utils/modules/service_prefixed_lambda_role/lambda-assume-role-policy.tpl: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Action": "sts:AssumeRole", 6 | "Principal": { 7 | "Service": "lambda.amazonaws.com" 8 | }, 9 | "Effect": "Allow", 10 | "Sid": "" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /terraform-utils/modules/service_prefixed_lambda_role/main.tf: -------------------------------------------------------------------------------- 1 | 2 | resource "aws_iam_role" "execution_role" { 3 | name = "${var.name_prefix}-LambdaExecRole" 4 | assume_role_policy = templatefile("${path.module}/lambda-assume-role-policy.tpl", {}) 5 | } 6 | 7 | #################### IAM POLICY ################## 8 | resource "aws_iam_policy" "prefix_base_policy" { 9 | for_each = toset(var.allowed_service_prefixes) 10 | 11 | name_prefix = var.name_prefix 12 | policy = data.aws_iam_policy_document.prefixed_policy_document[each.key].json 13 | } 14 | 15 | resource "aws_iam_policy" "cloudwatch_policy" { 16 | name_prefix = var.name_prefix 17 | policy = data.aws_iam_policy_document.cloudwatch_logs_policy_document.json 18 | } 19 | 20 | resource "aws_iam_policy" "ses_policy" { 21 | name_prefix = var.name_prefix 22 | policy = data.aws_iam_policy_document.ses_policy_document.json 23 | } 24 | 25 | #################### IAM POLICY ATTACHMENT ################## 26 | resource "aws_iam_role_policy_attachment" "policy_attachment" { 27 | for_each = toset(var.allowed_service_prefixes) 28 | 29 | policy_arn = aws_iam_policy.prefix_base_policy[each.key].arn 30 | role = aws_iam_role.execution_role.name 31 | } 32 | 33 | resource "aws_iam_role_policy_attachment" "cloudwatch_policy_attachment" { 34 | policy_arn = aws_iam_policy.cloudwatch_policy.arn 35 | role = aws_iam_role.execution_role.name 36 | } 37 | 38 | resource "aws_iam_role_policy_attachment" "ses_policy_attachment" { 39 | policy_arn = aws_iam_policy.ses_policy.arn 40 | role = aws_iam_role.execution_role.name 41 | } 42 | 43 | resource "aws_iam_role_policy_attachment" "additional_policy_attachment" { 44 | count = length(var.additional_policies) 45 | 46 | policy_arn = var.additional_policies[count.index] 47 | role = aws_iam_role.execution_role.name 48 | } 49 | 50 | #################### IAM POLICY DOCUMENT ################## 51 | data "aws_iam_policy_document" "prefixed_policy_document" { 52 | for_each = toset(var.allowed_service_prefixes) 53 | version = "2012-10-17" 54 | 55 | statement { 56 | effect = "Allow" 57 | actions = [ 58 | "s3:*", 59 | "dynamodb:*", 60 | "states:*", 61 | "sns:*", 62 | "sqs:*" 63 | ] 64 | resources = [ 65 | "arn:aws:s3:::${each.value}*", 66 | "arn:aws:dynamodb:*:*:table/${each.value}*", 67 | "arn:aws:states:*:*:${each.value}*", 68 | "arn:aws:sns:*:*:${each.value}*", 69 | "arn:aws:sqs:*:*:${each.value}*" 70 | ] 71 | } 72 | } 73 | 74 | data "aws_iam_policy_document" "cloudwatch_logs_policy_document" { 75 | version = "2012-10-17" 76 | 77 | statement { 78 | effect = "Allow" 79 | actions = [ 80 | "logs:CreateLogGroup", 81 | "logs:CreateLogStream", 82 | "logs:PutLogEvents" 83 | ] 84 | resources = [ 85 | "*" 86 | ] 87 | } 88 | } 89 | 90 | data "aws_iam_policy_document" "ses_policy_document" { 91 | version = "2012-10-17" 92 | 93 | statement { 94 | effect = "Allow" 95 | actions = [ 96 | "ses:SendEmail", 97 | "ses:SendRawEmail" 98 | ] 99 | resources = [ 100 | "*" 101 | ] 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /terraform-utils/modules/service_prefixed_lambda_role/outputs.tf: -------------------------------------------------------------------------------- 1 | output "role_arn" { 2 | value = aws_iam_role.execution_role.arn 3 | } -------------------------------------------------------------------------------- /terraform-utils/modules/service_prefixed_lambda_role/variables.tf: -------------------------------------------------------------------------------- 1 | variable "name_prefix" { 2 | type = string 3 | } 4 | 5 | variable "allowed_service_prefixes" { 6 | type = list(string) 7 | } 8 | 9 | variable "additional_policies" { 10 | type = list(string) 11 | default = [] 12 | description = "A list of additional IAM policy ARNs. Will be attached to execution role" 13 | } --------------------------------------------------------------------------------