From 866ea5015d56e4eb36eaea479833cb16db395ff4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Feb 2022 11:33:28 +0900 Subject: [PATCH 1/7] chore(deps): update dependency ts-node to v10.5.0 (#131) Co-authored-by: Renovate Bot --- package.json | 2 +- pnpm-lock.yaml | 39 ++++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index a34a810d1..ddaf50555 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "aws-cdk": "2.8.0", "jest": "27.4.7", "ts-jest": "27.1.3", - "ts-node": "10.4.0", + "ts-node": "10.5.0", "typescript": "4.5.5" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e0d9b2dd..f74da0970 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ specifiers: pluralize: 8.0.0 source-map-support: 0.5.21 ts-jest: 27.1.3 - ts-node: 10.4.0 + ts-node: 10.5.0 typescript: 4.5.5 dependencies: @@ -89,9 +89,9 @@ devDependencies: '@types/jest': 27.4.0 '@types/node': 16.11.22 aws-cdk: 2.8.0 - jest: 27.4.7_ts-node@10.4.0 + jest: 27.4.7_ts-node@10.5.0 ts-jest: 27.1.3_a7e53b5e5b59e71a0fd4d8cf128393d5 - ts-node: 10.4.0_247b6ed5e900a7cb1f087e65be0c3da9 + ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 typescript: 4.5.5 packages: @@ -105,7 +105,7 @@ packages: jest: '>=26.6.3' dependencies: '@aws-cdk/cloudformation-diff': 2.8.0 - jest: 27.4.7_ts-node@10.4.0 + jest: 27.4.7_ts-node@10.5.0 dev: true /@aws-cdk/assets/1.134.0: @@ -1502,7 +1502,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core/27.4.7_ts-node@10.4.0: + /@jest/core/27.4.7_ts-node@10.5.0: resolution: {integrity: sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -1523,7 +1523,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.8 jest-changed-files: 27.4.2 - jest-config: 27.4.7_ts-node@10.4.0 + jest-config: 27.4.7_ts-node@10.5.0 jest-haste-map: 27.4.6 jest-message-util: 27.4.6 jest-regex-util: 27.4.0 @@ -3108,7 +3108,7 @@ packages: - supports-color dev: true - /jest-cli/27.4.7_ts-node@10.4.0: + /jest-cli/27.4.7_ts-node@10.5.0: resolution: {integrity: sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -3118,14 +3118,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.4.7_ts-node@10.4.0 + '@jest/core': 27.4.7_ts-node@10.5.0 '@jest/test-result': 27.4.6 '@jest/types': 27.4.2 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.8 import-local: 3.0.2 - jest-config: 27.4.7_ts-node@10.4.0 + jest-config: 27.4.7_ts-node@10.5.0 jest-util: 27.4.2 jest-validate: 27.4.6 prompts: 2.4.1 @@ -3138,7 +3138,7 @@ packages: - utf-8-validate dev: true - /jest-config/27.4.7_ts-node@10.4.0: + /jest-config/27.4.7_ts-node@10.5.0: resolution: {integrity: sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: @@ -3169,7 +3169,7 @@ packages: micromatch: 4.0.4 pretty-format: 27.4.6 slash: 3.0.0 - ts-node: 10.4.0_247b6ed5e900a7cb1f087e65be0c3da9 + ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 transitivePeerDependencies: - bufferutil - canvas @@ -3527,7 +3527,7 @@ packages: supports-color: 8.1.1 dev: true - /jest/27.4.7_ts-node@10.4.0: + /jest/27.4.7_ts-node@10.5.0: resolution: {integrity: sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -3537,9 +3537,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.4.7_ts-node@10.4.0 + '@jest/core': 27.4.7_ts-node@10.5.0 import-local: 3.0.2 - jest-cli: 27.4.7_ts-node@10.4.0 + jest-cli: 27.4.7_ts-node@10.5.0 transitivePeerDependencies: - bufferutil - canvas @@ -4496,7 +4496,7 @@ packages: '@types/jest': 27.4.0 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.4.7_ts-node@10.4.0 + jest: 27.4.7_ts-node@10.5.0 jest-util: 27.4.2 json5: 2.2.0 lodash.memoize: 4.1.2 @@ -4506,8 +4506,8 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.4.0_247b6ed5e900a7cb1f087e65be0c3da9: - resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} + /ts-node/10.5.0_247b6ed5e900a7cb1f087e65be0c3da9: + resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -4533,6 +4533,7 @@ packages: diff: 4.0.2 make-error: 1.3.6 typescript: 4.5.5 + v8-compile-cache-lib: 3.0.0 yn: 3.1.1 dev: true @@ -4619,6 +4620,10 @@ packages: hasBin: true dev: true + /v8-compile-cache-lib/3.0.0: + resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} + dev: true + /v8-to-istanbul/8.1.0: resolution: {integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==} engines: {node: '>=10.12.0'} From cdf4ce3629ba03609e2f9d0e2007b1712a2cd4a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Feb 2022 11:37:56 +0900 Subject: [PATCH 2/7] chore(deps): update dependency jest to v27.5.1 (#130) Co-authored-by: Renovate Bot --- package.json | 2 +- pnpm-lock.yaml | 682 +++++++++++++++++++++++++++---------------------- 2 files changed, 373 insertions(+), 311 deletions(-) diff --git a/package.json b/package.json index ddaf50555..e06b03962 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/jest": "27.4.0", "@types/node": "16.11.22", "aws-cdk": "2.8.0", - "jest": "27.4.7", + "jest": "27.5.1", "ts-jest": "27.1.3", "ts-node": "10.5.0", "typescript": "4.5.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f74da0970..ead28df89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,7 +39,7 @@ specifiers: '@types/node': 16.11.22 aws-cdk: 2.8.0 flatted: 3.2.5 - jest: 27.4.7 + jest: 27.5.1 pluralize: 8.0.0 source-map-support: 0.5.21 ts-jest: 27.1.3 @@ -85,18 +85,18 @@ dependencies: source-map-support: 0.5.21 devDependencies: - '@aws-cdk/assert': 2.8.0_jest@27.4.7 + '@aws-cdk/assert': 2.8.0_jest@27.5.1 '@types/jest': 27.4.0 '@types/node': 16.11.22 aws-cdk: 2.8.0 - jest: 27.4.7_ts-node@10.5.0 - ts-jest: 27.1.3_a7e53b5e5b59e71a0fd4d8cf128393d5 + jest: 27.5.1_ts-node@10.5.0 + ts-jest: 27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 typescript: 4.5.5 packages: - /@aws-cdk/assert/2.8.0_jest@27.4.7: + /@aws-cdk/assert/2.8.0_jest@27.5.1: resolution: {integrity: sha512-NSSPMs2hXn42x7qWPhNCIg+CUAgqNZNuvU9v/EJo+xENADc+bm2X2y0RNJOjS5jcvMiy2AHtwT9Gj3uHd0S/IQ==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -105,7 +105,7 @@ packages: jest: '>=26.6.3' dependencies: '@aws-cdk/cloudformation-diff': 2.8.0 - jest: 27.4.7_ts-node@10.5.0 + jest: 27.5.1_ts-node@10.5.0 dev: true /@aws-cdk/assets/1.134.0: @@ -1490,20 +1490,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/27.4.6: - resolution: {integrity: sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==} + /@jest/console/27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 - jest-message-util: 27.4.6 - jest-util: 27.4.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 slash: 3.0.0 dev: true - /@jest/core/27.4.7_ts-node@10.5.0: - resolution: {integrity: sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==} + /@jest/core/27.5.1_ts-node@10.5.0: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1511,30 +1511,30 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 27.4.6 - '@jest/reporters': 27.4.6 - '@jest/test-result': 27.4.6 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 - graceful-fs: 4.2.8 - jest-changed-files: 27.4.2 - jest-config: 27.4.7_ts-node@10.5.0 - jest-haste-map: 27.4.6 - jest-message-util: 27.4.6 - jest-regex-util: 27.4.0 - jest-resolve: 27.4.6 - jest-resolve-dependencies: 27.4.6 - jest-runner: 27.4.6 - jest-runtime: 27.4.6 - jest-snapshot: 27.4.6 - jest-util: 27.4.2 - jest-validate: 27.4.6 - jest-watcher: 27.4.6 + graceful-fs: 4.2.9 + jest-changed-files: 27.5.1 + jest-config: 27.5.1_ts-node@10.5.0 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 micromatch: 4.0.4 rimraf: 3.0.2 slash: 3.0.0 @@ -1547,39 +1547,39 @@ packages: - utf-8-validate dev: true - /@jest/environment/27.4.6: - resolution: {integrity: sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==} + /@jest/environment/27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/fake-timers': 27.4.6 - '@jest/types': 27.4.2 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 - jest-mock: 27.4.6 + jest-mock: 27.5.1 dev: true - /@jest/fake-timers/27.4.6: - resolution: {integrity: sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==} + /@jest/fake-timers/27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.0.1 '@types/node': 16.11.22 - jest-message-util: 27.4.6 - jest-mock: 27.4.6 - jest-util: 27.4.2 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 dev: true - /@jest/globals/27.4.6: - resolution: {integrity: sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==} + /@jest/globals/27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/types': 27.4.2 - expect: 27.4.6 + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 dev: true - /@jest/reporters/27.4.6: - resolution: {integrity: sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==} + /@jest/reporters/27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1588,25 +1588,25 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.4.6 - '@jest/test-result': 27.4.6 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.0 - graceful-fs: 4.2.8 - istanbul-lib-coverage: 3.0.0 + graceful-fs: 4.2.9 + istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.1.0 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.0 istanbul-reports: 3.1.3 - jest-haste-map: 27.4.6 - jest-resolve: 27.4.6 - jest-util: 27.4.2 - jest-worker: 27.4.6 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 slash: 3.0.0 source-map: 0.6.1 string-length: 4.0.2 @@ -1616,51 +1616,51 @@ packages: - supports-color dev: true - /@jest/source-map/27.4.0: - resolution: {integrity: sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==} + /@jest/source-map/27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: callsites: 3.1.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 source-map: 0.6.1 dev: true - /@jest/test-result/27.4.6: - resolution: {integrity: sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==} + /@jest/test-result/27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/console': 27.4.6 - '@jest/types': 27.4.2 + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 '@types/istanbul-lib-coverage': 2.0.3 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/27.4.6: - resolution: {integrity: sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==} + /@jest/test-sequencer/27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/test-result': 27.4.6 - graceful-fs: 4.2.8 - jest-haste-map: 27.4.6 - jest-runtime: 27.4.6 + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.9 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 transitivePeerDependencies: - supports-color dev: true - /@jest/transform/27.4.6: - resolution: {integrity: sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==} + /@jest/transform/27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/core': 7.15.5 - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.8 - jest-haste-map: 27.4.6 - jest-regex-util: 27.4.0 - jest-util: 27.4.2 + graceful-fs: 4.2.9 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 micromatch: 4.0.4 pirates: 4.0.5 slash: 3.0.0 @@ -1681,6 +1681,17 @@ packages: chalk: 4.1.2 dev: true + /@jest/types/27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.1 + '@types/node': 16.11.22 + '@types/yargs': 16.0.4 + chalk: 4.1.2 + dev: true + /@jsii/check-node/1.52.1: resolution: {integrity: sha512-B+vpPwXrKTWA1dBHuStp0sg+YpFZ9APjS6qeDiknMHPMatlT7VA0RVk/LmCLaPZhsfNzByJ+zhRFs0R83zTr1Q==} engines: {node: '>= 10.3.0'} @@ -1901,7 +1912,7 @@ packages: engines: {node: '>= 6'} dependencies: glob: 7.2.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 lazystream: 1.0.0 lodash.defaults: 4.2.0 lodash.difference: 4.5.0 @@ -2010,20 +2021,20 @@ packages: xml2js: 0.4.19 dev: true - /babel-jest/27.4.6_@babel+core@7.15.5: - resolution: {integrity: sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==} + /babel-jest/27.5.1_@babel+core@7.15.5: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.15.5 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 '@types/babel__core': 7.1.16 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.4.0_@babel+core@7.15.5 + babel-preset-jest: 27.5.1_@babel+core@7.15.5 chalk: 4.1.2 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -2042,8 +2053,8 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/27.4.0: - resolution: {integrity: sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==} + /babel-plugin-jest-hoist/27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/template': 7.15.4 @@ -2072,14 +2083,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.15.5 dev: true - /babel-preset-jest/27.4.0_@babel+core@7.15.5: - resolution: {integrity: sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==} + /babel-preset-jest/27.5.1_@babel+core@7.15.5: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.15.5 - babel-plugin-jest-hoist: 27.4.0 + babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.15.5 dev: true @@ -2477,6 +2488,11 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true + /diff-sequences/27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -2526,6 +2542,12 @@ packages: once: 1.4.0 dev: true + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + /es5-ext/0.10.53: resolution: {integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==} dependencies: @@ -2657,14 +2679,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /expect/27.4.6: - resolution: {integrity: sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==} + /expect/27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 - jest-get-type: 27.4.0 - jest-matcher-utils: 27.4.6 - jest-message-util: 27.4.6 + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 dev: true /ext/1.6.0: @@ -2732,7 +2754,7 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -2742,7 +2764,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 jsonfile: 6.1.0 universalify: 2.0.0 @@ -2827,8 +2849,8 @@ packages: engines: {node: '>=4'} dev: true - /graceful-fs/4.2.8: - resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} + /graceful-fs/4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} /has-flag/3.0.0: resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} @@ -2948,6 +2970,10 @@ packages: resolution: {integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=} dev: true + /is-arrayish/0.2.1: + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + dev: true + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -3021,11 +3047,6 @@ packages: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true - /istanbul-lib-coverage/3.0.0: - resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} - engines: {node: '>=8'} - dev: true - /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} @@ -3048,7 +3069,7 @@ packages: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 dev: true @@ -3058,7 +3079,7 @@ packages: engines: {node: '>=8'} dependencies: debug: 4.3.2 - istanbul-lib-coverage: 3.0.0 + istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color @@ -3072,35 +3093,35 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/27.4.2: - resolution: {integrity: sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==} + /jest-changed-files/27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 execa: 5.1.1 throat: 6.0.1 dev: true - /jest-circus/27.4.6: - resolution: {integrity: sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==} + /jest-circus/27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/test-result': 27.4.6 - '@jest/types': 27.4.2 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 - expect: 27.4.6 + expect: 27.5.1 is-generator-fn: 2.1.0 - jest-each: 27.4.6 - jest-matcher-utils: 27.4.6 - jest-message-util: 27.4.6 - jest-runtime: 27.4.6 - jest-snapshot: 27.4.6 - jest-util: 27.4.2 - pretty-format: 27.4.6 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.3 throat: 6.0.1 @@ -3108,8 +3129,8 @@ packages: - supports-color dev: true - /jest-cli/27.4.7_ts-node@10.5.0: - resolution: {integrity: sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==} + /jest-cli/27.5.1_ts-node@10.5.0: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: @@ -3118,16 +3139,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.4.7_ts-node@10.5.0 - '@jest/test-result': 27.4.6 - '@jest/types': 27.4.2 + '@jest/core': 27.5.1_ts-node@10.5.0 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 import-local: 3.0.2 - jest-config: 27.4.7_ts-node@10.5.0 - jest-util: 27.4.2 - jest-validate: 27.4.6 + jest-config: 27.5.1_ts-node@10.5.0 + jest-util: 27.5.1 + jest-validate: 27.5.1 prompts: 2.4.1 yargs: 16.2.0 transitivePeerDependencies: @@ -3138,8 +3159,8 @@ packages: - utf-8-validate dev: true - /jest-config/27.4.7_ts-node@10.5.0: - resolution: {integrity: sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==} + /jest-config/27.5.1_ts-node@10.5.0: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: ts-node: '>=9.0.0' @@ -3148,27 +3169,29 @@ packages: optional: true dependencies: '@babel/core': 7.15.5 - '@jest/test-sequencer': 27.4.6 - '@jest/types': 27.4.2 - babel-jest: 27.4.6_@babel+core@7.15.5 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1_@babel+core@7.15.5 chalk: 4.1.2 ci-info: 3.2.0 deepmerge: 4.2.2 glob: 7.2.0 - graceful-fs: 4.2.8 - jest-circus: 27.4.6 - jest-environment-jsdom: 27.4.6 - jest-environment-node: 27.4.6 - jest-get-type: 27.4.0 - jest-jasmine2: 27.4.6 - jest-regex-util: 27.4.0 - jest-resolve: 27.4.6 - jest-runner: 27.4.6 - jest-util: 27.4.2 - jest-validate: 27.4.6 + graceful-fs: 4.2.9 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 micromatch: 4.0.4 - pretty-format: 27.4.6 + parse-json: 5.2.0 + pretty-format: 27.5.1 slash: 3.0.0 + strip-json-comments: 3.1.1 ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 transitivePeerDependencies: - bufferutil @@ -3187,44 +3210,44 @@ packages: pretty-format: 27.4.2 dev: true - /jest-diff/27.4.6: - resolution: {integrity: sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==} + /jest-diff/27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 - diff-sequences: 27.4.0 - jest-get-type: 27.4.0 - pretty-format: 27.4.6 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 dev: true - /jest-docblock/27.4.0: - resolution: {integrity: sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==} + /jest-docblock/27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/27.4.6: - resolution: {integrity: sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==} + /jest-each/27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 chalk: 4.1.2 - jest-get-type: 27.4.0 - jest-util: 27.4.2 - pretty-format: 27.4.6 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 dev: true - /jest-environment-jsdom/27.4.6: - resolution: {integrity: sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==} + /jest-environment-jsdom/27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/fake-timers': 27.4.6 - '@jest/types': 27.4.2 + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 - jest-mock: 27.4.6 - jest-util: 27.4.2 + jest-mock: 27.5.1 + jest-util: 27.5.1 jsdom: 16.7.0 transitivePeerDependencies: - bufferutil @@ -3233,16 +3256,16 @@ packages: - utf-8-validate dev: true - /jest-environment-node/27.4.6: - resolution: {integrity: sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==} + /jest-environment-node/27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/fake-timers': 27.4.6 - '@jest/types': 27.4.2 + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 - jest-mock: 27.4.6 - jest-util: 27.4.2 + jest-mock: 27.5.1 + jest-util: 27.5.1 dev: true /jest-get-type/27.4.0: @@ -3250,93 +3273,98 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true - /jest-haste-map/27.4.6: - resolution: {integrity: sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==} + /jest-get-type/27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-haste-map/27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 '@types/node': 16.11.22 anymatch: 3.1.2 fb-watchman: 2.0.1 - graceful-fs: 4.2.8 - jest-regex-util: 27.4.0 - jest-serializer: 27.4.0 - jest-util: 27.4.2 - jest-worker: 27.4.6 + graceful-fs: 4.2.9 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 micromatch: 4.0.4 walker: 1.0.7 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-jasmine2/27.4.6: - resolution: {integrity: sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==} + /jest-jasmine2/27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/source-map': 27.4.0 - '@jest/test-result': 27.4.6 - '@jest/types': 27.4.2 + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 co: 4.6.0 - expect: 27.4.6 + expect: 27.5.1 is-generator-fn: 2.1.0 - jest-each: 27.4.6 - jest-matcher-utils: 27.4.6 - jest-message-util: 27.4.6 - jest-runtime: 27.4.6 - jest-snapshot: 27.4.6 - jest-util: 27.4.2 - pretty-format: 27.4.6 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 throat: 6.0.1 transitivePeerDependencies: - supports-color dev: true - /jest-leak-detector/27.4.6: - resolution: {integrity: sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==} + /jest-leak-detector/27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - jest-get-type: 27.4.0 - pretty-format: 27.4.6 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 dev: true - /jest-matcher-utils/27.4.6: - resolution: {integrity: sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==} + /jest-matcher-utils/27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 - jest-diff: 27.4.6 - jest-get-type: 27.4.0 - pretty-format: 27.4.6 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 dev: true - /jest-message-util/27.4.6: - resolution: {integrity: sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==} + /jest-message-util/27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/code-frame': 7.14.5 - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 micromatch: 4.0.4 - pretty-format: 27.4.6 + pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.3 dev: true - /jest-mock/27.4.6: - resolution: {integrity: sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==} + /jest-mock/27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@types/node': 16.11.22 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@27.4.6: + /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -3345,65 +3373,64 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 27.4.6 + jest-resolve: 27.5.1 dev: true - /jest-regex-util/27.4.0: - resolution: {integrity: sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==} + /jest-regex-util/27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true - /jest-resolve-dependencies/27.4.6: - resolution: {integrity: sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==} + /jest-resolve-dependencies/27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 - jest-regex-util: 27.4.0 - jest-snapshot: 27.4.6 + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/27.4.6: - resolution: {integrity: sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==} + /jest-resolve/27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 chalk: 4.1.2 - graceful-fs: 4.2.8 - jest-haste-map: 27.4.6 - jest-pnp-resolver: 1.2.2_jest-resolve@27.4.6 - jest-util: 27.4.2 - jest-validate: 27.4.6 + graceful-fs: 4.2.9 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.2_jest-resolve@27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 resolve: 1.20.0 resolve.exports: 1.1.0 slash: 3.0.0 dev: true - /jest-runner/27.4.6: - resolution: {integrity: sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==} + /jest-runner/27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/console': 27.4.6 - '@jest/environment': 27.4.6 - '@jest/test-result': 27.4.6 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.8 - jest-docblock: 27.4.0 - jest-environment-jsdom: 27.4.6 - jest-environment-node: 27.4.6 - jest-haste-map: 27.4.6 - jest-leak-detector: 27.4.6 - jest-message-util: 27.4.6 - jest-resolve: 27.4.6 - jest-runtime: 27.4.6 - jest-util: 27.4.2 - jest-worker: 27.4.6 + graceful-fs: 4.2.9 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 source-map-support: 0.5.21 throat: 6.0.1 transitivePeerDependencies: @@ -3413,46 +3440,46 @@ packages: - utf-8-validate dev: true - /jest-runtime/27.4.6: - resolution: {integrity: sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==} + /jest-runtime/27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 27.4.6 - '@jest/fake-timers': 27.4.6 - '@jest/globals': 27.4.6 - '@jest/source-map': 27.4.0 - '@jest/test-result': 27.4.6 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 execa: 5.1.1 glob: 7.2.0 - graceful-fs: 4.2.8 - jest-haste-map: 27.4.6 - jest-message-util: 27.4.6 - jest-mock: 27.4.6 - jest-regex-util: 27.4.0 - jest-resolve: 27.4.6 - jest-snapshot: 27.4.6 - jest-util: 27.4.2 + graceful-fs: 4.2.9 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-serializer/27.4.0: - resolution: {integrity: sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==} + /jest-serializer/27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/node': 16.11.22 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 dev: true - /jest-snapshot/27.4.6: - resolution: {integrity: sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==} + /jest-snapshot/27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/core': 7.15.5 @@ -3460,22 +3487,22 @@ packages: '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.15.5 '@babel/traverse': 7.15.4 '@babel/types': 7.15.6 - '@jest/transform': 27.4.6 - '@jest/types': 27.4.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 '@types/babel__traverse': 7.14.2 '@types/prettier': 2.3.2 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.15.5 chalk: 4.1.2 - expect: 27.4.6 - graceful-fs: 4.2.8 - jest-diff: 27.4.6 - jest-get-type: 27.4.0 - jest-haste-map: 27.4.6 - jest-matcher-utils: 27.4.6 - jest-message-util: 27.4.6 - jest-util: 27.4.2 + expect: 27.5.1 + graceful-fs: 4.2.9 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 natural-compare: 1.4.0 - pretty-format: 27.4.6 + pretty-format: 27.5.1 semver: 7.3.5 transitivePeerDependencies: - supports-color @@ -3485,41 +3512,53 @@ packages: resolution: {integrity: sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 '@types/node': 16.11.22 chalk: 4.1.2 ci-info: 3.2.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 picomatch: 2.3.0 dev: true - /jest-validate/27.4.6: - resolution: {integrity: sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==} + /jest-util/27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.4.2 + '@jest/types': 27.5.1 + '@types/node': 16.11.22 + chalk: 4.1.2 + ci-info: 3.2.0 + graceful-fs: 4.2.9 + picomatch: 2.3.0 + dev: true + + /jest-validate/27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 27.4.0 + jest-get-type: 27.5.1 leven: 3.1.0 - pretty-format: 27.4.6 + pretty-format: 27.5.1 dev: true - /jest-watcher/27.4.6: - resolution: {integrity: sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==} + /jest-watcher/27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/test-result': 27.4.6 - '@jest/types': 27.4.2 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 '@types/node': 16.11.22 ansi-escapes: 4.3.2 chalk: 4.1.2 - jest-util: 27.4.2 + jest-util: 27.5.1 string-length: 4.0.2 dev: true - /jest-worker/27.4.6: - resolution: {integrity: sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==} + /jest-worker/27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: '@types/node': 16.11.22 @@ -3527,8 +3566,8 @@ packages: supports-color: 8.1.1 dev: true - /jest/27.4.7_ts-node@10.5.0: - resolution: {integrity: sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==} + /jest/27.5.1_ts-node@10.5.0: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: @@ -3537,9 +3576,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.4.7_ts-node@10.5.0 + '@jest/core': 27.5.1_ts-node@10.5.0 import-local: 3.0.2 - jest-cli: 27.4.7_ts-node@10.5.0 + jest-cli: 27.5.1_ts-node@10.5.0 transitivePeerDependencies: - bufferutil - canvas @@ -3622,6 +3661,10 @@ packages: dreamopt: 0.8.0 dev: true + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true @@ -3637,7 +3680,7 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} optionalDependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 dev: true /jsonfile/6.1.0: @@ -3645,7 +3688,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.9 /jsonschema/1.4.0: resolution: {integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==} @@ -3675,6 +3718,10 @@ packages: type-check: 0.3.2 dev: true + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3933,6 +3980,16 @@ packages: netmask: 2.0.2 dev: true + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.14.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true @@ -3993,8 +4050,8 @@ packages: react-is: 17.0.2 dev: true - /pretty-format/27.4.6: - resolution: {integrity: sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==} + /pretty-format/27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: ansi-regex: 5.0.1 @@ -4352,6 +4409,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4472,7 +4534,7 @@ packages: punycode: 2.1.1 dev: true - /ts-jest/27.1.3_a7e53b5e5b59e71a0fd4d8cf128393d5: + /ts-jest/27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb: resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -4496,7 +4558,7 @@ packages: '@types/jest': 27.4.0 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.4.7_ts-node@10.5.0 + jest: 27.5.1_ts-node@10.5.0 jest-util: 27.4.2 json5: 2.2.0 lodash.memoize: 4.1.2 From d6c4753f5f197b757f964bc6a119f072f3b48ff4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:52:56 +0900 Subject: [PATCH 3/7] chore(deps): update dependency @types/node to v16.11.25 (#132) Co-authored-by: Renovate Bot --- package.json | 2 +- pnpm-lock.yaml | 56 +++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index e06b03962..3277b30a3 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@aws-cdk/assert": "2.8.0", "@types/jest": "27.4.0", - "@types/node": "16.11.22", + "@types/node": "16.11.25", "aws-cdk": "2.8.0", "jest": "27.5.1", "ts-jest": "27.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ead28df89..05813101f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ specifiers: '@aws-cdk/aws-stepfunctions-tasks': 1.134.0 '@aws-cdk/core': 1.134.0 '@types/jest': 27.4.0 - '@types/node': 16.11.22 + '@types/node': 16.11.25 aws-cdk: 2.8.0 flatted: 3.2.5 jest: 27.5.1 @@ -87,11 +87,11 @@ dependencies: devDependencies: '@aws-cdk/assert': 2.8.0_jest@27.5.1 '@types/jest': 27.4.0 - '@types/node': 16.11.22 + '@types/node': 16.11.25 aws-cdk: 2.8.0 jest: 27.5.1_ts-node@10.5.0 ts-jest: 27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb - ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 + ts-node: 10.5.0_ad16171857a0edcfc445c7bfcf336eb6 typescript: 4.5.5 packages: @@ -1495,7 +1495,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -1516,7 +1516,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -1553,7 +1553,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 jest-mock: 27.5.1 dev: true @@ -1563,7 +1563,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.0.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -1592,7 +1592,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -1676,7 +1676,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true @@ -1687,7 +1687,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true @@ -1765,7 +1765,7 @@ packages: /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 16.11.22 + '@types/node': 16.11.25 dev: true /@types/istanbul-lib-coverage/2.0.3: @@ -1795,8 +1795,8 @@ packages: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true - /@types/node/16.11.22: - resolution: {integrity: sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==} + /@types/node/16.11.25: + resolution: {integrity: sha512-NrTwfD7L1RTc2qrHQD4RTTy4p0CO2LatKBEKEds3CaVuhoM/+DJzmWZl5f+ikR8cm8F5mfJxK+9rQq07gRiSjQ==} dev: true /@types/prettier/2.3.2: @@ -3109,7 +3109,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -3192,7 +3192,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.5.0_247b6ed5e900a7cb1f087e65be0c3da9 + ts-node: 10.5.0_ad16171857a0edcfc445c7bfcf336eb6 transitivePeerDependencies: - bufferutil - canvas @@ -3245,7 +3245,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -3263,7 +3263,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -3284,7 +3284,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.22 + '@types/node': 16.11.25 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.9 @@ -3306,7 +3306,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -3361,7 +3361,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: @@ -3417,7 +3417,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.9 @@ -3474,7 +3474,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.11.22 + '@types/node': 16.11.25 graceful-fs: 4.2.9 dev: true @@ -3513,7 +3513,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 ci-info: 3.2.0 graceful-fs: 4.2.9 @@ -3525,7 +3525,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 chalk: 4.1.2 ci-info: 3.2.0 graceful-fs: 4.2.9 @@ -3550,7 +3550,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.22 + '@types/node': 16.11.25 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -3561,7 +3561,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.11.22 + '@types/node': 16.11.25 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -4568,7 +4568,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.5.0_247b6ed5e900a7cb1f087e65be0c3da9: + /ts-node/10.5.0_ad16171857a0edcfc445c7bfcf336eb6: resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} hasBin: true peerDependencies: @@ -4587,7 +4587,7 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.2 - '@types/node': 16.11.22 + '@types/node': 16.11.25 acorn: 8.5.0 acorn-walk: 8.2.0 arg: 4.1.3 From 607282991ca7e224e2b6ecac40639339b4498ef8 Mon Sep 17 00:00:00 2001 From: Austin Zhu <42071208+AustinZhu@users.noreply.github.com> Date: Wed, 23 Feb 2022 22:02:02 +0900 Subject: [PATCH 4/7] chore: migrate cdk and setup tools (#134) * Update renovate.json * chore(deps): update deps (#117) * chore(deps): update dependency ts-jest to v27.1.2 (#115) Co-authored-by: Renovate Bot * chore(deps): update dependency @types/node to v16.11.14 * chore(deps): update dependency typescript to v4.5.4 * chore(deps): update dependency jest to v27.4.5 (#112) Co-authored-by: Renovate Bot * chore(deps): update dependency @types/node to v16.11.16 (#116) Co-authored-by: Renovate Bot Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot * chore: update comment in ci * chore: update workflow Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: add eslint, husky and commitlint Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * feat: refactor configs Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * feat: migrate to cdk v2 Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * feat: migrate to cdk v2 Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: add type def for pluralize Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: remove redundant definition Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(eslint): add ignored path Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(ci): use cdk action Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: enable debug log Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: debug diff Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: update workflow Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: add pr lint job Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix(lint): reformat code Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix(lint): reformat code Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: update tsconfig Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: update tsconfig Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: update jest config Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * fix: update jest config Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(ci): fix workflow Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(coverage): setup codecov Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(release): 2.0.0-alpha.0 * chore(readme): add badges Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(ci): fix path Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * feat(apigw): define types Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: bootstrap stack Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: bootstrap stack Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore: set only allow pnpm Signed-off-by: AustinZhu <42071208+AustinZhu@users.noreply.github.com> * chore(release): 2.0.0-alpha.1 Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot --- .commitlintrc.yaml | 2 + .eslintignore | 3 + .eslintrc.yaml | 152 + .github/actions/install-deps/action.yml | 21 + .github/workflows/deploy.yml | 22 +- .github/workflows/pr-lint.yml | 26 + .github/workflows/{cdk.yml => pr.yml} | 82 +- .github/workflows/{node.yml => push.yml} | 40 +- .gitignore | 3 + .husky/commit-msg | 4 + .husky/pre-commit | 16 + .npmrc | 1 + CHANGELOG.md | 35 + README.md | 9 +- bin/index.ts | 3 +- cdk.json | 12 +- jest.config.ts | 15 +- lib/app.ts | 76 +- lib/architecture/interfaces.ts | 92 +- lib/architecture/layers.ts | 78 +- lib/architecture/patterns.ts | 21 +- lib/architecture/protocols.ts | 6 +- lib/configs/amplify/build-setting.ts | 132 +- lib/configs/amplify/codebase.ts | 12 +- lib/configs/amplify/website.ts | 130 +- lib/configs/api-gateway/cors.ts | 26 +- lib/configs/api-gateway/mapping.ts | 38 +- lib/configs/api-gateway/schema.ts | 940 ++-- lib/configs/budgets/enum.ts | 34 +- lib/configs/chatbot/slack.ts | 4 +- lib/configs/cognito/oauth.ts | 8 +- lib/configs/common/aws.ts | 118 +- lib/configs/common/registry.ts | 20 +- lib/configs/event/schedule.ts | 48 +- lib/configs/lambda/environment.ts | 4 +- lib/configs/route53/domain.ts | 18 +- lib/configs/s3/access-setting.ts | 12 +- lib/configs/s3/cors.ts | 8 +- lib/configs/step-functions/definition.ts | 12 - lib/configs/step-functions/tasks.ts | 12 + lib/constructs/admin/budget.ts | 477 +- lib/constructs/admin/log.ts | 19 +- lib/constructs/admin/status-notifier.ts | 178 +- lib/constructs/business/api-endpoint.ts | 465 +- lib/constructs/business/authentication.ts | 240 +- .../business/graphql-api-service.ts | 228 +- lib/constructs/business/http-api-service.ts | 24 +- lib/constructs/business/rest-api-service.ts | 1023 ++-- lib/constructs/business/search.ts | 62 +- lib/constructs/business/service.ts | 31 +- lib/constructs/common/hosted-zone.ts | 68 +- lib/constructs/common/lambda-functions.ts | 712 ++- lib/constructs/persistence/data-pipeline.ts | 286 +- lib/constructs/persistence/database.ts | 111 +- lib/constructs/presentation/web-app.ts | 254 +- lib/stacks/admin.ts | 90 +- lib/stacks/business.ts | 91 +- lib/stacks/persistence.ts | 119 +- lib/stacks/presentation.ts | 58 +- lib/utils/appsync.ts | 121 +- lib/utils/s3.ts | 88 +- package.json | 70 +- pnpm-lock.yaml | 4692 +++++++++-------- renovate.json | 11 +- test/wasedatime-backend.test.ts | 14 +- tsconfig.json | 5 + 66 files changed, 6122 insertions(+), 5710 deletions(-) create mode 100644 .commitlintrc.yaml create mode 100644 .eslintignore create mode 100644 .eslintrc.yaml create mode 100644 .github/actions/install-deps/action.yml create mode 100644 .github/workflows/pr-lint.yml rename .github/workflows/{cdk.yml => pr.yml} (55%) rename .github/workflows/{node.yml => push.yml} (68%) create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .npmrc create mode 100644 CHANGELOG.md delete mode 100644 lib/configs/step-functions/definition.ts create mode 100644 lib/configs/step-functions/tasks.ts diff --git a/.commitlintrc.yaml b/.commitlintrc.yaml new file mode 100644 index 000000000..9cb74a70c --- /dev/null +++ b/.commitlintrc.yaml @@ -0,0 +1,2 @@ +extends: + - "@commitlint/config-conventional" diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..d4e5ec83d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +node_modules +.cdk.staging +cdk.out diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 000000000..58fd80a82 --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,152 @@ +--- +env: + jest: true + node: true +root: true +plugins: + - "@typescript-eslint" + - import +parser: "@typescript-eslint/parser" +parserOptions: + ecmaVersion: 2018 + sourceType: module + project: "./tsconfig.json" +extends: + - "eslint:recommended" + - "plugin:@typescript-eslint/eslint-recommended" + - "plugin:@typescript-eslint/recommended" + - "plugin:import/typescript" +settings: + import/parsers: + "@typescript-eslint/parser": + - ".ts" + - ".tsx" + import/resolver: + node: { } + typescript: + project: "./tsconfig.json" + alwaysTryTypes: true +ignorePatterns: + - "*.js" + - "!.projenrc.js" + - "*.d.ts" + - node_modules/ + - "*.generated.ts" + - coverage +rules: + indent: + - 'off' + "@typescript-eslint/indent": + - error + - 2 + quotes: + - error + - single + - avoidEscape: true + comma-dangle: + - error + - always-multiline + comma-spacing: + - error + - before: false + after: true + no-multi-spaces: + - error + - ignoreEOLComments: false + array-bracket-spacing: + - error + - never + array-bracket-newline: + - error + - consistent + object-curly-spacing: + - error + - always + object-curly-newline: + - error + - multiline: true + consistent: true + object-property-newline: + - error + - allowAllPropertiesOnSameLine: true + keyword-spacing: + - error + brace-style: + - error + - 1tbs + - allowSingleLine: true + space-before-blocks: + - error + curly: + - error + - multi-line + - consistent + "@typescript-eslint/member-delimiter-style": + - error + semi: + - error + - always + max-len: + - error + - code: 150 + ignoreUrls: true + ignoreStrings: true + ignoreTemplateLiterals: true + ignoreComments: true + ignoreRegExpLiterals: true + quote-props: + - error + - consistent-as-needed + "@typescript-eslint/no-require-imports": + - error + import/no-extraneous-dependencies: + - error + - devDependencies: + - "**/test/**" + - "**/build-tools/**" + optionalDependencies: false + peerDependencies: true + import/no-unresolved: + - error + import/order: + - warn + - groups: + - builtin + - external + alphabetize: + order: asc + caseInsensitive: true + no-duplicate-imports: + - error + no-shadow: + - 'off' + "@typescript-eslint/no-shadow": + - error + key-spacing: + - error + no-multiple-empty-lines: + - error + "@typescript-eslint/no-floating-promises": + - error + no-return-await: + - 'off' + "@typescript-eslint/return-await": + - error + no-trailing-spaces: + - error + dot-notation: + - error + no-bitwise: + - error + "@typescript-eslint/member-ordering": + - error + - default: + - public-static-field + - public-static-method + - protected-static-field + - protected-static-method + - private-static-field + - private-static-method + - field + - constructor + - method diff --git a/.github/actions/install-deps/action.yml b/.github/actions/install-deps/action.yml new file mode 100644 index 000000000..c9e93a401 --- /dev/null +++ b/.github/actions/install-deps/action.yml @@ -0,0 +1,21 @@ +name: 'Install Dependencies' +description: 'Workflow for installing dependencies' +runs: + using: "composite" + steps: + - uses: pnpm/action-setup@v2.0.1 + with: + version: latest + - name: Use Node.js + uses: actions/setup-node@v2 + with: + node-version: 16.x + cache: 'pnpm' + - name: Setup CDK + shell: bash + run: | + pnpm install -g aws-cdk + pnpm install + - name: Diagnose + shell: bash + run: cdk doctor diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 67e5567a8..d1f73d09d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -29,26 +29,15 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - - uses: actions/setup-node@v2.5.1 - with: - node-version: 16.x - - - name: Configure pnpm - run: npm install -g pnpm - - - uses: Fooji/create-aws-profile-action@v2 + - uses: ./.github/actions/install-deps + - name: Setup AWS + uses: Fooji/create-aws-profile-action@v2 with: profile: default region: ${{ env.AWS_REGION }} key: ${{ secrets.AWS_ACCESS_KEY_ID }} secret: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - name: Setup CDK - run: | - pnpm install -g aws-cdk - pnpm install - - name: Deploy dev if: github.event.release.prerelease == true env: @@ -69,21 +58,18 @@ jobs: with: repository: wasedatime/wasedatime.github.io token: ${{ env.GITHUB_OAUTH_TOKEN }} - - name: Setup run: | curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install --update - - name: Export run: | cd ./openapi aws apigateway get-export --rest-api-id 'anvonkl0fd' --stage-name 'dev' --export-type 'swagger' --accepts 'application/yaml' ./dev.yml aws apigateway get-export --rest-api-id 'anvonkl0fd' --stage-name 'prod' --export-type 'swagger' --accepts 'application/yaml' ./prod.yml - - name: Push - uses: EndBug/add-and-commit@v8 + uses: EndBug/add-and-commit@v7 with: author_name: GitHub Actions author_email: actions@github.com diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 000000000..08e2294aa --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,26 @@ +name: PR Lint +on: + pull_request_target: + types: + - labeled + - opened + - synchronize + - reopened + - ready_for_review + - edited +jobs: + validate: + name: Validate PR title + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: amannn/action-semantic-pull-request@v4.1.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: |- + feat + fix + chore + requireScope: false diff --git a/.github/workflows/cdk.yml b/.github/workflows/pr.yml similarity index 55% rename from .github/workflows/cdk.yml rename to .github/workflows/pr.yml index 62a64e179..abd3386b7 100644 --- a/.github/workflows/cdk.yml +++ b/.github/workflows/pr.yml @@ -8,7 +8,7 @@ on: paths: - "**.ts" - "src/**" - - ".github/workflows/cdk.yml" + - ".github/workflows/pr.yml" - "**.json" - "**.yaml" @@ -32,64 +32,74 @@ env: STAGE: dev jobs: - build: + lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps + - name: Lint + run: pnpm run lint - - uses: actions/setup-node@v2.5.1 - with: - node-version: 16.x - - - name: Configure pnpm - run: npm install -g pnpm - - - name: Install - run: pnpm install + synth: + runs-on: ubuntu-latest + needs: [ lint ] + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps + - name: Synth + run: cdk synth + test: + runs-on: ubuntu-latest + needs: [ synth ] + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps - name: Test run: pnpm test - - name: Build - run: pnpm run build - - verify: + validate: runs-on: ubuntu-latest - needs: [ build ] + needs: [ test ] steps: - uses: actions/checkout@v2 - - - uses: actions/setup-node@v2.5.1 - with: - node-version: 16.x - - - name: Configure pnpm - run: npm install -g pnpm - - - name: Setup CDK - run: | - pnpm install -g aws-cdk - pnpm install - - name: Diagnose - run: pnpm run cdk doctor - + - uses: ./.github/actions/install-deps - name: Diff id: diff run: | - echo "::add-mask::$DEPLOY_KEY" - echo "::add-mask::$BIT_TOKEN" - LOG="$(cdk diff --no-color 2>&1)" + cdk diff --no-color 2>&1 | tee /tmp/diff.log + LOG="$(cat /tmp/diff.log)" LOG="${LOG//'%'/'%25'}" LOG="${LOG//$'\n'/'%0A'}" LOG="${LOG//$'\r'/'%0D'}" echo "::set-output name=log::$LOG" - + - name: Find Comment + uses: peter-evans/find-comment@v1 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: "### Diff Output:" - name: Comment + if: steps.fc.outputs.comment-id == '' uses: peter-evans/create-or-update-comment@v1 with: issue-number: ${{ github.event.pull_request.number }} body: | + ### Diff Output: + ``` + ${{ steps.diff.outputs.log }} + ``` + token: ${{ secrets.GITHUB_TOKEN }} + - name: Update Comment + if: steps.fc.outputs.comment-id != '' + uses: peter-evans/create-or-update-comment@v1 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + edit-mode: replace + body: | + ### Diff Output: ``` ${{ steps.diff.outputs.log }} ``` - token: ${{ env.GITHUB_OAUTH_TOKEN }} + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/node.yml b/.github/workflows/push.yml similarity index 68% rename from .github/workflows/node.yml rename to .github/workflows/push.yml index 3dc7dce35..6aa57528a 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/push.yml @@ -1,13 +1,12 @@ -name: Node.js +name: AWS CDK CI -# Controls when the action will run. on: push: branches: - "**" paths: - "**.ts" - - ".github/workflows/node.yml" + - ".github/workflows/push.yml" - "**.json" - "**.yaml" @@ -31,23 +30,30 @@ env: STAGE: dev jobs: - build: + lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps + - name: Lint + run: pnpm run lint - - uses: actions/setup-node@v2.5.1 - with: - node-version: 16.x - - - name: Configure pnpm - run: npm install -g pnpm - - - name: Install - run: pnpm install - - - name: Test - run: pnpm test - + build: + runs-on: ubuntu-latest + needs: [ lint ] + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps - name: Build run: pnpm run build + + test: + runs-on: ubuntu-latest + needs: [ build ] + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/install-deps + - name: Test + run: pnpm test -- --coverage + - name: Test Coverage + uses: codecov/codecov-action@v2 diff --git a/.gitignore b/.gitignore index ba43fe921..d909b0669 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,6 @@ node_modules # CDK asset staging directory .cdk.staging cdk.out + +# husky +.husky/_/ diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 000000000..e8511eaea --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..bed71bce8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,16 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +js_diff=$(git --no-pager diff --cached --name-only | grep \.ts | cat) + +if [ ! -z "$js_diff" ]; then + not_staged=$(git --no-pager diff --name-only) + + if [ ! -z "$not_staged" ]; then + echo "Please commit all your changes if you have edit any JavaScripts. " + exit 1 + fi + +else + echo "Seems you haven't changed any JavaScript, skip checks. " +fi diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..e53d37434 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,35 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [2.0.0-alpha.1](https://github.com/wasedatime/wasedatime-backend/compare/v2.0.0-alpha.0...v2.0.0-alpha.1) (2022-02-23) + + +### Features + +* **apigw:** define types ([5344952](https://github.com/wasedatime/wasedatime-backend/commit/5344952b614e155df678c0c5e9aef8c67fabd6e1)) + +## [2.0.0-alpha.0](https://github.com/wasedatime/wasedatime-backend/compare/v1.3.3...v2.0.0-alpha.0) (2022-02-21) + + +### Features + +* migrate to cdk v2 ([e3a267c](https://github.com/wasedatime/wasedatime-backend/commit/e3a267c8dfff245deeb82a0c1d575a159f3533b7)) +* migrate to cdk v2 ([b592743](https://github.com/wasedatime/wasedatime-backend/commit/b59274351a201fca0566cc64f547e16b841f662d)) +* refactor configs ([a11867b](https://github.com/wasedatime/wasedatime-backend/commit/a11867b522f32ec9b7787d2aef423bbd788aad35)) + + +### Bug Fixes + +* add type def for pluralize ([6ac4ccc](https://github.com/wasedatime/wasedatime-backend/commit/6ac4ccccfba69967f91e5bc930afbbe61bb1cece)) +* debug diff ([3639c6f](https://github.com/wasedatime/wasedatime-backend/commit/3639c6fff4a5cafe565bfaa8ae5c9101bf562ae5)) +* **deps:** update dependency flatted to v3.2.5 ([#126](https://github.com/wasedatime/wasedatime-backend/issues/126)) ([21497ac](https://github.com/wasedatime/wasedatime-backend/commit/21497ac7a0b09c0474db4e46b15e490cf5909faa)) +* enable debug log ([ba7f77f](https://github.com/wasedatime/wasedatime-backend/commit/ba7f77f46802b98e9b3209ae66384ccb27572b72)) +* **lint:** reformat code ([13ead2b](https://github.com/wasedatime/wasedatime-backend/commit/13ead2b14fc33651c6a6a307cf388092e3ba8e0e)) +* **lint:** reformat code ([964a6e1](https://github.com/wasedatime/wasedatime-backend/commit/964a6e1e79ab5386a4e012c97a827ecd5967b88b)) +* remove redundant definition ([48e6609](https://github.com/wasedatime/wasedatime-backend/commit/48e660978a2e50e60e3f5c0b58715ccaef6c7627)) +* renew auth cert ([#127](https://github.com/wasedatime/wasedatime-backend/issues/127)) ([a661f2b](https://github.com/wasedatime/wasedatime-backend/commit/a661f2bace720641c15c57ec83f1b28745851f62)) +* update jest config ([1ea9c00](https://github.com/wasedatime/wasedatime-backend/commit/1ea9c00fea632b100b4b8038bb84750c51b212e9)) +* update jest config ([92dd026](https://github.com/wasedatime/wasedatime-backend/commit/92dd026e3b67dc55068a571772f0766e34cdf963)) +* update tsconfig ([4098643](https://github.com/wasedatime/wasedatime-backend/commit/40986431d500b18669c9bd38dbdd584ebdcbf110)) +* update tsconfig ([72e0a06](https://github.com/wasedatime/wasedatime-backend/commit/72e0a06b274c42beed1721b98a53ab38ace85a1c)) diff --git a/README.md b/README.md index 653c51c15..0b136381d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,13 @@ # WasedaTime Backend [![AWS CDK CI/CD](https://github.com/wasedatime/wasedatime-backend/actions/workflows/deploy.yml/badge.svg)](https://github.com/wasedatime/wasedatime-backend/actions/workflows/deploy.yml) -![](https://img.shields.io/website?up_color=green&up_message=online&url=https%3A%2F%2Fwasedatime.com) +[![codecov](https://codecov.io/gh/wasedatime/wasedatime-backend/branch/main/graph/badge.svg?token=PJWAYAQAQH)](https://codecov.io/gh/wasedatime/wasedatime-backend) +[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg?style=flat&logo=renovatebot)](https://app.renovatebot.com/dashboard#github/wasedatime/wasedatime-backend) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend?ref=badge_shield) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-908a85?logo=gitpod)](https://gitpod.io/##https://github.com/wasedatime/wasedatime-backend.git) -This repository defines the serverless application architecture, resource configuration and infrastructure provision strategy of +This repository defines the serverless application architecture, resource configuration and infrastructure provision +strategy of [wasedatime.com](https://wasedatime.com). ## About The Project @@ -96,4 +99,4 @@ The `cdk.json` file tells the CDK Toolkit how to execute your app. ## License -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend?ref=badge_large) \ No newline at end of file +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fwasedatime%2Fwasedatime-backend?ref=badge_large) diff --git a/bin/index.ts b/bin/index.ts index 632ee3118..5a8f957c2 100644 --- a/bin/index.ts +++ b/bin/index.ts @@ -1,6 +1,5 @@ #!/usr/bin/env node -import 'source-map-support/register'; -import {WasedaTime} from '../lib/app'; +import { WasedaTime } from '../lib/app'; const wasedaTime = new WasedaTime(); diff --git a/cdk.json b/cdk.json index 03d020ca9..12004d94b 100644 --- a/cdk.json +++ b/cdk.json @@ -1,11 +1,9 @@ { - "app": "pnpx ts-node --prefer-ts-exts bin/index.ts", + "app": "npx ts-node --prefer-ts-exts bin/index.ts", "context": { - "@aws-cdk/core:enableStackNameDuplicates": "true", - "aws-cdk:enableDiffNoFail": "true", - "@aws-cdk/core:stackRelativeExports": "true", - "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true, - "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true, - "@aws-cdk/aws-kms:defaultKeyPolicies": true + "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": false, + "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": false, + "@aws-cdk/aws-rds:lowercaseDbIdentifier": false, + "@aws-cdk/core:stackRelativeExports": true } } diff --git a/jest.config.ts b/jest.config.ts index 108b26642..d4cc2df90 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,11 +1,12 @@ -import type {Config} from '@jest/types'; +import type { Config } from '@jest/types'; const config: Config.InitialOptions = { - roots: ['/test'], - testMatch: ['**/*.test.ts'], - transform: { - '^.+\\.tsx?$': 'ts-jest', - }, + testEnvironment: 'node', + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, }; -export default config; \ No newline at end of file +export default config; diff --git a/lib/app.ts b/lib/app.ts index 72b515f13..b91babb1f 100644 --- a/lib/app.ts +++ b/lib/app.ts @@ -1,51 +1,47 @@ -import {WasedaTimePresentationLayer} from "./stacks/presentation"; -import {awsEnv} from "./configs/common/aws"; -import {AbstractServerlessApp} from "./architecture/patterns"; -import {WasedaTimeBusinessLayer} from "./stacks/business"; -import {WasedaTimePersistenceLayer} from "./stacks/persistence"; -import {AdminLayer, BusinessLayer, PersistenceLayer, PresentationLayer} from "./architecture/layers"; -import {WasedaTimeAdminLayer} from "./stacks/admin"; -import {OperationInterface} from "./architecture/interfaces"; -import {OperationEndpoint} from "./configs/common/registry"; -import {WasedaTimeHostedZone} from "./constructs/common/hosted-zone"; +import { OperationInterface } from './architecture/interfaces'; +import { AdminLayer, BusinessLayer, PersistenceLayer, PresentationLayer } from './architecture/layers'; +import { AbstractServerlessApp } from './architecture/patterns'; +import { awsEnv } from './configs/common/aws'; +import { OperationEndpoint } from './configs/common/registry'; +import { WasedaTimeHostedZone } from './constructs/common/hosted-zone'; +import { WasedaTimeAdminLayer } from './stacks/admin'; +import { WasedaTimeBusinessLayer } from './stacks/business'; +import { WasedaTimePersistenceLayer } from './stacks/persistence'; +import { WasedaTimePresentationLayer } from './stacks/presentation'; export class WasedaTime extends AbstractServerlessApp { - readonly presentationLayer: PresentationLayer; + readonly presentationLayer: PresentationLayer; + readonly businessLayer: BusinessLayer; + readonly persistenceLayer: PersistenceLayer; + readonly adminLayer: AdminLayer; + readonly hostedZone: WasedaTimeHostedZone; - readonly businessLayer: BusinessLayer; + constructor() { + super(); - readonly persistenceLayer: PersistenceLayer; + this.hostedZone = new WasedaTimeHostedZone(this, 'wt-hosted-zone', awsEnv); - readonly adminLayer: AdminLayer; + this.persistenceLayer = new WasedaTimePersistenceLayer(this, 'persistence', awsEnv); + const dataInterface = this.persistenceLayer.dataInterface; - readonly hostedZone: WasedaTimeHostedZone; + this.businessLayer = new WasedaTimeBusinessLayer(this, 'business', dataInterface, this.hostedZone.zone, awsEnv); + this.businessLayer.dataInterface = dataInterface; + const serviceInterface = this.businessLayer.serviceInterface; - constructor() { - super(); + this.presentationLayer = new WasedaTimePresentationLayer(this, 'presentation', serviceInterface, awsEnv); + this.presentationLayer.serviceInterface = serviceInterface; - this.hostedZone = new WasedaTimeHostedZone(this, 'wt-hosted-zone', awsEnv); + const operationInterface = new OperationInterface; - this.persistenceLayer = new WasedaTimePersistenceLayer(this, 'persistence', awsEnv); - const dataInterface = this.persistenceLayer.dataInterface; + operationInterface.setEndpoint( + OperationEndpoint.SYLLABUS, + this.persistenceLayer.operationInterface.getEndpoint(OperationEndpoint.SYLLABUS), + ); + operationInterface.setEndpoint( + OperationEndpoint.APP, + this.presentationLayer.operationInterface.getEndpoint(OperationEndpoint.APP), + ); - this.businessLayer = new WasedaTimeBusinessLayer(this, 'business', dataInterface, this.hostedZone.zone, awsEnv); - this.businessLayer.dataInterface = dataInterface; - const serviceInterface = this.businessLayer.serviceInterface; - - this.presentationLayer = new WasedaTimePresentationLayer(this, 'presentation', serviceInterface, awsEnv); - this.presentationLayer.serviceInterface = serviceInterface; - - const operationInterface = new OperationInterface; - - operationInterface.setEndpoint( - OperationEndpoint.SYLLABUS, - this.persistenceLayer.operationInterface.getEndpoint(OperationEndpoint.SYLLABUS), - ); - operationInterface.setEndpoint( - OperationEndpoint.APP, - this.presentationLayer.operationInterface.getEndpoint(OperationEndpoint.APP), - ); - - this.adminLayer = new WasedaTimeAdminLayer(this, 'admin', operationInterface, awsEnv); - } + this.adminLayer = new WasedaTimeAdminLayer(this, 'admin', operationInterface, awsEnv); + } } diff --git a/lib/architecture/interfaces.ts b/lib/architecture/interfaces.ts index 00e75a3c0..e3f96413a 100644 --- a/lib/architecture/interfaces.ts +++ b/lib/architecture/interfaces.ts @@ -1,73 +1,71 @@ -import {DataEndpoint, OperationEndpoint, ServiceEndpoint} from "../configs/common/registry"; -import {Protocol, Registry} from "./protocols"; +import { DataEndpoint, OperationEndpoint, ServiceEndpoint } from '../configs/common/registry'; +import { Registry } from './protocols'; interface IInterface { - protocol: Protocol; + protocol: Registry; - getEndpoint(name: number): string; + getEndpoint(name: number): any; - setEndpoint(name: number, value: string): void; + setEndpoint(name: number, value: any): void; } export class DataInterface implements IInterface { - protocol: Registry; + protocol: Registry; - constructor() { - this.protocol = new Map(); - } + constructor() { + this.protocol = new Map(); + } - getEndpoint(name: DataEndpoint): string { - let value = this.protocol.get(name); - if (typeof value === "undefined") { - throw RangeError("Service not configured for this entry."); - } - return value; + getEndpoint(name: DataEndpoint): any { + const value = this.protocol.get(name); + if (typeof value === 'undefined') { + throw RangeError('Service not configured for this entry.'); } + return value; + } - setEndpoint(name: DataEndpoint, value: string): void { - this.protocol.set(name, value); - return; - } + setEndpoint(name: DataEndpoint, value: any) { + this.protocol.set(name, value); + } } export class ServiceInterface implements IInterface { - protocol: Registry; + protocol: Registry; - constructor() { - this.protocol = new Map(); - } + constructor() { + this.protocol = new Map(); + } - getEndpoint(name: ServiceEndpoint): string { - const value = this.protocol.get(name); - if (typeof value === "undefined") { - throw RangeError("Service not configured for this entry."); - } - return value; + getEndpoint(name: ServiceEndpoint): any { + const value = this.protocol.get(name); + if (typeof value === 'undefined') { + throw RangeError('Service not configured for this entry.'); } + return value; + } - setEndpoint(name: ServiceEndpoint, value: string): void { - this.protocol.set(name, value); - return; - } + setEndpoint(name: ServiceEndpoint, value: any) { + this.protocol.set(name, value); + } } export class OperationInterface implements IInterface { - protocol: Registry; + protocol: Registry; - constructor() { - this.protocol = new Map(); - } + constructor() { + this.protocol = new Map(); + } - getEndpoint(name: OperationEndpoint): any { - const value = this.protocol.get(name); - if (typeof value === "undefined") { - throw RangeError("Service not configured for this entry."); - } - return value; + getEndpoint(name: OperationEndpoint): any { + const value = this.protocol.get(name); + if (typeof value === 'undefined') { + throw RangeError('Service not configured for this entry.'); } + return value; + } - setEndpoint(name: OperationEndpoint, value: any): void { - this.protocol.set(name, value); - return; - } + setEndpoint(name: OperationEndpoint, value: any): void { + this.protocol.set(name, value); + return; + } } diff --git a/lib/architecture/layers.ts b/lib/architecture/layers.ts index 0b13f5767..2b21dd4d5 100644 --- a/lib/architecture/layers.ts +++ b/lib/architecture/layers.ts @@ -1,59 +1,51 @@ -import * as cdk from "@aws-cdk/core"; +import { Stack, StackProps } from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { DataInterface, OperationInterface, ServiceInterface } from './interfaces'; -import {DataInterface, OperationInterface, ServiceInterface} from "./interfaces"; +export abstract class PersistenceLayer extends Stack { + dataInterface: DataInterface; + operationInterface: OperationInterface; -export abstract class PersistenceLayer extends cdk.Stack { - dataInterface: DataInterface; + protected constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); - operationInterface: OperationInterface; - - protected constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - this.dataInterface = new DataInterface; - - this.operationInterface = new OperationInterface; - } + this.dataInterface = new DataInterface; + this.operationInterface = new OperationInterface; + } } -export abstract class BusinessLayer extends cdk.Stack { - serviceInterface: ServiceInterface; - - dataInterface: DataInterface; - - operationInterface: OperationInterface; +export abstract class BusinessLayer extends Stack { + serviceInterface: ServiceInterface; + dataInterface: DataInterface; + operationInterface: OperationInterface; - protected constructor(scope: cdk.Construct, id: string, dataInterface: DataInterface, props: cdk.StackProps) { - super(scope, id, props); + protected constructor(scope: Construct, id: string, dataInterface: DataInterface, props: StackProps) { + super(scope, id, props); - this.dataInterface = dataInterface; - - this.serviceInterface = new ServiceInterface; - - this.operationInterface = new OperationInterface; - } + this.dataInterface = dataInterface; + this.serviceInterface = new ServiceInterface; + this.operationInterface = new OperationInterface; + } } -export abstract class PresentationLayer extends cdk.Stack { - serviceInterface: ServiceInterface; - - operationInterface: OperationInterface; - - protected constructor(scope: cdk.Construct, id: string, serviceInterface: ServiceInterface, props?: cdk.StackProps) { - super(scope, id, props); +export abstract class PresentationLayer extends Stack { + serviceInterface: ServiceInterface; + operationInterface: OperationInterface; - this.serviceInterface = serviceInterface; + protected constructor(scope: Construct, id: string, serviceInterface: ServiceInterface, props?: StackProps) { + super(scope, id, props); - this.operationInterface = new OperationInterface; - } + this.serviceInterface = serviceInterface; + this.operationInterface = new OperationInterface; + } } -export abstract class AdminLayer extends cdk.Stack { - operationInterface: OperationInterface; +export abstract class AdminLayer extends Stack { + operationInterface: OperationInterface; - protected constructor(scope: cdk.Construct, id: string, operationInterface: OperationInterface, props?: cdk.StackProps) { - super(scope, id, props); + protected constructor(scope: Construct, id: string, operationInterface: OperationInterface, props?: StackProps) { + super(scope, id, props); - this.operationInterface = operationInterface; - } + this.operationInterface = operationInterface; + } } diff --git a/lib/architecture/patterns.ts b/lib/architecture/patterns.ts index a0dca1a35..be79fc6d7 100644 --- a/lib/architecture/patterns.ts +++ b/lib/architecture/patterns.ts @@ -1,14 +1,9 @@ -import * as cdk from "@aws-cdk/core"; - -import {AdminLayer, BusinessLayer, PersistenceLayer, PresentationLayer} from "./layers"; - -export abstract class AbstractServerlessApp extends cdk.App { - abstract presentationLayer: PresentationLayer; - - abstract businessLayer: BusinessLayer; - - abstract persistenceLayer: PersistenceLayer; - - abstract adminLayer: AdminLayer; - +import { App } from 'aws-cdk-lib'; +import { AdminLayer, BusinessLayer, PersistenceLayer, PresentationLayer } from './layers'; + +export abstract class AbstractServerlessApp extends App { + abstract presentationLayer: PresentationLayer; + abstract businessLayer: BusinessLayer; + abstract persistenceLayer: PersistenceLayer; + abstract adminLayer: AdminLayer; } diff --git a/lib/architecture/protocols.ts b/lib/architecture/protocols.ts index 8183243bc..15dc41f49 100644 --- a/lib/architecture/protocols.ts +++ b/lib/architecture/protocols.ts @@ -1,5 +1 @@ -export interface Protocol { -} - -export interface Registry extends Map, Protocol { -} +export type Registry = Map; diff --git a/lib/configs/amplify/build-setting.ts b/lib/configs/amplify/build-setting.ts index ea1824084..679f139ff 100644 --- a/lib/configs/amplify/build-setting.ts +++ b/lib/configs/amplify/build-setting.ts @@ -1,89 +1,89 @@ -import {BuildSpec} from "@aws-cdk/aws-codebuild/lib/build-spec"; -import {microAppCorsHeader, securityHeaders} from "./website"; +import * as codebuild from 'aws-cdk-lib/aws-codebuild'; +import { microAppCorsHeader, securityHeaders } from './website'; -export const bitToken = process.env.BIT_TOKEN!; -export const feedsDeployKey = process.env.DEPLOY_KEY!; +export const BIT_TOKEN = process.env.BIT_TOKEN!; +export const FEEDS_DEPLOY_KEY = process.env.DEPLOY_KEY!; const preBuild = { - commands: [ - "npm install -g pnpm", - "pnpm install --filter .", - ], + commands: [ + 'npm install -g pnpm', + 'pnpm install --filter .', + ], }; const preBuildForFeeds = { - commands: [ - "eval $(ssh-agent -s)", - "ssh-add <(echo \"$DEPLOY_KEY\" | base64 --decode)", - "git submodule init", - "git submodule update --remote", - "yum -y install make nasm autoconf automake libtool dpkg pkgconfig libpng libpng-dev g++", - "npm install -g pnpm", - "pnpm install --filter .", - ], + commands: [ + 'eval $(ssh-agent -s)', + 'ssh-add <(echo "$DEPLOY_KEY" | base64 --decode)', + 'git submodule init', + 'git submodule update --remote', + 'yum -y install make nasm autoconf automake libtool dpkg pkgconfig libpng libpng-dev g++', + 'npm install -g pnpm', + 'pnpm install --filter .', + ], }; const prodBuild = { - commands: ["pnpm run build"], + commands: ['pnpm run build'], }; const devBuild = { - commands: [ - "export PREFIX=\"${AWS_BRANCH//[\\/_]/-}\"", - "pnpm run build-dev", - ], + commands: [ + 'export PREFIX="${AWS_BRANCH//[\\/_]/-}"', + 'pnpm run build-dev', + ], }; const artifacts = { - // IMPORTANT - Please verify your build output directory - baseDirectory: "/dist", - files: ["**/*"], + // IMPORTANT - Please verify your build output directory + baseDirectory: '/dist', + files: ['**/*'], }; -const cache = {paths: ["node_modules/**/*", "~/.pnpm-store"]}; +const cache = { paths: ['node_modules/**/*', '~/.pnpm-store'] }; -export const microAppBuildSpec = (name: string): BuildSpec => BuildSpec.fromObject({ - version: 1, - applications: [ - { - frontend: { - phases: { - preBuild: name == "feeds" ? preBuildForFeeds : preBuild, - build: prodBuild, - }, - artifacts: artifacts, - cache: cache, - customHeaders: [ - { - pattern: "**/*", - headers: securityHeaders.concat(microAppCorsHeader), - }, - ], - }, - appRoot: name, +export const microAppBuildSpec = (name: string) => codebuild.BuildSpec.fromObject({ + version: 1, + applications: [ + { + frontend: { + phases: { + preBuild: name == 'feeds' ? preBuildForFeeds : preBuild, + build: prodBuild, }, - ], + artifacts: artifacts, + cache: cache, + customHeaders: [ + { + pattern: '**/*', + headers: securityHeaders.concat(microAppCorsHeader), + }, + ], + }, + appRoot: name, + }, + ], }); -export const microAppDevBuildSpec = (name: string): BuildSpec => BuildSpec.fromObject({ - version: 1, - applications: [ - { - frontend: { - phases: { - preBuild: name == "feeds" ? preBuildForFeeds : preBuild, - build: devBuild, - }, - artifacts: artifacts, - cache: cache, - customHeaders: [ - { - pattern: "**/*", - headers: microAppCorsHeader, - }, - ], - }, - appRoot: name, +export const microAppDevBuildSpec = (name: string) => codebuild.BuildSpec.fromObject({ + version: 1, + applications: [ + { + frontend: { + phases: { + preBuild: name == 'feeds' ? preBuildForFeeds : preBuild, + build: devBuild, }, - ], + artifacts: artifacts, + cache: cache, + customHeaders: [ + { + pattern: '**/*', + headers: microAppCorsHeader, + }, + ], + }, + appRoot: name, + }, + ], }); diff --git a/lib/configs/amplify/codebase.ts b/lib/configs/amplify/codebase.ts index 1b5b70c85..6f1c68b4d 100644 --- a/lib/configs/amplify/codebase.ts +++ b/lib/configs/amplify/codebase.ts @@ -1,8 +1,8 @@ -import {GitHubSourceCodeProvider} from "@aws-cdk/aws-amplify"; -import {SecretValue} from "@aws-cdk/core"; +import * as amplify from '@aws-cdk/aws-amplify-alpha'; +import { SecretValue } from 'aws-cdk-lib'; -export const webAppCode: GitHubSourceCodeProvider = new GitHubSourceCodeProvider({ - owner: "wasedatime", - repository: "wasedatime-web", - oauthToken: new SecretValue(process.env.GITHUB_OAUTH_TOKEN), +export const webAppCode = new amplify.GitHubSourceCodeProvider({ + owner: 'wasedatime', + repository: 'wasedatime-web', + oauthToken: new SecretValue(process.env.GITHUB_OAUTH_TOKEN), }); diff --git a/lib/configs/amplify/website.ts b/lib/configs/amplify/website.ts index fa67cb8a1..9c8cb443b 100644 --- a/lib/configs/amplify/website.ts +++ b/lib/configs/amplify/website.ts @@ -1,82 +1,82 @@ -import {BasicAuth, CustomRule, RedirectStatus} from "@aws-cdk/aws-amplify"; -import {SecretValue} from "@aws-cdk/core"; +import * as amplify from '@aws-cdk/aws-amplify-alpha'; +import { SecretValue } from 'aws-cdk-lib'; -const wwwRedirect: CustomRule = new CustomRule({ - source: "https://www.wasedatime.com", - target: "https://wasedatime.com", - status: RedirectStatus.PERMANENT_REDIRECT, +const wwwRedirect = new amplify.CustomRule({ + source: 'https://www.wasedatime.com', + target: 'https://wasedatime.com', + status: amplify.RedirectStatus.PERMANENT_REDIRECT, }); -const sitemapRewrite: CustomRule = new CustomRule({ - source: "/sitemap.xml", - target: "/sitemap.xml", - status: RedirectStatus.REWRITE, +const sitemapRewrite = new amplify.CustomRule({ + source: '/sitemap.xml', + target: '/sitemap.xml', + status: amplify.RedirectStatus.REWRITE, }); -const robotRewrite: CustomRule = new CustomRule({ - source: "/robots.txt", - target: "/robots.txt", - status: RedirectStatus.REWRITE, +const robotRewrite = new amplify.CustomRule({ + source: '/robots.txt', + target: '/robots.txt', + status: amplify.RedirectStatus.REWRITE, }); -const spaRewrite: CustomRule = new CustomRule({ - source: "", - target: "/index.html", - status: RedirectStatus.REWRITE, +const spaRewrite = new amplify.CustomRule({ + source: '', + target: '/index.html', + status: amplify.RedirectStatus.REWRITE, }); -export const webappSiteRules: CustomRule[] = [wwwRedirect, sitemapRewrite, robotRewrite, spaRewrite]; +export const webappSiteRules = [wwwRedirect, sitemapRewrite, robotRewrite, spaRewrite]; -export const developerAuth: BasicAuth = BasicAuth.fromCredentials( - "wasedatime", new SecretValue(process.env.WEBSITE_DEV_PASS), +export const developerAuth = amplify.BasicAuth.fromCredentials( + 'wasedatime', new SecretValue(process.env.WEBSITE_DEV_PASS), ); export const securityHeaders = [ - { - "key": "Strict-Transport-Security", - "value": "max-age=15552000; includeSubDomains", - }, - { - "key": "X-Frame-Options", - "value": "SAMEORIGIN", - }, - { - "key": "X-XSS-Protection", - "value": "1; mode=block", - }, - { - "key": "X-Content-Type-Options", - "value": "nosniff", - }, - { - "key": "Content-Security-Policy", - "value": "default-src 'self' 'unsafe-inline' https: data:;", - }, - { - "key": "X-Content-Security-Policy", - "value": "default-src 'self' 'unsafe-inline' https: data:;", - }, - { - "key": "X-WebKit-CSP", - "value": "default-src 'self' 'unsafe-inline' https: data:;", - }, - { - "key": "X-Download-Options", - "value": "noopen", - }, - { - "key": "X-DNS-Prefetch-Control", - "value": "off", - }, + { + key: 'Strict-Transport-Security', + value: 'max-age=15552000; includeSubDomains', + }, + { + key: 'X-Frame-Options', + value: 'SAMEORIGIN', + }, + { + key: 'X-XSS-Protection', + value: '1; mode=block', + }, + { + key: 'X-Content-Type-Options', + value: 'nosniff', + }, + { + key: 'Content-Security-Policy', + value: 'default-src \'self\' \'unsafe-inline\' https: data:;', + }, + { + key: 'X-Content-Security-Policy', + value: 'default-src \'self\' \'unsafe-inline\' https: data:;', + }, + { + key: 'X-WebKit-CSP', + value: 'default-src \'self\' \'unsafe-inline\' https: data:;', + }, + { + key: 'X-Download-Options', + value: 'noopen', + }, + { + key: 'X-DNS-Prefetch-Control', + value: 'off', + }, ]; export const microAppCorsHeader = [ - { - key: "Access-Control-Allow-Origin", - value: "*", - }, - { - key: "Access-Control-Allow-Methods", - value: "GET, HEAD, OPTIONS", - }, + { + key: 'Access-Control-Allow-Origin', + value: '*', + }, + { + key: 'Access-Control-Allow-Methods', + value: 'GET, HEAD, OPTIONS', + }, ]; diff --git a/lib/configs/api-gateway/cors.ts b/lib/configs/api-gateway/cors.ts index a4c67e6c1..4e36f3690 100644 --- a/lib/configs/api-gateway/cors.ts +++ b/lib/configs/api-gateway/cors.ts @@ -1,18 +1,18 @@ // fixme migration -export const allowOrigins: string[] = [ - '*', - // "https://wasedatime.com", - // "https://www.wasedatime.com", - // "https://dev.wasedatime.com", - // "https://preview.wasedatime.com" +export const allowOrigins = [ + '*', + // "https://wasedatime.com", + // "https://www.wasedatime.com", + // "https://dev.wasedatime.com", + // "https://preview.wasedatime.com" ]; -export const allowHeaders: string[] = [ - 'Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key', 'X-Amz-Security-Token', +export const allowHeaders = [ + 'Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key', 'X-Amz-Security-Token', ]; -export const defaultHeaders: { [name: string]: string } = { - "Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - "Access-Control-Allow-Methods": "'GET,POST,OPTIONS'", - "Access-Control-Allow-Origin": "'*'", -}; \ No newline at end of file +export const defaultHeaders = { + 'Access-Control-Allow-Headers': '\'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token\'', + 'Access-Control-Allow-Methods': '\'GET,POST,OPTIONS\'', + 'Access-Control-Allow-Origin': '\'*\'', +}; diff --git a/lib/configs/api-gateway/mapping.ts b/lib/configs/api-gateway/mapping.ts index 057b00d93..85e5286ff 100644 --- a/lib/configs/api-gateway/mapping.ts +++ b/lib/configs/api-gateway/mapping.ts @@ -1,31 +1,31 @@ // fixme migration export const s3RespMapping = { - ['method.response.header.Access-Control-Allow-Origin']: "'*'", - ['method.response.header.Access-Control-Allow-Methods']: 'integration.response.header.Access-Control-Allow-Methods', - ['method.response.header.Cache-Control']: 'integration.response.header.Cache-Control', - ['method.response.header.ETag']: 'integration.response.header.ETag', - ['method.response.header.Last-Modified']: 'integration.response.header.Last-Modified', - ['method.response.header.Expires']: 'integration.response.header.Expires', + ['method.response.header.Access-Control-Allow-Origin']: '\'*\'', + ['method.response.header.Access-Control-Allow-Methods']: 'integration.response.header.Access-Control-Allow-Methods', + ['method.response.header.Cache-Control']: 'integration.response.header.Cache-Control', + ['method.response.header.ETag']: 'integration.response.header.ETag', + ['method.response.header.Last-Modified']: 'integration.response.header.Last-Modified', + ['method.response.header.Expires']: 'integration.response.header.Expires', }; export const syllabusRespParams = { - ['method.response.header.Access-Control-Allow-Origin']: true, - ['method.response.header.Access-Control-Allow-Methods']: true, - ['method.response.header.Cache-Control']: true, - ['method.response.header.ETag']: true, - ['method.response.header.Last-Modified']: true, - ['method.response.header.Expires']: true, + ['method.response.header.Access-Control-Allow-Origin']: true, + ['method.response.header.Access-Control-Allow-Methods']: true, + ['method.response.header.Cache-Control']: true, + ['method.response.header.ETag']: true, + ['method.response.header.Last-Modified']: true, + ['method.response.header.Expires']: true, }; export const lambdaRespParams = { - ['method.response.header.Access-Control-Allow-Origin']: true, - ['method.response.header.Content-Type']: true, - ['method.response.header.Referrer-Policy']: true, - ['method.response.header.Access-Control-Allow-Methods']: true, + ['method.response.header.Access-Control-Allow-Origin']: true, + ['method.response.header.Content-Type']: true, + ['method.response.header.Referrer-Policy']: true, + ['method.response.header.Access-Control-Allow-Methods']: true, }; export const mockRespMapping = { - ['method.response.header.Access-Control-Allow-Origin']: "'*'", - ['method.response.header.Content-Type']: "'application/json'", - ['method.response.header.Referrer-Policy']: "'origin'", + ['method.response.header.Access-Control-Allow-Origin']: '\'*\'', + ['method.response.header.Content-Type']: '\'application/json\'', + ['method.response.header.Referrer-Policy']: '\'origin\'', }; diff --git a/lib/configs/api-gateway/schema.ts b/lib/configs/api-gateway/schema.ts index 1072985f3..f8a7a8142 100644 --- a/lib/configs/api-gateway/schema.ts +++ b/lib/configs/api-gateway/schema.ts @@ -1,536 +1,466 @@ -import {JsonSchema, JsonSchemaType, JsonSchemaVersion} from "@aws-cdk/aws-apigateway"; +import * as apigw from 'aws-cdk-lib/aws-apigateway'; -export const syllabusSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.ARRAY, - title: "Syllabus", - description: "The new syllabus JSON schema for each school.", - items: { - type: JsonSchemaType.OBJECT, - title: "Items", - description: "The schema of each course in the array.", - required: [ - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", +export const syllabusSchema: apigw.JsonSchema = { + schema: apigw.JsonSchemaVersion.DRAFT7, + type: apigw.JsonSchemaType.ARRAY, + title: 'Syllabus', + description: 'The new syllabus JSON schema for each school.', + items: { + type: apigw.JsonSchemaType.OBJECT, + title: 'Items', + description: 'The schema of each course in the array.', + required: [ + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + ], + properties: { + a: { + type: apigw.JsonSchemaType.STRING, + title: 'Course Key', + description: 'Course key of the course.', + }, + b: { + type: apigw.JsonSchemaType.STRING, + title: 'Title', + description: 'Course title in English.', + }, + c: { + type: apigw.JsonSchemaType.STRING, + title: 'Title JP', + description: 'Course title in Japanese.', + }, + d: { + type: apigw.JsonSchemaType.STRING, + title: 'Instructor', + description: 'Instructor\'s name in English.', + }, + e: { + type: apigw.JsonSchemaType.STRING, + title: 'Instructor JP', + description: 'Instructor\'s name in Japanese.', + }, + f: { + type: apigw.JsonSchemaType.ARRAY, + title: 'Langauges', + description: 'Languages in which the course is taught.', + items: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Language', + description: '-1 N/A | 0 Japanese | 1 English | 2 German | 3 French | 4 Chinese | 5 Spanish | 6 Korean | 7 Russia | 8 Italian | 9 other', + enum: [ + -1, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + ], + }, + }, + g: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Type', + description: 'Type of the course\n-1 N/A | 0 Lecture | 1 Seminar | 2 Work | 3 Foreign Langauge | 4 On-demand | 5 Thesis | 6 Graduate Research | 7 Practice | 8 Blended', + enum: [ + -1, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, ], - properties: { - "a": { - type: JsonSchemaType.STRING, - title: "Course Key", - description: "Course key of the course.", - }, - "b": { - type: JsonSchemaType.STRING, - title: "Title", - description: "Course title in English.", - }, - "c": { - type: JsonSchemaType.STRING, - title: "Title JP", - description: "Course title in Japanese.", - }, - "d": { - type: JsonSchemaType.STRING, - title: "Instructor", - description: "Instructor's name in English.", - }, - "e": { - type: JsonSchemaType.STRING, - title: "Instructor JP", - description: "Instructor's name in Japanese.", - }, - "f": { - type: JsonSchemaType.ARRAY, - title: "Langauges", - description: "Languages in which the course is taught.", - items: { - type: JsonSchemaType.INTEGER, - title: "Language", - description: "-1 N/A | 0 Japanese | 1 English | 2 German | 3 French | 4 Chinese | 5 Spanish | 6 Korean | 7 Russia | 8 Italian | 9 other", - enum: [ - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - ], - }, - }, - "g": { - type: JsonSchemaType.INTEGER, - title: "Type", - description: "Type of the course\n-1 N/A | 0 Lecture | 1 Seminar | 2 Work | 3 Foreign Langauge | 4 On-demand | 5 Thesis | 6 Graduate Research | 7 Practice | 8 Blended", - enum: [ - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - ], - }, - "h": { - type: JsonSchemaType.STRING, - title: "Term", - description: "The term in which the course is taught.\nseason := 0 Spring | 1 Summer | 2 Fall | 3 Winter\nperiod := 's' Semester| 'q' Quarter | 'i' Intensive Course | 'f' Full Year | 't' Term\ndelimiter := '/' or | '&' and", - enum: [ - "0s", - "2s", - "0q", - "1q", - "2q", - "3q", - "f", - "0", - "1", - "2", - "3", - "0i", - "2i", - "0t", - "2t", - "3t", - "0t/1t", - "0s/2s", - "2t/3t", - "1&2s", - "0s&1", - "f/2s", - "0i&3i", - ], - }, - "i": { - type: JsonSchemaType.ARRAY, - title: "Occurrences", - description: "The schedules and locations of the course.", - items: { - type: JsonSchemaType.OBJECT, - title: "Occurrence", - description: "Schedule and location", - required: [ - "d", - "p", - "l", - ], - properties: { - "d": { - type: JsonSchemaType.INTEGER, - title: "Day", - description: "The day on which the course is taught.\n-1 others | 0 Mon | 1 Tues | 2 Wed | 3 Thur | 4 Fri | 5 Sat | 6 Sun", - enum: [ - -1, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - ], - }, - "p": { - type: JsonSchemaType.INTEGER, - title: "Period", - description: "The period on which the course is taught.\nstart_period := -1 others | 0 On-demand | 1 .. 9\nend_period := start_period ", - }, - "l": { - type: JsonSchemaType.STRING, - title: "Loction", - description: "The location where the course takes place.", - }, - }, - }, - }, - "j": { - type: JsonSchemaType.INTEGER, - title: "Minimum Eligible Year", - description: "Minimum eligible year.\n-1 unknown | 1 .. 4", - enum: [ - -1, - 1, - 2, - 3, - 4, - ], - }, - "k": { - type: JsonSchemaType.STRING, - title: "Category", - description: "The category the course falls in.", - }, - "l": { - type: JsonSchemaType.INTEGER, - title: "Credit", - description: "The credit of the course.\n -1 unknown | 0 ..", + }, + h: { + type: apigw.JsonSchemaType.STRING, + title: 'Term', + description: 'The term in which the course is taught.\nseason := 0 Spring | 1 Summer | 2 Fall | 3 Winter\nperiod := \'s\' Semester| \'q\' Quarter | \'i\' Intensive Course | \'f\' Full Year | \'t\' Term\ndelimiter := \'/\' or | \'&\' and', + enum: [ + '0s', + '2s', + '0q', + '1q', + '2q', + '3q', + 'f', + '0', + '1', + '2', + '3', + '0i', + '2i', + '0t', + '2t', + '3t', + '0t/1t', + '0s/2s', + '2t/3t', + '1&2s', + '0s&1', + 'f/2s', + '0i&3i', + ], + }, + i: { + type: apigw.JsonSchemaType.ARRAY, + title: 'Occurrences', + description: 'The schedules and locations of the course.', + items: { + type: apigw.JsonSchemaType.OBJECT, + title: 'Occurrence', + description: 'Schedule and location', + required: [ + 'd', + 'p', + 'l', + ], + properties: { + d: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Day', + description: 'The day on which the course is taught.\n-1 others | 0 Mon | 1 Tues | 2 Wed | 3 Thur | 4 Fri | 5 Sat | 6 Sun', + enum: [ + -1, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + ], }, - "m": { - type: JsonSchemaType.INTEGER, - title: "Level", - description: "The level/difficulty of the course.\n-1 N/A | 0 Beginner | 1 Intermediate | 2 Advanced | 3 Final-stage | 4 Master | 5 Doctor", - enum: [ - -1, - 0, - 1, - 2, - 3, - 4, - 5, - ], + p: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Period', + description: 'The period on which the course is taught.\nstart_period := -1 others | 0 On-demand | 1 .. 9\nend_period := start_period ', }, - "n": { - type: JsonSchemaType.ARRAY, - title: "Evaluations", - description: "The distribution of evaluation criterion and their descriptions", - items: { - type: JsonSchemaType.OBJECT, - title: "Evaluation", - description: "Criteria and description", - required: [ - "t", - "p", - "c", - ], - properties: { - "t": { - type: JsonSchemaType.INTEGER, - title: "Type", - description: "Type of the evaluation\n-1 Unknown | 0 Exam | 1 Papers | 2 Class Participation | 3 Others", - enum: [ - -1, - 0, - 1, - 2, - 3, - ], - }, - "p": { - type: JsonSchemaType.INTEGER, - title: "Percentage", - description: "The percentage of this criteria in evaluation.", - }, - "c": { - type: JsonSchemaType.STRING, - title: "Comment", - description: "An explanation about the criteria.", - }, - }, - }, + l: { + type: apigw.JsonSchemaType.STRING, + title: 'Loction', + description: 'The location where the course takes place.', }, - "o": { - type: JsonSchemaType.STRING, - title: "Code", - description: "Course code", + }, + }, + }, + j: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Minimum Eligible Year', + description: 'Minimum eligible year.\n-1 unknown | 1 .. 4', + enum: [ + -1, + 1, + 2, + 3, + 4, + ], + }, + k: { + type: apigw.JsonSchemaType.STRING, + title: 'Category', + description: 'The category the course falls in.', + }, + l: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Credit', + description: 'The credit of the course.\n -1 unknown | 0 ..', + }, + m: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Level', + description: 'The level/difficulty of the course.\n-1 N/A | 0 Beginner | 1 Intermediate | 2 Advanced | 3 Final-stage | 4 Master | 5 Doctor', + enum: [ + -1, + 0, + 1, + 2, + 3, + 4, + 5, + ], + }, + n: { + type: apigw.JsonSchemaType.ARRAY, + title: 'Evaluations', + description: 'The distribution of evaluation criterion and their descriptions', + items: { + type: apigw.JsonSchemaType.OBJECT, + title: 'Evaluation', + description: 'Criteria and description', + required: [ + 't', + 'p', + 'c', + ], + properties: { + t: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Type', + description: 'Type of the evaluation\n-1 Unknown | 0 Exam | 1 Papers | 2 Class Participation | 3 Others', + enum: [ + -1, + 0, + 1, + 2, + 3, + ], }, - "p": { - type: JsonSchemaType.STRING, - title: "Subtitle", - description: "Subtitle of the course (often seen in seminar courses)", + p: { + type: apigw.JsonSchemaType.INTEGER, + title: 'Percentage', + description: 'The percentage of this criteria in evaluation.', }, - "q": { - type: JsonSchemaType.STRING, - title: "CategoryJP", - description: "The category the course falls in.(in Japanese)", + c: { + type: apigw.JsonSchemaType.STRING, + title: 'Comment', + description: 'An explanation about the criteria.', }, + }, }, + }, + o: { + type: apigw.JsonSchemaType.STRING, + title: 'Code', + description: 'Course code', + }, + p: { + type: apigw.JsonSchemaType.STRING, + title: 'Subtitle', + description: 'Subtitle of the course (often seen in seminar courses)', + }, + q: { + type: apigw.JsonSchemaType.STRING, + title: 'CategoryJP', + description: 'The category the course falls in.(in Japanese)', + }, }, + }, }; -export const courseReviewGetRespSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.OBJECT, - properties: { - "success": { - type: JsonSchemaType.BOOLEAN, - }, - "data": { - type: JsonSchemaType.ARRAY, - items: { - type: JsonSchemaType.OBJECT, - properties: { - "title_jp": { - type: JsonSchemaType.STRING, - }, - "instructor_jp": { - type: JsonSchemaType.STRING, - }, - "updated_at": { - type: JsonSchemaType.STRING, - }, - "created_at": { - type: JsonSchemaType.STRING, - }, - "benefit": { - type: JsonSchemaType.INTEGER, - }, - "difficulty": { - type: JsonSchemaType.INTEGER, - }, - "satisfaction": { - type: JsonSchemaType.INTEGER, - }, - "instructor": { - type: JsonSchemaType.STRING, - }, - "comment_zh_CN": { - type: JsonSchemaType.STRING, - }, - "comment_en": { - type: JsonSchemaType.STRING, - }, - "comment_ko": { - type: JsonSchemaType.STRING, - }, - "year": { - type: JsonSchemaType.INTEGER, - }, - "src_lang": { - type: JsonSchemaType.STRING, - }, - "comment_ja": { - type: JsonSchemaType.STRING, - }, - "comment_zh_TW": { - type: JsonSchemaType.STRING, - }, - "title": { - type: JsonSchemaType.STRING, - }, - "mod": { - type: JsonSchemaType.BOOLEAN, - }, - }, - required: [ - "title_jp", - "instructor_jp", - "updated_at", - "created_at", - "benefit", - "difficulty", - "satisfaction", - "instructor", - "comment_zh-CN", - "comment_zh-TW", - "comment_ko", - "comment_en", - "year", - "src_lang", - "comment_ja", - "title", - "mod", - ], - }, - }, - "message": { - type: JsonSchemaType.STRING, - }, +export const courseReviewGetRespSchema: apigw.JsonSchema = { + schema: apigw.JsonSchemaVersion.DRAFT7, + type: apigw.JsonSchemaType.OBJECT, + properties: { + success: { + type: apigw.JsonSchemaType.BOOLEAN, }, - required: [ - "success", - "data", - "message", - ], -}; - -export const courseReviewPostReqSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.OBJECT, - properties: { - "data": { - type: JsonSchemaType.OBJECT, - properties: { - "title_jp": { - type: JsonSchemaType.STRING, - }, - "instructor_jp": { - type: JsonSchemaType.STRING, - }, - "benefit": { - type: JsonSchemaType.INTEGER, - }, - "difficulty": { - type: JsonSchemaType.INTEGER, - }, - "satisfaction": { - type: JsonSchemaType.INTEGER, - }, - "instructor": { - type: JsonSchemaType.STRING, - }, - "year": { - type: JsonSchemaType.INTEGER, - }, - "comment": { - type: JsonSchemaType.STRING, - }, - "title": { - type: JsonSchemaType.STRING, - }, - }, - required: [ - "title_jp", - "instructor_jp", - "benefit", - "difficulty", - "satisfaction", - "instructor", - "comment", - "year", - "title", - ], + data: { + type: apigw.JsonSchemaType.ARRAY, + items: { + type: apigw.JsonSchemaType.OBJECT, + properties: { + title_jp: { + type: apigw.JsonSchemaType.STRING, + }, + instructor_jp: { + type: apigw.JsonSchemaType.STRING, + }, + updated_at: { + type: apigw.JsonSchemaType.STRING, + }, + created_at: { + type: apigw.JsonSchemaType.STRING, + }, + benefit: { + type: apigw.JsonSchemaType.INTEGER, + }, + difficulty: { + type: apigw.JsonSchemaType.INTEGER, + }, + satisfaction: { + type: apigw.JsonSchemaType.INTEGER, + }, + instructor: { + type: apigw.JsonSchemaType.STRING, + }, + comment_zh_CN: { + type: apigw.JsonSchemaType.STRING, + }, + comment_en: { + type: apigw.JsonSchemaType.STRING, + }, + comment_ko: { + type: apigw.JsonSchemaType.STRING, + }, + year: { + type: apigw.JsonSchemaType.INTEGER, + }, + src_lang: { + type: apigw.JsonSchemaType.STRING, + }, + comment_ja: { + type: apigw.JsonSchemaType.STRING, + }, + comment_zh_TW: { + type: apigw.JsonSchemaType.STRING, + }, + title: { + type: apigw.JsonSchemaType.STRING, + }, + mod: { + type: apigw.JsonSchemaType.BOOLEAN, + }, }, + required: [ + 'title_jp', + 'instructor_jp', + 'updated_at', + 'created_at', + 'benefit', + 'difficulty', + 'satisfaction', + 'instructor', + 'comment_zh-CN', + 'comment_zh-TW', + 'comment_ko', + 'comment_en', + 'year', + 'src_lang', + 'comment_ja', + 'title', + 'mod', + ], + }, }, - required: [ - "data", - ], -}; - -export const courseReviewPatchReqSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.OBJECT, - properties: { - "data": { - type: JsonSchemaType.OBJECT, - properties: { - "benefit": { - type: JsonSchemaType.INTEGER, - }, - "difficulty": { - type: JsonSchemaType.INTEGER, - }, - "satisfaction": { - type: JsonSchemaType.INTEGER, - }, - "comment": { - type: JsonSchemaType.STRING, - }, - }, - required: [ - "benefit", - "difficulty", - "satisfaction", - "comment", - ], - }, + message: { + type: apigw.JsonSchemaType.STRING, }, - required: [ - "data", - ], + }, + required: [ + 'success', + 'data', + 'message', + ], }; -export const baseJsonApiSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.OBJECT, - properties: { - "success": { - type: JsonSchemaType.BOOLEAN, +export const courseReviewPostReqSchema: apigw.JsonSchema = { + schema: apigw.JsonSchemaVersion.DRAFT7, + type: apigw.JsonSchemaType.OBJECT, + properties: { + data: { + type: apigw.JsonSchemaType.OBJECT, + properties: { + title_jp: { + type: apigw.JsonSchemaType.STRING, + }, + instructor_jp: { + type: apigw.JsonSchemaType.STRING, + }, + benefit: { + type: apigw.JsonSchemaType.INTEGER, }, - "data": { - type: JsonSchemaType.NULL, + difficulty: { + type: apigw.JsonSchemaType.INTEGER, }, - "message": { - type: JsonSchemaType.STRING, + satisfaction: { + type: apigw.JsonSchemaType.INTEGER, }, + instructor: { + type: apigw.JsonSchemaType.STRING, + }, + year: { + type: apigw.JsonSchemaType.INTEGER, + }, + comment: { + type: apigw.JsonSchemaType.STRING, + }, + title: { + type: apigw.JsonSchemaType.STRING, + }, + }, + required: [ + 'title_jp', + 'instructor_jp', + 'benefit', + 'difficulty', + 'satisfaction', + 'instructor', + 'comment', + 'year', + 'title', + ], }, - required: [ - "success", - "data", - "message", - ], + }, + required: [ + 'data', + ], }; -export const articleListSchema: JsonSchema = { - schema: JsonSchemaVersion.DRAFT7, - type: JsonSchemaType.OBJECT, - properties: { - "success": { - type: JsonSchemaType.BOOLEAN, +export const courseReviewPatchReqSchema: apigw.JsonSchema = { + schema: apigw.JsonSchemaVersion.DRAFT7, + type: apigw.JsonSchemaType.OBJECT, + properties: { + data: { + type: apigw.JsonSchemaType.OBJECT, + properties: { + benefit: { + type: apigw.JsonSchemaType.INTEGER, }, - "data": { - type: JsonSchemaType.OBJECT, - properties: { - "articles": { - type: JsonSchemaType.ARRAY, - items: { - type: JsonSchemaType.OBJECT, - properties: { - "category": { - type: JsonSchemaType.STRING, - }, - "title": { - type: JsonSchemaType.STRING, - }, - "author": { - type: JsonSchemaType.STRING, - }, - "summary":{ - type: JsonSchemaType.STRING, - }, - "created_at": { - type: JsonSchemaType.STRING, - }, - "updated_at": { - type: JsonSchemaType.STRING, - }, - "src": { - type: JsonSchemaType.STRING, - }, - }, - required: [ - "category", - "title", - "author", - "summary", - "created_at", - "updated_at", - "src", - ], - }, - }, - "size": { - type: JsonSchemaType.INTEGER, - }, - }, - required: [ - "articles", - "size", - ], + difficulty: { + type: apigw.JsonSchemaType.INTEGER, }, - "message": { - type: JsonSchemaType.STRING, + satisfaction: { + type: apigw.JsonSchemaType.INTEGER, }, + comment: { + type: apigw.JsonSchemaType.STRING, + }, + }, + required: [ + 'benefit', + 'difficulty', + 'satisfaction', + 'comment', + ], }, - required: [ - "success", - "data", - "message", - ], + }, + required: [ + 'data', + ], }; -export const articlePlainJson = '{"success": true, "data": {"articles": [{"src": "https://wasedatime-blog.s3-ap-northeast-1.amazonaws.com/blogs/tests.md", "created_at": "2021-03-27 18:00:00 +0900", "update_at": "2021-04-13-05-58-09", "type": 0.0, "title": "Studying at Waseda University as a Social Science Student", "author": "Siyuan (Peter) Chai"}, {"src": "https://wasedatime-blog.s3-ap-northeast-1.amazonaws.com/blogs/tests.md", "created_at": "2021-03-27 18:00:00 +0900", "update_at": "2021-04-13-05-58-38", "type": 0.0, "title": "Studying at Waseda University as a Social Science Student", "author": "Siyuan (Peter) Chai"}, {"src": "https://wasedatime-blog.s3-ap-northeast-1.amazonaws.com/blogs/tests.md", "created_at": "2021-03-27 18:00:00 +0900", "update_at": "2021-04-13-05-58-39", "type": 0.0, "title": "Studying at Waseda University as a Social Science Student", "author": "Siyuan (Peter) Chai"}, {"src": "https://wasedatime-blog.s3-ap-northeast-1.amazonaws.com/blogs/tests.md", "created_at": "2021-03-27 18:00:00 +0900", "update_at": "2021-04-13-05-58-40", "type": 0.0, "title": "Studying at Waseda University as a Social Science Student", "author": "Siyuan (Peter) Chai"}, {"src": "https://wasedatime-blog.s3-ap-northeast-1.amazonaws.com/blogs/tests.md", "created_at": "2021-03-27 18:00:00 +0900", "update_at": "2021-04-13-06-34-41", "type": 0.0, "title": "Studying at Waseda University as a Social Science Student", "author": "Siyuan (Peter) Chai"}], "size": 5}, "message": ""}'; +export const baseJsonApiSchema: apigw.JsonSchema = { + schema: apigw.JsonSchemaVersion.DRAFT7, + type: apigw.JsonSchemaType.OBJECT, + properties: { + success: { + type: apigw.JsonSchemaType.BOOLEAN, + }, + data: { + type: apigw.JsonSchemaType.NULL, + }, + message: { + type: apigw.JsonSchemaType.STRING, + }, + }, + required: [ + 'success', + 'data', + 'message', + ], +}; -export const careerInfoSchema: JsonSchema = {}; +export const careerInfoSchema: apigw.JsonSchema = {}; diff --git a/lib/configs/budgets/enum.ts b/lib/configs/budgets/enum.ts index 4ccd6e723..9033a2702 100644 --- a/lib/configs/budgets/enum.ts +++ b/lib/configs/budgets/enum.ts @@ -1,31 +1,31 @@ export enum BudgetType { - COST = "COST", - RI_COVERAGE = "RI_COVERAGE", - RI_UTILIZATION = "RI_UTILIZATION", - SAVINGS_PLANS_COVERAGE = "SAVINGS_PLANS_COVERAGE", - SAVINGS_PLANS_UTILIZATION = "SAVINGS_PLANS_UTILIZATION", - USAGE = "USAGE" + COST = 'COST', + RI_COVERAGE = 'RI_COVERAGE', + RI_UTILIZATION = 'RI_UTILIZATION', + SAVINGS_PLANS_COVERAGE = 'SAVINGS_PLANS_COVERAGE', + SAVINGS_PLANS_UTILIZATION = 'SAVINGS_PLANS_UTILIZATION', + USAGE = 'USAGE' } export enum TimeUnit { - ANNUALLY = "ANNUALLY", - DAILY = "DAILY", - MONTHLY = "MONTHLY", - QUARTERLY = "QUARTERLY" + ANNUALLY = 'ANNUALLY', + DAILY = 'DAILY', + MONTHLY = 'MONTHLY', + QUARTERLY = 'QUARTERLY' } export enum NotificationType { - ACTUAL = "ACTUAL", - FORECASTED = "FORECASTED" + ACTUAL = 'ACTUAL', + FORECASTED = 'FORECASTED' } export enum ComparisonOperator { - EQUAL_TO = "EQUAL_TO", - GREATER_THAN = "GREATER_THAN", - LESS_THAN = "LESS_THAN" + EQUAL_TO = 'EQUAL_TO', + GREATER_THAN = 'GREATER_THAN', + LESS_THAN = 'LESS_THAN' } export enum SubscriptionType { - EMAIL = "EMAIL", - SNS = "SNS" + EMAIL = 'EMAIL', + SNS = 'SNS' } diff --git a/lib/configs/chatbot/slack.ts b/lib/configs/chatbot/slack.ts index 46d063bec..1d7a077eb 100644 --- a/lib/configs/chatbot/slack.ts +++ b/lib/configs/chatbot/slack.ts @@ -1,3 +1,3 @@ -export const SLACK_CHANNEL_ID: string = process.env.SLACK_CHANNEL_ID!; +export const SLACK_CHANNEL_ID = process.env.SLACK_CHANNEL_ID!; -export const SLACK_WORKSPACE_ID: string = process.env.SLACK_WORKSPACE_ID!; +export const SLACK_WORKSPACE_ID = process.env.SLACK_WORKSPACE_ID!; diff --git a/lib/configs/cognito/oauth.ts b/lib/configs/cognito/oauth.ts index ba1aed96b..01aed4dd4 100644 --- a/lib/configs/cognito/oauth.ts +++ b/lib/configs/cognito/oauth.ts @@ -1,7 +1,7 @@ -export const GOOGLE_OAUTH_CLIENT_ID: string = process.env.GOOGLE_OAUTH_CLIENT_ID!; +export const GOOGLE_OAUTH_CLIENT_ID = process.env.GOOGLE_OAUTH_CLIENT_ID!; -export const GOOGLE_OAUTH_CLIENT_SECRET: string = process.env.GOOGLE_OAUTH_CLIENT_SECRET!; +export const GOOGLE_OAUTH_CLIENT_SECRET = process.env.GOOGLE_OAUTH_CLIENT_SECRET!; -export const CALLBACK_URLS: string[] = ["https://wasedatime.com/verify", "https://dev.wasedatime.com/verify", "localhost:3000/verify"]; +export const CALLBACK_URLS = ['https://wasedatime.com/verify', 'https://dev.wasedatime.com/verify', 'localhost:3000/verify']; -export const LOGOUT_URLS: string[] = ["https://wasedatime.com/", "https://dev.wasedatime.com/", "localhost:3000/"]; +export const LOGOUT_URLS = ['https://wasedatime.com/', 'https://dev.wasedatime.com/', 'localhost:3000/']; diff --git a/lib/configs/common/aws.ts b/lib/configs/common/aws.ts index a4537220f..9dfc83d59 100644 --- a/lib/configs/common/aws.ts +++ b/lib/configs/common/aws.ts @@ -1,69 +1,69 @@ -import {StackProps} from "@aws-cdk/core"; +import { StackProps } from 'aws-cdk-lib'; -export const STAGE: string = process.env.STAGE!; +export const STAGE = process.env.STAGE!; export const awsEnv: StackProps = { - env: { - account: process.env.AWS_ACCOUNT_ID, - region: process.env.AWS_REGION, - }, + env: { + account: process.env.AWS_ACCOUNT_ID, + region: process.env.AWS_REGION, + }, }; export const cognitoEnv: StackProps = { - env: { - account: process.env.AWS_ACCOUNT_ID, - region: process.env.COGNITO_AFFILIATE_REGION, - }, + env: { + account: process.env.AWS_ACCOUNT_ID, + region: process.env.COGNITO_AFFILIATE_REGION, + }, }; export enum AwsServicePrincipal { - ACM = "acm.amazonaws.com", - AMAZON_MQ = "amazonmq.amazonaws.com", - AMPLIFY = "amplify.amazonaws.com", - API_GATEWAY = "apigateway.amazonaws.com", - APPSYNC = "appsync.amazonaws.com", - ATHENA = "athena.amazonaws.com", - AUTOSCALING = "autoscaling.amazonaws.com", - BUDGET = "budgets.amazonaws.com", - CLOUDFORMATION = "cloudformation.amazonaws.com", - CLOUDFRONT = "cloudfront.amazonaws.com", - CLOUDWATCH = "cloudwatch-crossaccount.amazonaws.com", - CODEBUILD = "codebuild.amazonaws.com", - COGNITO = "cognito-identity.amazonaws.com", - COGNITO_USER_POOL = "cognito-idp.amazonaws.com", - DATA_PIPELINE = "datapipeline.amazonaws.com", - DYNAMODB = "dynamodb.amazonaws.com", - DYNAMODB_AUTOSCALING = "dynamodb.application-autoscaling.amazonaws.com", - EC2 = "ec2.amazonaws.com", - EC2_AUTOSCALING = "ec2.application-autoscaling.amazonaws.com", - ECS = "ecs.amazonaws.com", - ECS_TASKS = "ecs-tasks.amazonaws.com", - EKS = "eks.amazonaws.com", - ELB = "elasticloadbalancing.amazonaws.com", - ELASTIC_BEANSTALK = "elasticbeanstalk.amazonaws.com", - EVENT_BRIDGE = "events.amazonaws.com", - IAM = "iam.amazonaws.com", - IoT = "iot.amazonaws.com", - KINESIS = "kinesis.amazonaws.com", - KINESIS_ANALYTICS = "kinesisanalytics.amazonaws.com", - KMS = "kms.amazonaws.com", - LAMBDA = "lambda.amazonaws.com", - LAMBDA_EDGE = "edgelambda.amazonaws.com", - LOGS = "logs.amazonaws.com", - PINPOINT = "pinpoint.amazonaws.com", - RDS = "rds.amazonaws.com", - ROUTE53 = "route53.amazonaws.com", - ROUTE53_DOMAIN = "route53domains.amazonaws.com", - ROUTE53_RESOLVER = "route53resolver.amazonaws.com", - S3 = "s3.amazonaws.com", - SES = "ses.amazonaws.com", - SHIELD = "shield.amazonaws.com", - SIGN_IN = "signin.amazonaws.com", - SMS = "sms.amazonaws.com", - SNS = "sns.amazonaws.com", - SQS = "sqs.amazonaws.com", - STEP_FUNCTIONS = "states.amazonaws.com", - TRANSLATE = "translate.amazonaws.com", - WAF = "waf.amazonaws.com", - XRAY = "xray.amazonaws.com" + ACM = 'acm.amazonaws.com', + AMAZON_MQ = 'amazonmq.amazonaws.com', + AMPLIFY = 'amplify.amazonaws.com', + API_GATEWAY = 'apigateway.amazonaws.com', + APPSYNC = 'appsync.amazonaws.com', + ATHENA = 'athena.amazonaws.com', + AUTOSCALING = 'autoscaling.amazonaws.com', + BUDGET = 'budgets.amazonaws.com', + CLOUDFORMATION = 'cloudformation.amazonaws.com', + CLOUDFRONT = 'cloudfront.amazonaws.com', + CLOUDWATCH = 'cloudwatch-crossaccount.amazonaws.com', + CODEBUILD = 'codebuild.amazonaws.com', + COGNITO = 'cognito-identity.amazonaws.com', + COGNITO_USER_POOL = 'cognito-idp.amazonaws.com', + DATA_PIPELINE = 'datapipeline.amazonaws.com', + DYNAMODB = 'dynamodb.amazonaws.com', + DYNAMODB_AUTOSCALING = 'dynamodb.application-autoscaling.amazonaws.com', + EC2 = 'ec2.amazonaws.com', + EC2_AUTOSCALING = 'ec2.application-autoscaling.amazonaws.com', + ECS = 'ecs.amazonaws.com', + ECS_TASKS = 'ecs-tasks.amazonaws.com', + EKS = 'eks.amazonaws.com', + ELB = 'elasticloadbalancing.amazonaws.com', + ELASTIC_BEANSTALK = 'elasticbeanstalk.amazonaws.com', + EVENT_BRIDGE = 'events.amazonaws.com', + IAM = 'iam.amazonaws.com', + IoT = 'iot.amazonaws.com', + KINESIS = 'kinesis.amazonaws.com', + KINESIS_ANALYTICS = 'kinesisanalytics.amazonaws.com', + KMS = 'kms.amazonaws.com', + LAMBDA = 'lambda.amazonaws.com', + LAMBDA_EDGE = 'edgelambda.amazonaws.com', + LOGS = 'logs.amazonaws.com', + PINPOINT = 'pinpoint.amazonaws.com', + RDS = 'rds.amazonaws.com', + ROUTE53 = 'route53.amazonaws.com', + ROUTE53_DOMAIN = 'route53domains.amazonaws.com', + ROUTE53_RESOLVER = 'route53resolver.amazonaws.com', + S3 = 's3.amazonaws.com', + SES = 'ses.amazonaws.com', + SHIELD = 'shield.amazonaws.com', + SIGN_IN = 'signin.amazonaws.com', + SMS = 'sms.amazonaws.com', + SNS = 'sns.amazonaws.com', + SQS = 'sqs.amazonaws.com', + STEP_FUNCTIONS = 'states.amazonaws.com', + TRANSLATE = 'translate.amazonaws.com', + WAF = 'waf.amazonaws.com', + XRAY = 'xray.amazonaws.com' } diff --git a/lib/configs/common/registry.ts b/lib/configs/common/registry.ts index 9f4df0125..ed03051e3 100644 --- a/lib/configs/common/registry.ts +++ b/lib/configs/common/registry.ts @@ -1,18 +1,18 @@ export enum ServiceEndpoint { - API_REST, - AUTH, - API_GRAPHQL + API_REST, + AUTH, + API_GRAPHQL } export const enum DataEndpoint { - SYLLABUS, - COURSE_REVIEWS, - CAREER, - TIMETABLE, - COURSE, + SYLLABUS, + COURSE_REVIEWS, + CAREER, + TIMETABLE, + COURSE, } export enum OperationEndpoint { - APP, - SYLLABUS + APP, + SYLLABUS } diff --git a/lib/configs/event/schedule.ts b/lib/configs/event/schedule.ts index c13404e69..535fcda51 100644 --- a/lib/configs/event/schedule.ts +++ b/lib/configs/event/schedule.ts @@ -1,26 +1,26 @@ -import {Schedule} from "@aws-cdk/aws-events"; +import * as events from 'aws-cdk-lib/aws-events'; -export const syllabusSchedule: { [name: string]: Schedule } = { - 'regular': - Schedule.cron({minute: '0', hour: '16', day: '1', month: '*', year: '*'}), - 'fall-pre': - Schedule.cron({minute: '0', hour: '16', day: '19,21,23', month: 'JUL,AUG', year: '*'}), - 'fall-reg1': - Schedule.cron({minute: '0', hour: '16', day: '4,7,10,13,15,17', month: 'SEP', year: '*'}), - 'fall-reg2': - Schedule.cron({minute: '0', hour: '16', day: '20,23,25', month: 'SEP', year: '*'}), - 'fall-reg3': - Schedule.cron({minute: '0', hour: '16', day: '28,30', month: 'SEP', year: '*'}), - 'fall-reg4': - Schedule.cron({minute: '0', hour: '16', day: '3,5,8', month: 'OCT', year: '*'}), - 'spring-pre': - Schedule.cron({minute: '0', hour: '16', day: '14,24', month: 'FEB', year: '*'}), - 'spring-reg1': - Schedule.cron({minute: '0', hour: '16', day: '4,7,10,13,16,18,21,24,27', month: 'MAR', year: '*'}), - 'spring-reg2': - Schedule.cron({minute: '0', hour: '16', day: '3,5,8', month: 'APR', year: '*'}), - 'spring-reg3': - Schedule.cron({minute: '0', hour: '16', day: '16,20,24,26,28', month: 'APR', year: '*'}), - 'spring-reg4': - Schedule.cron({minute: '0', hour: '16', day: '9,12,14,16', month: 'MAY', year: '*'}), +export const syllabusSchedule: { [name: string]: events.Schedule } = { + 'regular': + events.Schedule.cron({ minute: '0', hour: '16', day: '1', month: '*', year: '*' }), + 'fall-pre': + events.Schedule.cron({ minute: '0', hour: '16', day: '19,21,23', month: 'JUL,AUG', year: '*' }), + 'fall-reg1': + events.Schedule.cron({ minute: '0', hour: '16', day: '4,7,10,13,15,17', month: 'SEP', year: '*' }), + 'fall-reg2': + events.Schedule.cron({ minute: '0', hour: '16', day: '20,23,25', month: 'SEP', year: '*' }), + 'fall-reg3': + events.Schedule.cron({ minute: '0', hour: '16', day: '28,30', month: 'SEP', year: '*' }), + 'fall-reg4': + events.Schedule.cron({ minute: '0', hour: '16', day: '3,5,8', month: 'OCT', year: '*' }), + 'spring-pre': + events.Schedule.cron({ minute: '0', hour: '16', day: '14,24', month: 'FEB', year: '*' }), + 'spring-reg1': + events.Schedule.cron({ minute: '0', hour: '16', day: '4,7,10,13,16,18,21,24,27', month: 'MAR', year: '*' }), + 'spring-reg2': + events.Schedule.cron({ minute: '0', hour: '16', day: '3,5,8', month: 'APR', year: '*' }), + 'spring-reg3': + events.Schedule.cron({ minute: '0', hour: '16', day: '16,20,24,26,28', month: 'APR', year: '*' }), + 'spring-reg4': + events.Schedule.cron({ minute: '0', hour: '16', day: '9,12,14,16', month: 'MAY', year: '*' }), }; diff --git a/lib/configs/lambda/environment.ts b/lib/configs/lambda/environment.ts index c30ab9c47..84b24c606 100644 --- a/lib/configs/lambda/environment.ts +++ b/lib/configs/lambda/environment.ts @@ -1,3 +1,3 @@ -export const GOOGLE_API_SERVICE_ACCOUNT_INFO: string = process.env.GOOGLE_API_SERVICE_ACCOUNT_INFO!; +export const GOOGLE_API_SERVICE_ACCOUNT_INFO = process.env.GOOGLE_API_SERVICE_ACCOUNT_INFO!; -export const SLACK_WEBHOOK_URL: string = process.env.SLACK_WEBHOOK_URL!; +export const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_URL!; diff --git a/lib/configs/route53/domain.ts b/lib/configs/route53/domain.ts index a607fc20c..8281e711c 100644 --- a/lib/configs/route53/domain.ts +++ b/lib/configs/route53/domain.ts @@ -1,18 +1,18 @@ -export const ROOT_DOMAIN: string = "wasedatime.com"; +export const ROOT_DOMAIN = 'wasedatime.com'; -export const API_DOMAIN: string = "api.wasedatime.com"; +export const API_DOMAIN = 'api.wasedatime.com'; -export const AUTH_DOMAIN: string = "auth.wasedatime.com"; +export const AUTH_DOMAIN = 'auth.wasedatime.com'; -export const ES_DOMAIN: string = "elastic.wasedatime.com"; +export const ES_DOMAIN = 'elastic.wasedatime.com'; -export const DOC_DOMAIN: string = "docs.wasedatime.com"; +export const DOC_DOMAIN = 'docs.wasedatime.com'; -export const GITHUB_PAGES = "wasedatime.github.io"; +export const GITHUB_PAGES = 'wasedatime.github.io'; export const MX_VALUES = [ - {priority: 10, hostName: "mx1.forwardemail.net"}, - {priority: 10, hostName: "mx2.forwardemail.net"}, + { priority: 10, hostName: 'mx1.forwardemail.net' }, + { priority: 10, hostName: 'mx2.forwardemail.net' }, ]; -export const EMAIL_TXT = ["v=spf1 a mx include:spf.forwardemail.net -all", "forward-email=wasedatime@gmail.com"]; +export const EMAIL_TXT = ['v=spf1 a mx include:spf.forwardemail.net -all', 'forward-email=wasedatime@gmail.com']; diff --git a/lib/configs/s3/access-setting.ts b/lib/configs/s3/access-setting.ts index 510582ecd..84f3fb66b 100644 --- a/lib/configs/s3/access-setting.ts +++ b/lib/configs/s3/access-setting.ts @@ -1,8 +1,8 @@ -import {BlockPublicAccess} from "@aws-cdk/aws-s3"; +import * as s3 from 'aws-cdk-lib/aws-s3'; -export const publicAccess: BlockPublicAccess = new BlockPublicAccess({ - blockPublicAcls: false, - blockPublicPolicy: false, - ignorePublicAcls: false, - restrictPublicBuckets: false, +export const publicAccess = new s3.BlockPublicAccess({ + blockPublicAcls: false, + blockPublicPolicy: false, + ignorePublicAcls: false, + restrictPublicBuckets: false, }); diff --git a/lib/configs/s3/cors.ts b/lib/configs/s3/cors.ts index 1741240da..8436a5910 100644 --- a/lib/configs/s3/cors.ts +++ b/lib/configs/s3/cors.ts @@ -1,6 +1,6 @@ -import {CorsRule, HttpMethods} from "@aws-cdk/aws-s3"; +import * as s3 from 'aws-cdk-lib/aws-s3'; -export const prodCorsRule: CorsRule[] = [{ - allowedMethods: [HttpMethods.GET, HttpMethods.HEAD], - allowedOrigins: ["https://wasedatime.com", "https://*.wasedatime.com"], +export const prodCorsRule: s3.CorsRule[] = [{ + allowedMethods: [s3.HttpMethods.GET, s3.HttpMethods.HEAD], + allowedOrigins: ['https://wasedatime.com', 'https://*.wasedatime.com'], }]; diff --git a/lib/configs/step-functions/definition.ts b/lib/configs/step-functions/definition.ts deleted file mode 100644 index 6d490f1fe..000000000 --- a/lib/configs/step-functions/definition.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const SCRAPER_TASKS = [ - ["GEC"], - ["CMS", "HSS"], - ["EDU", "FSE"], - ["ASE", "CSE"], - ["PSE", "G_ASE", "LAW"], - ["G_FSE", "SOC", "SSS"], - ["G_LAS", "G_CSE", "G_EDU", "HUM"], - ["SILS", "G_HUM", "CJL", "SPS", "G_WBS", "G_PS"], - ["G_SPS", "G_IPS", "G_WLS", "G_E", "G_SSS", "G_SC", "G_LAW", "G_SAPS", "G_SA", "G_SJAL", "G_SICCS", "G_SEEE", - "EHUM", "ART", "CIE", "G_ITS"], -]; diff --git a/lib/configs/step-functions/tasks.ts b/lib/configs/step-functions/tasks.ts new file mode 100644 index 000000000..f29da17ab --- /dev/null +++ b/lib/configs/step-functions/tasks.ts @@ -0,0 +1,12 @@ +export const SCRAPER_TASKS = [ + ['GEC'], + ['CMS', 'HSS'], + ['EDU', 'FSE'], + ['ASE', 'CSE'], + ['PSE', 'G_ASE', 'LAW'], + ['G_FSE', 'SOC', 'SSS'], + ['G_LAS', 'G_CSE', 'G_EDU', 'HUM'], + ['SILS', 'G_HUM', 'CJL', 'SPS', 'G_WBS', 'G_PS'], + ['G_SPS', 'G_IPS', 'G_WLS', 'G_E', 'G_SSS', 'G_SC', 'G_LAW', 'G_SAPS', 'G_SA', 'G_SJAL', 'G_SICCS', 'G_SEEE', + 'EHUM', 'ART', 'CIE', 'G_ITS'], +]; diff --git a/lib/constructs/admin/budget.ts b/lib/constructs/admin/budget.ts index 1bd86dfd0..fd14b9f65 100644 --- a/lib/constructs/admin/budget.ts +++ b/lib/constructs/admin/budget.ts @@ -1,259 +1,264 @@ -import * as cdk from '@aws-cdk/core'; -import {CfnBudget} from '@aws-cdk/aws-budgets'; -import {Topic} from "@aws-cdk/aws-sns"; -import {Effect, PolicyStatement, ServicePrincipal} from "@aws-cdk/aws-iam"; +import * as budgets from 'aws-cdk-lib/aws-budgets'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as sns from 'aws-cdk-lib/aws-sns'; +import { Construct } from 'constructs'; +import { + BudgetType, + ComparisonOperator, + NotificationType, + SubscriptionType, + TimeUnit, +} from '../../configs/budgets/enum'; +import { AwsServicePrincipal } from '../../configs/common/aws'; -import {BudgetType, ComparisonOperator, NotificationType, SubscriptionType, TimeUnit} from "../../configs/budgets/enum"; -import {AwsServicePrincipal} from "../../configs/common/aws"; +export abstract class AbstractBudgetGroup extends Construct { + abstract readonly notification: sns.Topic; -export abstract class AbstractBudgetGroup extends cdk.Construct { - abstract readonly notification: Topic; - - protected constructor(scope: cdk.Construct, id: string) { - super(scope, id); - } + protected constructor(scope: Construct, id: string) { + super(scope, id); + } } export class FreeTierUsageBudget extends AbstractBudgetGroup { - readonly notification: Topic; + readonly notification: sns.Topic; - constructor(scope: cdk.Construct, id: string) { - super(scope, id); + constructor(scope: Construct, id: string) { + super(scope, id); - this.notification = new Topic(this, 'budget-notification-topic', { - topicName: "free-tier-budgets", - }); - this.notification.addToResourcePolicy(new PolicyStatement({ - sid: "AWSBudgetsSNSPublishingPermissions", - effect: Effect.ALLOW, - principals: [new ServicePrincipal(AwsServicePrincipal.BUDGET)], - actions: ["SNS:Publish"], - resources: [this.notification.topicArn], - })); + this.notification = new sns.Topic(this, 'budget-notification-topic', { + topicName: 'free-tier-budgets', + }); + this.notification.addToResourcePolicy(new iam.PolicyStatement({ + sid: 'AWSBudgetsSNSPublishingPermissions', + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal(AwsServicePrincipal.BUDGET)], + actions: ['SNS:Publish'], + resources: [this.notification.topicArn], + })); - const subscribers = [{ - subscriptionType: SubscriptionType.EMAIL, - address: "admin@wasedatime.com", - }, { - subscriptionType: SubscriptionType.SNS, - address: this.notification.topicArn, - }]; + const subscribers = [{ + subscriptionType: SubscriptionType.EMAIL, + address: 'admin@wasedatime.com', + }, { + subscriptionType: SubscriptionType.SNS, + address: this.notification.topicArn, + }]; - const criteria = [{ - notification: { - notificationType: NotificationType.ACTUAL, - threshold: 80, - comparisonOperator: ComparisonOperator.GREATER_THAN, - }, - subscribers: subscribers, - }]; + const criteria = [{ + notification: { + notificationType: NotificationType.ACTUAL, + threshold: 80, + comparisonOperator: ComparisonOperator.GREATER_THAN, + }, + subscribers: subscribers, + }]; - new CfnBudget(this, 'amplify-build-time', { - budget: { - budgetName: "Amplify Build Time", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 1000, - unit: 'Minutes', - }, - costFilters: { - "UsageType:AWS Amplify": ["APN1-BuildDuration"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'amplify-build-time', { + budget: { + budgetName: 'Amplify Build Time', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 1000, + unit: 'Minutes', + }, + costFilters: { + 'UsageType:AWS Amplify': ['APN1-BuildDuration'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'lambda-runtime', { - budget: { - budgetName: "Lambda Runtime", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 400000, - unit: 'Second', - }, - costFilters: { - "UsageType:AWS Lambda": ["APN1-Lambda-GB-Second"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'lambda-runtime', { + budget: { + budgetName: 'Lambda Runtime', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 400000, + unit: 'Second', + }, + costFilters: { + 'UsageType:AWS Lambda': ['APN1-Lambda-GB-Second'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'lambda-requests', { - budget: { - budgetName: "Lambda Requests", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 1000000, - unit: 'Requests', - }, - costFilters: { - "UsageType:AWS Lambda": ["APN1-Request"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'lambda-requests', { + budget: { + budgetName: 'Lambda Requests', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 1000000, + unit: 'Requests', + }, + costFilters: { + 'UsageType:AWS Lambda': ['APN1-Request'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'data-out', { - budget: { - budgetName: "Data Transfer Out", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 15, - unit: 'GB', - }, - costFilters: { - "UsageType": ["APN1-DataTransfer-Out-Bytes"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'data-out', { + budget: { + budgetName: 'Data Transfer Out', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 15, + unit: 'GB', + }, + costFilters: { + UsageType: ['APN1-DataTransfer-Out-Bytes'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'api-gateway-requests', { - budget: { - budgetName: "API Gateway Requests", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 1000000, - unit: 'APN1-ApiGatewayRequest', - }, - costFilters: { - "UsageType:Amazon API Gateway": ["APN1-ApiGatewayRequest"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'api-gateway-requests', { + budget: { + budgetName: 'API Gateway Requests', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 1000000, + unit: 'APN1-ApiGatewayRequest', + }, + costFilters: { + 'UsageType:Amazon API Gateway': ['APN1-ApiGatewayRequest'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 's3-storage', { - budget: { - budgetName: "S3 Storage", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 5, - unit: 'GB', - }, - costFilters: { - "UsageType:Amazon Simple Storage Service": ["APN1-TimedStorage-ByteHrs"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 's3-storage', { + budget: { + budgetName: 'S3 Storage', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 5, + unit: 'GB', + }, + costFilters: { + 'UsageType:Amazon Simple Storage Service': ['APN1-TimedStorage-ByteHrs'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 's3-requests-tier1', { - budget: { - budgetName: "S3 Requests Tier1", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 2000, - unit: 'Requests', - }, - costFilters: { - "UsageType:Amazon Simple Storage Service": ["APN1-Requests-Tier1"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 's3-requests-tier1', { + budget: { + budgetName: 'S3 Requests Tier1', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 2000, + unit: 'Requests', + }, + costFilters: { + 'UsageType:Amazon Simple Storage Service': ['APN1-Requests-Tier1'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 's3-requests-tier2', { - budget: { - budgetName: "S3 Requests Tier2", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 20000, - unit: 'Requests', - }, - costFilters: { - "UsageType:Amazon Simple Storage Service": ["APN1-Requests-Tier2"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 's3-requests-tier2', { + budget: { + budgetName: 'S3 Requests Tier2', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 20000, + unit: 'Requests', + }, + costFilters: { + 'UsageType:Amazon Simple Storage Service': ['APN1-Requests-Tier2'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'dynamodb-storage', { - budget: { - budgetName: "DynamoDB Storage", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 25, - unit: 'GB-Month', - }, - costFilters: { - "UsageType:Amazon DynamoDB": ["APN1-TimedStorage-ByteHrs"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'dynamodb-storage', { + budget: { + budgetName: 'DynamoDB Storage', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 25, + unit: 'GB-Month', + }, + costFilters: { + 'UsageType:Amazon DynamoDB': ['APN1-TimedStorage-ByteHrs'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'cognito-user-pool', { - budget: { - budgetName: "Cognito User Pool Requests", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 50000, - unit: 'Requests', - }, - costFilters: { - "UsageType:Amazon Cognito": ["APN1-CognitoUserPoolsMAU"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'cognito-user-pool', { + budget: { + budgetName: 'Cognito User Pool Requests', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 50000, + unit: 'Requests', + }, + costFilters: { + 'UsageType:Amazon Cognito': ['APN1-CognitoUserPoolsMAU'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'kms-request', { - budget: { - budgetName: "KMS Requests", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 20000, - unit: 'Requests', - }, - costFilters: { - "UsageType:AWS Key Management Service": ["ap-northeast-1-KMS-Requests"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'kms-request', { + budget: { + budgetName: 'KMS Requests', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 20000, + unit: 'Requests', + }, + costFilters: { + 'UsageType:AWS Key Management Service': ['ap-northeast-1-KMS-Requests'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'sns-http-notification', { - budget: { - budgetName: "SNS Notifications", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 20000, - unit: 'Notifications', - }, - costFilters: { - "UsageType:Amazon Simple Notification Service": ["APN1-DeliveryAttempts-HTTP"], - }, - }, - notificationsWithSubscribers: criteria, - }); + new budgets.CfnBudget(this, 'sns-http-notification', { + budget: { + budgetName: 'SNS Notifications', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 20000, + unit: 'Notifications', + }, + costFilters: { + 'UsageType:Amazon Simple Notification Service': ['APN1-DeliveryAttempts-HTTP'], + }, + }, + notificationsWithSubscribers: criteria, + }); - new CfnBudget(this, 'state-machine-transitions', { - budget: { - budgetName: "State Transitions", - budgetType: BudgetType.USAGE, - timeUnit: TimeUnit.MONTHLY, - budgetLimit: { - amount: 4000, - unit: 'StateTransitions', - }, - costFilters: { - "UsageType:AWS Step Functions": ["APN1-StateTransition"], - }, - }, - notificationsWithSubscribers: criteria, - }); - } + new budgets.CfnBudget(this, 'state-machine-transitions', { + budget: { + budgetName: 'State Transitions', + budgetType: BudgetType.USAGE, + timeUnit: TimeUnit.MONTHLY, + budgetLimit: { + amount: 4000, + unit: 'StateTransitions', + }, + costFilters: { + 'UsageType:AWS Step Functions': ['APN1-StateTransition'], + }, + }, + notificationsWithSubscribers: criteria, + }); + } } diff --git a/lib/constructs/admin/log.ts b/lib/constructs/admin/log.ts index 4877ea31d..3aed236cd 100644 --- a/lib/constructs/admin/log.ts +++ b/lib/constructs/admin/log.ts @@ -1,12 +1,11 @@ -import '@aws-cdk/aws-cloudtrail'; -import * as cdk from '@aws-cdk/core'; -import {Trail} from "@aws-cdk/aws-cloudtrail"; +import * as cloudtrail from 'aws-cdk-lib/aws-cloudtrail'; +import { Construct } from 'constructs'; -export class GlobalTrailLogs extends cdk.Construct { - constructor(scope: cdk.Construct, id: string) { - super(scope, id); - new Trail(this, 'trail', { - trailName: "global-management-trail", - }); - } +export class GlobalTrailLogs extends Construct { + constructor(scope: Construct, id: string) { + super(scope, id); + new cloudtrail.Trail(this, 'trail', { + trailName: 'global-management-trail', + }); + } } diff --git a/lib/constructs/admin/status-notifier.ts b/lib/constructs/admin/status-notifier.ts index 13ed818a4..836a30d07 100644 --- a/lib/constructs/admin/status-notifier.ts +++ b/lib/constructs/admin/status-notifier.ts @@ -1,109 +1,101 @@ -import * as cdk from '@aws-cdk/core'; -import {Construct} from '@aws-cdk/core'; -import {Rule} from "@aws-cdk/aws-events"; -import {Topic} from "@aws-cdk/aws-sns"; -import {LambdaFunction} from "@aws-cdk/aws-events-targets"; -import {Function} from '@aws-cdk/aws-lambda'; - -import {AmplifyStatusPublisher, ScraperStatusPublisher} from "../common/lambda-functions"; +import * as events from 'aws-cdk-lib/aws-events'; +import * as events_targets from 'aws-cdk-lib/aws-events-targets'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as sns from 'aws-cdk-lib/aws-sns'; +import { Construct } from 'constructs'; +import { AmplifyStatusPublisher, ScraperStatusPublisher } from '../common/lambda-functions'; export enum StatusNotifier { - BUILD_STATUS, - SCRAPER_STATUS + BUILD_STATUS, + SCRAPER_STATUS } export interface StatusNotifierProps { - targets?: { [key: string]: string }; + targets: { [key: string]: string }; } export abstract class AbstractStatusNotifier extends Construct { - abstract readonly publisher: Rule; - - abstract readonly topic?: Topic; + abstract readonly publisher: events.Rule; + abstract readonly topic?: sns.Topic; + abstract readonly subscriber: lambda.Function; - abstract readonly subscriber: Function; - - protected constructor(scope: cdk.Construct, id: string, props: StatusNotifierProps) { - super(scope, id); - } + protected constructor(scope: Construct, id: string, props: StatusNotifierProps) { + super(scope, id); + } } export class AmplifyBuildStatusNotifier extends AbstractStatusNotifier { - readonly publisher: Rule; - - readonly topic?: Topic; - - readonly subscriber: Function; - - constructor(scope: cdk.Construct, id: string, props: StatusNotifierProps) { - super(scope, id, props); - - const subscriber = new AmplifyStatusPublisher(this, 'subscriber-function').baseFunction; - subscriber.addEnvironment('APP_ENDPOINTS', JSON.stringify(props.targets)); - this.subscriber = subscriber; - - this.publisher = new Rule(this, 'build-sentinel', { - ruleName: "amplify-build-event", - description: "Triggered on Amplify build", - enabled: true, - eventPattern: { - source: [ - "aws.amplify", - ], - detailType: [ - "Amplify Deployment Status Change", - ], - detail: { - "appId": Object.keys(props.targets!), - "jobStatus": [ - "SUCCEED", - "FAILED", - "STARTED", - ], - }, - }, - }); - - this.publisher.addTarget(new LambdaFunction(this.subscriber)); - } + readonly publisher: events.Rule; + readonly topic?: sns.Topic; + readonly subscriber: lambda.Function; + + constructor(scope: Construct, id: string, props: StatusNotifierProps) { + super(scope, id, props); + + const subscriber = new AmplifyStatusPublisher(this, 'subscriber-function').baseFunction; + subscriber.addEnvironment('APP_ENDPOINTS', JSON.stringify(props.targets)); + this.subscriber = subscriber; + + this.publisher = new events.Rule(this, 'build-sentinel', { + ruleName: 'amplify-build-event', + description: 'Triggered on Amplify build', + enabled: true, + eventPattern: { + source: [ + 'aws.amplify', + ], + detailType: [ + 'Amplify Deployment Status Change', + ], + detail: { + appId: Object.keys(props.targets), + jobStatus: [ + 'SUCCEED', + 'FAILED', + 'STARTED', + ], + }, + }, + }); + + this.publisher.addTarget(new events_targets.LambdaFunction(this.subscriber)); + } } export class SyllabusScraperStatusNotifier extends AbstractStatusNotifier { - readonly publisher: Rule; - - readonly topic?: Topic; - - readonly subscriber: Function; - - constructor(scope: cdk.Construct, id: string, props: StatusNotifierProps) { - super(scope, id, props); - - this.subscriber = new ScraperStatusPublisher(this, 'subscriber-function').baseFunction; - - this.publisher = new Rule(this, 'scraper-status', { - ruleName: "scraper-exec-event", - description: "Scraper Status", - enabled: true, - eventPattern: { - source: [ - "aws.states", - ], - detailType: [ - "Step Functions Execution Status Change", - ], - detail: { - "status": [ - "RUNNING", - "SUCCEEDED", - "FAILED", - "TIMED_OUT", - "ABORTED", - ], - "stateMachineArn": Object.keys(props.targets!), - }, - }, - }); - - this.publisher.addTarget(new LambdaFunction(this.subscriber)); - } + readonly publisher: events.Rule; + readonly topic?: sns.Topic; + readonly subscriber: lambda.Function; + + constructor(scope: Construct, id: string, props: StatusNotifierProps) { + super(scope, id, props); + + this.subscriber = new ScraperStatusPublisher(this, 'subscriber-function').baseFunction; + + this.publisher = new events.Rule(this, 'scraper-status', { + ruleName: 'scraper-exec-event', + description: 'Scraper Status', + enabled: true, + eventPattern: { + source: [ + 'aws.states', + ], + detailType: [ + 'Step Functions Execution Status Change', + ], + detail: { + status: [ + 'RUNNING', + 'SUCCEEDED', + 'FAILED', + 'TIMED_OUT', + 'ABORTED', + ], + stateMachineArn: Object.keys(props.targets), + }, + }, + }); + + this.publisher.addTarget(new events_targets.LambdaFunction(this.subscriber)); + } } diff --git a/lib/constructs/business/api-endpoint.ts b/lib/constructs/business/api-endpoint.ts index b77273df4..1af9f7bce 100644 --- a/lib/constructs/business/api-endpoint.ts +++ b/lib/constructs/business/api-endpoint.ts @@ -1,275 +1,268 @@ -import * as cdk from "@aws-cdk/core"; -import {Duration, Expiration} from "@aws-cdk/core"; -import * as rest from "@aws-cdk/aws-apigateway"; -import {HttpApi} from "@aws-cdk/aws-apigatewayv2"; -import * as gql from "@aws-cdk/aws-appsync"; -import {AuthorizationMode, FieldLogLevel, GraphqlApi} from "@aws-cdk/aws-appsync"; -import {Certificate, CertificateValidation} from "@aws-cdk/aws-certificatemanager"; -import {ARecord, IHostedZone, RecordTarget} from "@aws-cdk/aws-route53"; -import {ApiGatewayDomain} from "@aws-cdk/aws-route53-targets"; -import {Table} from "@aws-cdk/aws-dynamodb"; -import {IUserPool} from "@aws-cdk/aws-cognito"; +import * as apigw2 from '@aws-cdk/aws-apigatewayv2-alpha'; +import * as appsync from '@aws-cdk/aws-appsync-alpha'; +import { Duration, Expiration } from 'aws-cdk-lib'; +import * as apigw from 'aws-cdk-lib/aws-apigateway'; +import * as acm from 'aws-cdk-lib/aws-certificatemanager'; +import * as cognito from 'aws-cdk-lib/aws-cognito'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import * as route53 from 'aws-cdk-lib/aws-route53'; +import * as route53_targets from 'aws-cdk-lib/aws-route53-targets'; +import { Construct } from 'constructs'; import * as flatted from 'flatted'; - -import {AbstractRestApiService} from "./rest-api-service"; -import {apiServiceMap} from "./service"; -import {AbstractGraphqlApiService} from "./graphql-api-service"; -import {STAGE} from "../../configs/common/aws"; -import {defaultHeaders} from "../../configs/api-gateway/cors"; -import {API_DOMAIN} from "../../configs/route53/domain"; -import {AbstractHttpApiService} from "./http-api-service"; +import { defaultHeaders } from '../../configs/api-gateway/cors'; +import { STAGE } from '../../configs/common/aws'; +import { API_DOMAIN } from '../../configs/route53/domain'; +import { GraphqlApiService } from './graphql-api-service'; +import { AbstractHttpApiService } from './http-api-service'; +import { RestApiService } from './rest-api-service'; +import { GraphqlApiServiceId, graphqlApiServiceMap, RestApiServiceId, restApiServiceMap } from './service'; export interface ApiEndpointProps { - zone: IHostedZone; - - authProvider?: IUserPool; + zone: route53.IHostedZone; + authProvider?: cognito.IUserPool; } -export abstract class AbstractApiEndpoint extends cdk.Construct { - abstract readonly apiEndpoint: rest.RestApi | rest.LambdaRestApi | rest.SpecRestApi | HttpApi | GraphqlApi; +export abstract class AbstractApiEndpoint extends Construct { + abstract readonly apiEndpoint: apigw.RestApi | apigw.LambdaRestApi | apigw.SpecRestApi | apigw2.HttpApi | appsync.GraphqlApi; - protected constructor(scope: cdk.Construct, id: string, props?: ApiEndpointProps) { - super(scope, id); - } + protected constructor(scope: Construct, id: string, props?: ApiEndpointProps) { + super(scope, id); + } } export abstract class AbstractRestApiEndpoint extends AbstractApiEndpoint { - readonly apiEndpoint: rest.RestApi; - - abstract readonly apiServices: { [name: string]: AbstractRestApiService }; + readonly apiEndpoint: apigw.RestApi; + abstract readonly apiServices: { [name: string]: RestApiService }; + abstract readonly stages: { [name: string]: apigw.Stage }; - abstract readonly stages: { [name: string]: rest.Stage }; + protected authorizer: apigw.IAuthorizer; + protected reqValidator: apigw.RequestValidator; + protected domain: apigw.DomainName; - protected authorizer: rest.IAuthorizer; + protected constructor(scope: Construct, id: string, props: ApiEndpointProps) { + super(scope, id, props); + } - protected reqValidator: rest.RequestValidator; + public getDomain(): string { + const domainName: apigw.DomainName | undefined = this.apiEndpoint.domainName; - protected domain: rest.DomainName; - - protected constructor(scope: cdk.Construct, id: string, props: ApiEndpointProps) { - super(scope, id, props); + if (typeof domainName === 'undefined') { + throw RangeError('Domain not configured for this API endpoint.'); } - - public getDomain(): string { - const domainName: rest.DomainName | undefined = this.apiEndpoint.domainName; - - if (typeof domainName === "undefined") { - throw RangeError("Domain not configured for this API endpoint."); - } - return domainName.domainName; - } - - public addService(name: string, dataSource?: string, auth: boolean = false): this { - this.apiServices[name] = new apiServiceMap[name](this, `${name}-api`, { - dataSource: dataSource, - authorizer: auth ? this.authorizer : undefined, - validator: this.reqValidator, - }); - return this; - } - - public abstract deploy(): void + return domainName.domainName; + } + + public addService(name: RestApiServiceId, dataSource?: string, auth = false): this { + this.apiServices[name] = new restApiServiceMap[name](this, `${ name }-api`, { + dataSource: dataSource, + authorizer: auth ? this.authorizer : undefined, + validator: this.reqValidator, + }); + return this; + } + + public abstract deploy(): void } export abstract class AbstractGraphqlEndpoint extends AbstractApiEndpoint { - abstract readonly apiEndpoint: GraphqlApi; + abstract readonly apiEndpoint: appsync.GraphqlApi; - readonly apiServices: { [name: string]: AbstractGraphqlApiService }; + readonly apiServices: { [name: string]: GraphqlApiService }; - protected authMode: { [mode: string]: AuthorizationMode } = {}; + protected authMode: { [mode: string]: appsync.AuthorizationMode } = {}; - protected constructor(scope: cdk.Construct, id: string, props: ApiEndpointProps) { - super(scope, id, props); - } + protected constructor(scope: Construct, id: string, props: ApiEndpointProps) { + super(scope, id, props); + } - public addService(name: string, dataSource: string, auth: string = 'apiKey'): this { - this.apiServices[name] = new apiServiceMap[name](this, `${name}-api`, { - dataSource: Table.fromTableName(this, `${name}-table`, dataSource), - auth: this.authMode[auth], - }); - return this; - } + public addService(name: GraphqlApiServiceId, dataSource: string, auth = 'apiKey'): this { + this.apiServices[name] = new graphqlApiServiceMap[name](this, `${ name }-api`, { + dataSource: dynamodb.Table.fromTableName(this, `${ name }-table`, dataSource), + auth: this.authMode[auth], + }); + return this; + } - public getDomain(): string { - const domain = this.apiEndpoint.graphqlUrl.match(/https:\/\/(.*)\/graphql/g); - if (domain === null) { - return ""; - } - return domain[1]; + public getDomain(): string { + const domain = this.apiEndpoint.graphqlUrl.match(/https:\/\/(.*)\/graphql/g); + if (domain === null) { + return ''; } + return domain[1]; + } } export abstract class AbstractHttpApiEndpoint extends AbstractApiEndpoint { - abstract readonly apiEndpoint: HttpApi; + abstract readonly apiEndpoint: apigw2.HttpApi; - abstract readonly apiServices: { [name: string]: AbstractHttpApiService }; + abstract readonly apiServices: { [name: string]: AbstractHttpApiService }; - protected constructor(scope: cdk.Construct, id: string, props: ApiEndpointProps) { - super(scope, id, props); - } + protected constructor(scope: Construct, id: string, props: ApiEndpointProps) { + super(scope, id, props); + } } /** * The REST API Endpoint of WasedaTime */ export class WasedaTimeRestApiEndpoint extends AbstractRestApiEndpoint { - /** - * REST API Gateway entity - */ - readonly apiEndpoint: rest.RestApi; - /** - * Services provided by this API - */ - readonly apiServices: { [name: string]: AbstractRestApiService } = {}; - /** - * Stages of this API - */ - readonly stages: { [name: string]: rest.Stage } = {}; - - constructor(scope: cdk.Construct, id: string, props: ApiEndpointProps) { - super(scope, id, props); - - this.apiEndpoint = new rest.RestApi(this, 'rest-api', { - restApiName: "wasedatime-rest-api", - description: "The main API endpoint for WasedaTime Web App.", - endpointTypes: [rest.EndpointType.REGIONAL], - deploy: false, - binaryMediaTypes: ['application/pdf', 'image/png'], - }); - this.apiEndpoint.addGatewayResponse('4xx-resp', { - type: rest.ResponseType.DEFAULT_4XX, - responseHeaders: defaultHeaders, - }); - this.apiEndpoint.addGatewayResponse('5xx-resp', { - type: rest.ResponseType.DEFAULT_5XX, - responseHeaders: defaultHeaders, - }); - - // Authorizer for methods that requires user login - this.authorizer = { - authorizerId: new rest.CfnAuthorizer(this, 'cognito-authorizer', { - name: 'cognito-authorizer', - identitySource: 'method.request.header.Authorization', - providerArns: [props.authProvider!.userPoolArn], - restApiId: this.apiEndpoint.restApiId, - type: rest.AuthorizationType.COGNITO, - }).ref, - authorizationType: rest.AuthorizationType.COGNITO, - }; - // Request Validator - this.reqValidator = new rest.RequestValidator(this, 'req-validator', { - restApi: this.apiEndpoint, - requestValidatorName: "strict-validator", - validateRequestBody: true, - validateRequestParameters: true, - }); - - // API Domain - const cert = new Certificate(this, 'api-cert', { - domainName: API_DOMAIN, - validation: CertificateValidation.fromDns(props.zone), - }); - this.domain = this.apiEndpoint.addDomainName('domain', { - certificate: cert, - domainName: API_DOMAIN, - endpointType: rest.EndpointType.REGIONAL, - securityPolicy: rest.SecurityPolicy.TLS_1_2, - }); - new ARecord(this, 'alias-record', { - zone: props.zone, - target: RecordTarget.fromAlias(new ApiGatewayDomain(this.domain)), - recordName: API_DOMAIN, - }); - } - - public deploy() { - // Deployments - const prodDeployment = new rest.Deployment(this, 'prod-deployment', { - api: this.apiEndpoint, - retainDeployments: false, - }); - const devDeployment = new rest.Deployment(this, 'dev-deployment', { - api: this.apiEndpoint, - retainDeployments: false, - }); - const hash = Buffer.from(flatted.stringify(this.apiServices), 'binary').toString('base64'); - if (STAGE === 'dev') { - devDeployment.addToLogicalId(hash); - } else if (STAGE === 'prod') { - prodDeployment.addToLogicalId(hash); - } - // Stages - this.stages['prod'] = new rest.Stage(this, 'prod-stage', { - stageName: 'prod', - deployment: prodDeployment, - description: "Production stage", - throttlingRateLimit: 50, - throttlingBurstLimit: 50, - variables: {["STAGE"]: "prod"}, - loggingLevel: rest.MethodLoggingLevel.ERROR, - dataTraceEnabled: true, - tracingEnabled: true, - }); - this.stages['dev'] = new rest.Stage(this, 'dev-stage', { - stageName: 'dev', - deployment: devDeployment, - description: "Develop stage", - throttlingRateLimit: 10, - throttlingBurstLimit: 10, - variables: {["STAGE"]: "dev"}, - loggingLevel: rest.MethodLoggingLevel.ERROR, - dataTraceEnabled: true, - tracingEnabled: true, - }); - // Mapping from URL path to stages - this.domain.addBasePathMapping(this.apiEndpoint, { - basePath: 'staging', - stage: this.stages['dev'], - }); - this.domain.addBasePathMapping(this.apiEndpoint, { - basePath: 'v1', - stage: this.stages['prod'], - }); + /** + * REST API Gateway entity + */ + readonly apiEndpoint: apigw.RestApi; + /** + * Services provided by this API + */ + readonly apiServices: { [name: string]: RestApiService } = {}; + /** + * Stages of this API + */ + readonly stages: { [name: string]: apigw.Stage } = {}; + + constructor(scope: Construct, id: string, props: ApiEndpointProps) { + super(scope, id, props); + + this.apiEndpoint = new apigw.RestApi(this, 'rest-api', { + restApiName: 'wasedatime-rest-api', + description: 'The main API endpoint for WasedaTime Web App.', + endpointTypes: [apigw.EndpointType.REGIONAL], + deploy: false, + binaryMediaTypes: ['application/pdf', 'image/png'], + }); + this.apiEndpoint.addGatewayResponse('4xx-resp', { + type: apigw.ResponseType.DEFAULT_4XX, + responseHeaders: defaultHeaders, + }); + this.apiEndpoint.addGatewayResponse('5xx-resp', { + type: apigw.ResponseType.DEFAULT_5XX, + responseHeaders: defaultHeaders, + }); + + // Authorizer for methods that requires user login + this.authorizer = { + authorizerId: new apigw.CfnAuthorizer(this, 'cognito-authorizer', { + name: 'cognito-authorizer', + identitySource: 'method.request.header.Authorization', + providerArns: [props.authProvider!.userPoolArn], + restApiId: this.apiEndpoint.restApiId, + type: apigw.AuthorizationType.COGNITO, + }).ref, + authorizationType: apigw.AuthorizationType.COGNITO, + }; + // Request Validator + this.reqValidator = new apigw.RequestValidator(this, 'req-validator', { + restApi: this.apiEndpoint, + requestValidatorName: 'strict-validator', + validateRequestBody: true, + validateRequestParameters: true, + }); + + // API Domain + const cert = new acm.Certificate(this, 'api-cert', { + domainName: API_DOMAIN, + validation: acm.CertificateValidation.fromDns(props.zone), + }); + this.domain = this.apiEndpoint.addDomainName('domain', { + certificate: cert, + domainName: API_DOMAIN, + endpointType: apigw.EndpointType.REGIONAL, + securityPolicy: apigw.SecurityPolicy.TLS_1_2, + basePath: '(none)', + }); + new route53.ARecord(this, 'alias-record', { + zone: props.zone, + target: route53.RecordTarget.fromAlias(new route53_targets.ApiGatewayDomain(this.domain)), + recordName: API_DOMAIN, + }); + } + + public deploy() { + // Deployments + const prodDeployment = new apigw.Deployment(this, 'prod-deployment', { + api: this.apiEndpoint, + retainDeployments: false, + }); + const devDeployment = new apigw.Deployment(this, 'dev-deployment', { + api: this.apiEndpoint, + retainDeployments: false, + }); + const hash = Buffer.from(flatted.stringify(this.apiServices), 'binary').toString('base64'); + if (STAGE === 'dev') { + devDeployment.addToLogicalId(hash); + } else if (STAGE === 'prod') { + prodDeployment.addToLogicalId(hash); } + // Stages + this.stages.prod = new apigw.Stage(this, 'prod-stage', { + stageName: 'prod', + deployment: prodDeployment, + description: 'Production stage', + throttlingRateLimit: 50, + throttlingBurstLimit: 50, + variables: { ['STAGE']: 'prod' }, + loggingLevel: apigw.MethodLoggingLevel.ERROR, + dataTraceEnabled: true, + tracingEnabled: true, + }); + this.stages.dev = new apigw.Stage(this, 'dev-stage', { + stageName: 'dev', + deployment: devDeployment, + description: 'Develop stage', + throttlingRateLimit: 10, + throttlingBurstLimit: 10, + variables: { ['STAGE']: 'dev' }, + loggingLevel: apigw.MethodLoggingLevel.ERROR, + dataTraceEnabled: true, + tracingEnabled: true, + }); + // Mapping from URL path to stages + this.domain.addBasePathMapping(this.apiEndpoint, { + basePath: 'staging', + stage: this.stages.dev, + }); + this.domain.addBasePathMapping(this.apiEndpoint, { + basePath: 'v1', + stage: this.stages.prod, + }); + } } export class WasedaTimeGraphqlEndpoint extends AbstractGraphqlEndpoint { - readonly apiEndpoint: GraphqlApi; - - readonly apiServices: { [name: string]: AbstractGraphqlApiService } = {}; - - constructor(scope: cdk.Construct, id: string, props: ApiEndpointProps) { - - super(scope, id, props); - - const apiKeyAuth: AuthorizationMode = { - authorizationType: gql.AuthorizationType.API_KEY, - apiKeyConfig: { - name: 'dev', - expires: Expiration.after(Duration.days(365)), - description: "API Key for development environment.", - }, - }; - this.authMode["apiKey"] = apiKeyAuth; - const cognitoAuth: AuthorizationMode = { - authorizationType: gql.AuthorizationType.USER_POOL, - userPoolConfig: { - userPool: props.authProvider!, - appIdClientRegex: 'web-app', - }, - }; - this.authMode["userPool"] = cognitoAuth; - - this.apiEndpoint = new GraphqlApi(this, 'graphql-api', { - name: "wasedatime-gql-api", - authorizationConfig: { - defaultAuthorization: apiKeyAuth, - additionalAuthorizationModes: [cognitoAuth], - }, - logConfig: { - fieldLogLevel: FieldLogLevel.ALL, - }, - xrayEnabled: true, - }); - } + readonly apiEndpoint: appsync.GraphqlApi; + readonly apiServices: { [name: string]: GraphqlApiService } = {}; + + constructor(scope: Construct, id: string, props: ApiEndpointProps) { + + super(scope, id, props); + + const apiKeyAuth: appsync.AuthorizationMode = { + authorizationType: appsync.AuthorizationType.API_KEY, + apiKeyConfig: { + name: 'dev', + expires: Expiration.after(Duration.days(365)), + description: 'API Key for development environment.', + }, + }; + this.authMode.apiKey = apiKeyAuth; + const cognitoAuth: appsync.AuthorizationMode = { + authorizationType: appsync.AuthorizationType.USER_POOL, + userPoolConfig: { + userPool: props.authProvider!, + appIdClientRegex: 'web-app', + }, + }; + this.authMode.userPool = cognitoAuth; + + this.apiEndpoint = new appsync.GraphqlApi(this, 'graphql-api', { + name: 'wasedatime-gql-api', + authorizationConfig: { + defaultAuthorization: apiKeyAuth, + additionalAuthorizationModes: [cognitoAuth], + }, + logConfig: { + fieldLogLevel: appsync.FieldLogLevel.ALL, + }, + xrayEnabled: true, + }); + } } diff --git a/lib/constructs/business/authentication.ts b/lib/constructs/business/authentication.ts index b555c6a7d..5be67765e 100644 --- a/lib/constructs/business/authentication.ts +++ b/lib/constructs/business/authentication.ts @@ -1,136 +1,122 @@ -import * as cdk from "@aws-cdk/core"; +import * as acm from 'aws-cdk-lib/aws-certificatemanager'; +import * as cognito from 'aws-cdk-lib/aws-cognito'; +import * as route53 from 'aws-cdk-lib/aws-route53'; +import * as route53_targets from 'aws-cdk-lib/aws-route53-targets'; +import { Construct } from 'constructs'; import { - AccountRecovery, - Mfa, - ProviderAttribute, - UserPool, - UserPoolClient, - UserPoolDomain, - UserPoolEmail, - UserPoolIdentityProviderGoogle, -} from "@aws-cdk/aws-cognito"; -import {Certificate} from "@aws-cdk/aws-certificatemanager"; -import {ARecord, IHostedZone, RecordTarget} from "@aws-cdk/aws-route53"; - -import {PreSignupWasedaMailValidator} from "../common/lambda-functions"; -import { - CALLBACK_URLS, - GOOGLE_OAUTH_CLIENT_ID, - GOOGLE_OAUTH_CLIENT_SECRET, - LOGOUT_URLS, -} from "../../configs/cognito/oauth"; -import {AUTH_CERT_ARN} from "../../configs/common/arn"; -import {UserPoolDomainTarget} from "@aws-cdk/aws-route53-targets"; -import {AUTH_DOMAIN} from "../../configs/route53/domain"; - -export abstract class AbstractAuthProvider extends cdk.Construct { - abstract readonly pool: UserPool; - - abstract readonly clients: { [name: string]: UserPoolClient }; - - abstract readonly domain: UserPoolDomain; - - protected constructor(scope: cdk.Construct, id: string) { - super(scope, id); - } - - getDomain(): string { - const domainName: UserPoolDomain | undefined = this.domain; - - if (typeof domainName === "undefined") { - throw RangeError("Domain not configured for this API endpoint."); - } - return domainName.domainName; + CALLBACK_URLS, + GOOGLE_OAUTH_CLIENT_ID, + GOOGLE_OAUTH_CLIENT_SECRET, + LOGOUT_URLS, +} from '../../configs/cognito/oauth'; +import { AUTH_CERT_ARN } from '../../configs/common/arn'; +import { AUTH_DOMAIN } from '../../configs/route53/domain'; +import { PreSignupWasedaMailValidator } from '../common/lambda-functions'; + +export abstract class AbstractAuthProvider extends Construct { + abstract readonly pool: cognito.UserPool; + abstract readonly clients: { [name: string]: cognito.UserPoolClient }; + abstract readonly domain: cognito.UserPoolDomain; + + protected constructor(scope: Construct, id: string) { + super(scope, id); + } + + getDomain(): string { + const domainName: cognito.UserPoolDomain | undefined = this.domain; + + if (typeof domainName === 'undefined') { + throw RangeError('Domain not configured for this API endpoint.'); } + return domainName.domainName; + } } /** * User authentication service for WasedaTime */ export class WasedaTimeUserAuth extends AbstractAuthProvider { - readonly pool: UserPool; - - readonly clients: { [name: string]: UserPoolClient } = {}; - - readonly domain: UserPoolDomain; - - constructor(scope: cdk.Construct, id: string, zone: IHostedZone) { - super(scope, id); - - this.pool = new UserPool(this, 'main-user-pool', { - accountRecovery: AccountRecovery.NONE, - autoVerify: {email: false, phone: false}, - email: UserPoolEmail.withCognito(), - enableSmsRole: false, - mfa: Mfa.OFF, - passwordPolicy: { - minLength: 8, - requireDigits: true, - requireLowercase: true, - requireUppercase: false, - requireSymbols: false, - }, - selfSignUpEnabled: true, - signInAliases: { - email: true, - username: true, - }, - signInCaseSensitive: true, - smsRole: undefined, - standardAttributes: { - email: { - required: true, - }, - }, - userPoolName: 'wasedatime-users', - lambdaTriggers: { - preSignUp: new PreSignupWasedaMailValidator(this, 'presign-up-handle').baseFunction, - }, - }); - - this.pool.registerIdentityProvider(new UserPoolIdentityProviderGoogle(this, 'google-idp', { - clientId: GOOGLE_OAUTH_CLIENT_ID, - clientSecret: GOOGLE_OAUTH_CLIENT_SECRET, - userPool: this.pool, - attributeMapping: { - email: ProviderAttribute.GOOGLE_EMAIL, - preferredUsername: ProviderAttribute.GOOGLE_NAME, - profilePicture: ProviderAttribute.GOOGLE_PICTURE, - }, - scopes: ['email', 'openid', 'profile'], - })); - - this.clients['web-app'] = this.pool.addClient('web-app-client', { - userPoolClientName: "web-app", - authFlows: { - custom: true, - userSrp: true, - }, - generateSecret: false, - oAuth: { - callbackUrls: CALLBACK_URLS, - logoutUrls: LOGOUT_URLS, - }, - preventUserExistenceErrors: true, - }); - - // todo add custom ses in us-east-1 - - // fixme cross region resource - // const cert = new Certificate(this, 'auth-cert', { - // domainName: AUTH_DOMAIN, - // validation: CertificateValidation.fromDns(zone) - // }); - this.domain = this.pool.addDomain('auth-domain', { - customDomain: { - domainName: AUTH_DOMAIN, - certificate: Certificate.fromCertificateArn(this, 'auth-domain-cert', AUTH_CERT_ARN), - }, - }); - new ARecord(this, 'alias-record', { - zone: zone, - target: RecordTarget.fromAlias(new UserPoolDomainTarget(this.domain)), - recordName: AUTH_DOMAIN, - }); - } + readonly pool: cognito.UserPool; + readonly clients: { [name: string]: cognito.UserPoolClient } = {}; + readonly domain: cognito.UserPoolDomain; + + constructor(scope: Construct, id: string, zone: route53.IHostedZone) { + super(scope, id); + + this.pool = new cognito.UserPool(this, 'main-user-pool', { + accountRecovery: cognito.AccountRecovery.NONE, + autoVerify: { email: false, phone: false }, + email: cognito.UserPoolEmail.withCognito(), + enableSmsRole: false, + mfa: cognito.Mfa.OFF, + passwordPolicy: { + minLength: 8, + requireDigits: true, + requireLowercase: true, + requireUppercase: false, + requireSymbols: false, + }, + selfSignUpEnabled: true, + signInAliases: { + email: true, + username: true, + }, + signInCaseSensitive: true, + smsRole: undefined, + standardAttributes: { + email: { + required: true, + }, + }, + userPoolName: 'wasedatime-users', + lambdaTriggers: { + preSignUp: new PreSignupWasedaMailValidator(this, 'presign-up-handle').baseFunction, + }, + }); + + this.pool.registerIdentityProvider(new cognito.UserPoolIdentityProviderGoogle(this, 'google-idp', { + clientId: GOOGLE_OAUTH_CLIENT_ID, + clientSecret: GOOGLE_OAUTH_CLIENT_SECRET, + userPool: this.pool, + attributeMapping: { + email: cognito.ProviderAttribute.GOOGLE_EMAIL, + preferredUsername: cognito.ProviderAttribute.GOOGLE_NAME, + profilePicture: cognito.ProviderAttribute.GOOGLE_PICTURE, + }, + scopes: ['email', 'openid', 'profile'], + })); + + this.clients['web-app'] = this.pool.addClient('web-app-client', { + userPoolClientName: 'web-app', + authFlows: { + custom: true, + userSrp: true, + }, + generateSecret: false, + oAuth: { + callbackUrls: CALLBACK_URLS, + logoutUrls: LOGOUT_URLS, + }, + preventUserExistenceErrors: true, + }); + + // todo add custom ses in us-east-1 + + // fixme cross region resource + // const cert = new Certificate(this, 'auth-cert', { + // domainName: AUTH_DOMAIN, + // validation: CertificateValidation.fromDns(zone) + // }); + this.domain = this.pool.addDomain('auth-domain', { + customDomain: { + domainName: AUTH_DOMAIN, + certificate: acm.Certificate.fromCertificateArn(this, 'auth-domain-cert', AUTH_CERT_ARN), + }, + }); + new route53.ARecord(this, 'alias-record', { + zone: zone, + target: route53.RecordTarget.fromAlias(new route53_targets.UserPoolDomainTarget(this.domain)), + recordName: AUTH_DOMAIN, + }); + } } diff --git a/lib/constructs/business/graphql-api-service.ts b/lib/constructs/business/graphql-api-service.ts index 645602824..403fe3089 100644 --- a/lib/constructs/business/graphql-api-service.ts +++ b/lib/constructs/business/graphql-api-service.ts @@ -1,132 +1,130 @@ -import * as cdk from "@aws-cdk/core"; -import {EnumType, InputType, MappingTemplate, ObjectType, ResolvableField, Resolver} from "@aws-cdk/aws-appsync"; -import {IUserPool} from "@aws-cdk/aws-cognito"; -import {ITable} from "@aws-cdk/aws-dynamodb"; +import * as appsync from '@aws-cdk/aws-appsync-alpha'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import { Construct } from 'constructs'; import { - generateConnectionAndEdge, - int, - list_int, - list_of, - list_string, - PageInfo, - required, - required_string, - string, -} from "../../utils/appsync"; -import {AbstractGraphqlEndpoint} from "./api-endpoint"; + generateConnectionAndEdge, + int, + list_int, + list_of, + list_string, + PageInfo, + required, + required_string, + string, +} from '../../utils/appsync'; +import { AbstractGraphqlEndpoint } from './api-endpoint'; export interface GraphqlApiServiceProps { - dataSource: ITable; - - auth?: IUserPool; + dataSource: dynamodb.ITable; + auth?: appsync.AuthorizationMode; } -export abstract class AbstractGraphqlApiService extends cdk.Construct { - abstract readonly resolvers: { [name: string]: Resolver }; +export class GraphqlApiService extends Construct { + readonly resolvers: { [name: string]: appsync.Resolver }; - protected constructor(scope: AbstractGraphqlEndpoint, id: string, props: GraphqlApiServiceProps) { - super(scope, id); - } + constructor(scope: AbstractGraphqlEndpoint, id: string, props: GraphqlApiServiceProps) { + super(scope, id); + } } -export class CourseApiService extends AbstractGraphqlApiService { - readonly resolvers: { [name: string]: Resolver } = {}; +export class CourseApiService extends GraphqlApiService { + readonly resolvers: { [name: string]: appsync.Resolver } = {}; - constructor(scope: AbstractGraphqlEndpoint, id: string, props: GraphqlApiServiceProps) { - super(scope, id, props); + constructor(scope: AbstractGraphqlEndpoint, id: string, props: GraphqlApiServiceProps) { + super(scope, id, props); - const dataSource = scope.apiEndpoint.addDynamoDbDataSource('dynamo-db', props.dataSource, { - description: "Syllabus table from DynamoDB.", - name: "SyllabusTable", - }); + const dataSource = scope.apiEndpoint.addDynamoDbDataSource('dynamo-db', props.dataSource, { + description: 'Syllabus table from DynamoDB.', + name: 'SyllabusTable', + }); - const School = new EnumType('School', { - definition: [ - "PSE", "FSE", "SSS", "SILS", "CSE", "ASE", "LAW", "CMS", "HSS", "EDU", "SOC", "HUM", "SPS", "CJL", - "GEC", "CIE", "ART", "G_SPS", "G_SE", "G_LAW", "G_LAS", "G_SC", "G_EDU", "G_HUM", "G_SSS", "G_SAPS", - "G_ITS", "G_SJAL", "G_IPS", "G_WLS", "G_SA", "G_SPS", "G_FSE", "G_ASE", "G_CSE", "G_SEEE", "G_WBS", - "G_SICCS", - ], - }); - const Eval = new ObjectType("Evaluation", { - definition: { - type: int, - percent: int, - criteria: string, - }, - }); - const Occurrence = new ObjectType("Occurrence", { - definition: { - day: int, - period: int, - location: string, - }, - }); - const Course = new ObjectType("Course", { - definition: { - id: string, - category: string, - code: string, - credit: int, - evals: list_of(Eval), - instructor: string, - lang: list_int, - level: int, - minYear: int, - occurrences: list_of(Occurrence), - school: School.attribute(), - subtitle: string, - term: string, - title: string, - titleJp: string, - type: int, - }, - }); + const School = new appsync.EnumType('School', { + definition: [ + 'PSE', 'FSE', 'SSS', 'SILS', 'CSE', 'ASE', 'LAW', 'CMS', 'HSS', 'EDU', 'SOC', 'HUM', 'SPS', 'CJL', + 'GEC', 'CIE', 'ART', 'G_SPS', 'G_SE', 'G_LAW', 'G_LAS', 'G_SC', 'G_EDU', 'G_HUM', 'G_SSS', 'G_SAPS', + 'G_ITS', 'G_SJAL', 'G_IPS', 'G_WLS', 'G_SA', 'G_SPS', 'G_FSE', 'G_ASE', 'G_CSE', 'G_SEEE', 'G_WBS', + 'G_SICCS', + ], + }); + const Eval = new appsync.ObjectType('Evaluation', { + definition: { + type: int, + percent: int, + criteria: string, + }, + }); + const Occurrence = new appsync.ObjectType('Occurrence', { + definition: { + day: int, + period: int, + location: string, + }, + }); + const Course = new appsync.ObjectType('Course', { + definition: { + id: string, + category: string, + code: string, + credit: int, + evals: list_of(Eval), + instructor: string, + lang: list_int, + level: int, + minYear: int, + occurrences: list_of(Occurrence), + school: School.attribute(), + subtitle: string, + term: string, + title: string, + titleJp: string, + type: int, + }, + }); - const FilterForm = new InputType("FilterForm", { - definition: { - semester: list_string, - lang: list_int, - day: list_int, - period: list_int, - minYear: list_int, - credit: list_int, - evalType: int, - percent: int, - type: list_int, - level: list_int, - }, - }); + const FilterForm = new appsync.InputType('FilterForm', { + definition: { + semester: list_string, + lang: list_int, + day: list_int, + period: list_int, + minYear: list_int, + credit: list_int, + evalType: int, + percent: int, + type: list_int, + level: list_int, + }, + }); - const CourseConnection = generateConnectionAndEdge({base: Course, target: Course}).connection; - const CourseEdge = generateConnectionAndEdge({base: Course, target: Course}).edge; + const CourseConnection = generateConnectionAndEdge({ base: Course, target: Course }).connection; + const CourseEdge = generateConnectionAndEdge({ base: Course, target: Course }).edge; - [School, Eval, Occurrence, Course, CourseConnection, CourseEdge, PageInfo, FilterForm].forEach( - (type) => scope.apiEndpoint.addType(type), - ); + [School, Eval, Occurrence, Course, CourseConnection, CourseEdge, PageInfo, FilterForm].forEach( + (type) => scope.apiEndpoint.addType(type), + ); - scope.apiEndpoint.addQuery('getCourse', new ResolvableField({ - returnType: Course.attribute(), - dataSource: dataSource, - args: { - id: required_string, - }, - requestMappingTemplate: MappingTemplate.dynamoDbGetItem('id', 'id'), - responseMappingTemplate: MappingTemplate.dynamoDbResultItem(), - })); - scope.apiEndpoint.addQuery('filterCourses', new ResolvableField({ - returnType: CourseConnection.attribute(), - dataSource: dataSource, - args: { - form: required(FilterForm), - after: string, - first: int, - before: string, - last: int, - }, - requestMappingTemplate: MappingTemplate.fromFile('src/appsync/mapping/syllabus-filter-req.vtl'), - responseMappingTemplate: MappingTemplate.dynamoDbResultList(), - })); - } + scope.apiEndpoint.addQuery('getCourse', new appsync.ResolvableField({ + returnType: Course.attribute(), + dataSource: dataSource, + args: { + id: required_string, + }, + requestMappingTemplate: appsync.MappingTemplate.dynamoDbGetItem('id', 'id'), + responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultItem(), + })); + scope.apiEndpoint.addQuery('filterCourses', new appsync.ResolvableField({ + returnType: CourseConnection.attribute(), + dataSource: dataSource, + args: { + form: required(FilterForm), + after: string, + first: int, + before: string, + last: int, + }, + requestMappingTemplate: appsync.MappingTemplate.fromFile('src/appsync/mapping/syllabus-filter-req.vtl'), + responseMappingTemplate: appsync.MappingTemplate.dynamoDbResultList(), + })); + } } diff --git a/lib/constructs/business/http-api-service.ts b/lib/constructs/business/http-api-service.ts index 5213b2481..7cd1961ac 100644 --- a/lib/constructs/business/http-api-service.ts +++ b/lib/constructs/business/http-api-service.ts @@ -1,20 +1,18 @@ -import * as cdk from "@aws-cdk/core"; -import {CfnAuthorizer, HttpApi, HttpMethod, HttpRoute} from "@aws-cdk/aws-apigatewayv2"; +import * as apigw2 from '@aws-cdk/aws-apigatewayv2-alpha'; +import { Construct } from 'constructs'; -import {AbstractHttpApiEndpoint} from "./api-endpoint"; +import { AbstractHttpApiEndpoint } from './api-endpoint'; export interface HttpApiServiceProps { - apiEndpoint: HttpApi; - - dataSource?: string; - - authorizer?: CfnAuthorizer; + apiEndpoint: apigw2.HttpApi; + dataSource?: string; + authorizer?: apigw2.HttpAuthorizer; } -export abstract class AbstractHttpApiService extends cdk.Construct { - abstract readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: HttpRoute } }; +export abstract class AbstractHttpApiService extends Construct { + abstract readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw2.HttpRoute } }; - protected constructor(scope: AbstractHttpApiEndpoint, id: string, props: HttpApiServiceProps) { - super(scope, id); - } + protected constructor(scope: AbstractHttpApiEndpoint, id: string, props: HttpApiServiceProps) { + super(scope, id); + } } diff --git a/lib/constructs/business/rest-api-service.ts b/lib/constructs/business/rest-api-service.ts index ff913d17a..ee599e918 100644 --- a/lib/constructs/business/rest-api-service.ts +++ b/lib/constructs/business/rest-api-service.ts @@ -1,535 +1,522 @@ -import * as cdk from "@aws-cdk/core"; -import { - AwsIntegration, - HttpIntegration, - IAuthorizer, - LambdaIntegration, - Method, - MockIntegration, - Model, - PassthroughBehavior, - RequestValidator, - Resource, -} from "@aws-cdk/aws-apigateway"; -import {HttpMethod} from "@aws-cdk/aws-apigatewayv2"; -import {ManagedPolicy, Role, ServicePrincipal} from "@aws-cdk/aws-iam"; - -import {AbstractRestApiEndpoint} from "./api-endpoint"; -import {allowHeaders, allowOrigins} from "../../configs/api-gateway/cors"; +import * as apigw2 from '@aws-cdk/aws-apigatewayv2-alpha'; +import * as apigw from 'aws-cdk-lib/aws-apigateway'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import { Construct } from 'constructs'; + +import { allowHeaders, allowOrigins } from '../../configs/api-gateway/cors'; +import { lambdaRespParams, s3RespMapping, syllabusRespParams } from '../../configs/api-gateway/mapping'; import { - courseReviewGetRespSchema, - courseReviewPatchReqSchema, - courseReviewPostReqSchema, - syllabusSchema, -} from "../../configs/api-gateway/schema"; -import {AwsServicePrincipal} from "../../configs/common/aws"; -import {CourseReviewsFunctions, SyllabusFunctions, TimetableFunctions} from "../common/lambda-functions"; -import {lambdaRespParams, s3RespMapping, syllabusRespParams} from "../../configs/api-gateway/mapping"; + courseReviewGetRespSchema, + courseReviewPatchReqSchema, + courseReviewPostReqSchema, + syllabusSchema, +} from '../../configs/api-gateway/schema'; +import { AwsServicePrincipal } from '../../configs/common/aws'; +import { CourseReviewsFunctions, SyllabusFunctions, TimetableFunctions } from '../common/lambda-functions'; +import { AbstractRestApiEndpoint } from './api-endpoint'; export interface RestApiServiceProps { - dataSource?: string; - - authorizer?: IAuthorizer; - - validator?: RequestValidator; + dataSource?: string; + authorizer?: apigw.IAuthorizer; + validator?: apigw.RequestValidator; } -export abstract class AbstractRestApiService extends cdk.Construct { - abstract readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } }; +export class RestApiService extends Construct { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; - protected constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id); - } + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id); + } } -export class SyllabusApiService extends AbstractRestApiService { - readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } } = {}; - - constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id, props); - - const root = scope.apiEndpoint.root.addResource("syllabus"); - const syllabusSchools: Resource = root.addResource("{school}"); - const bookInfo: Resource = root.addResource("book-info"); - - const getRespModel = scope.apiEndpoint.addModel('syllabus-get-resp-model', { - schema: syllabusSchema, - contentType: "application/json", - description: "The new syllabus JSON schema for each school.", - modelName: "GetSyllabusResp", - }); - - const apiGatewayRole = new Role(this, 'rest-api-s3', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.API_GATEWAY), - description: "Allow API Gateway to fetch objects from s3 buckets.", - path: `/service-role/${AwsServicePrincipal.API_GATEWAY}/`, - roleName: "s3-apigateway-read", - managedPolicies: [ManagedPolicy.fromManagedPolicyArn(this, 's3-read-only', - "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess")], - }); - - const getIntegration = new AwsIntegration( - { - service: 's3', - integrationHttpMethod: HttpMethod.GET, - path: "syllabus/{school}.json", - subdomain: props.dataSource, - options: { - credentialsRole: apiGatewayRole, - requestParameters: {['integration.request.path.school']: 'method.request.path.school'}, - integrationResponses: [{ - statusCode: '200', - responseParameters: s3RespMapping, - }], - }, - }, - ); - - const headIntegration = new AwsIntegration( - { - service: 's3', - integrationHttpMethod: HttpMethod.HEAD, - path: "syllabus/{school}.json", - subdomain: props.dataSource, - options: { - credentialsRole: apiGatewayRole, - requestParameters: {['integration.request.path.school']: 'method.request.path.school'}, - integrationResponses: [{ - statusCode: '200', - responseParameters: s3RespMapping, - }], - }, - }, - ); - const syllabusFunctions = new SyllabusFunctions(this, 'syllabus-function'); - const courseGetIntegration = new LambdaIntegration( - syllabusFunctions.getFunction, {proxy: true}, - ); - const bookPostIntegration = new LambdaIntegration( - syllabusFunctions.postFunction, {proxy: true}, - ); - - const optionsSyllabusSchools = syllabusSchools.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.GET, HttpMethod.OPTIONS, HttpMethod.HEAD], - }); - const getSyllabusSchools = syllabusSchools.addMethod(HttpMethod.GET, getIntegration, { - requestParameters: {['method.request.path.school']: true}, - operationName: "GetSyllabusBySchool", - methodResponses: [{ - statusCode: '200', - responseModels: {["application/json"]: getRespModel}, - responseParameters: syllabusRespParams, - }], - requestValidator: props.validator, - }); - const headSyllabusSchools = syllabusSchools.addMethod(HttpMethod.HEAD, headIntegration, { - requestParameters: {['method.request.path.school']: true}, - operationName: "GetSyllabusMetadataBySchool", - methodResponses: [{ - statusCode: '200', - responseParameters: syllabusRespParams, - }], - requestValidator: props.validator, - }); - - const optionsSyllabusCourse = root.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.GET, HttpMethod.OPTIONS], - }); - const getSyllabusCourse = root.addMethod(HttpMethod.GET, courseGetIntegration, { - operationName: "GetCourse", - requestParameters: { - 'method.request.querystring.id': true, - }, - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }); - - const optionsBookInfo = bookInfo.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.POST, HttpMethod.OPTIONS], - }); - const postBookInfo = bookInfo.addMethod(HttpMethod.POST, bookPostIntegration, { - operationName: "GetBookInfo", - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }); - - this.resourceMapping = { - "/syllabus": { - [HttpMethod.GET]: getSyllabusCourse, - [HttpMethod.OPTIONS]: optionsSyllabusCourse, - }, - "/syllabus/{school}": { - [HttpMethod.GET]: getSyllabusSchools, - [HttpMethod.OPTIONS]: optionsSyllabusSchools, - [HttpMethod.HEAD]: headSyllabusSchools, - }, - "/syllabus/book-info": { - [HttpMethod.POST]: postBookInfo, - [HttpMethod.OPTIONS]: optionsBookInfo, - }, - }; - } +export class SyllabusApiService extends RestApiService { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; + + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id, props); + + const root = scope.apiEndpoint.root.addResource('syllabus'); + const syllabusSchools = root.addResource('{school}'); + const bookInfo = root.addResource('book-info'); + + const getRespModel = scope.apiEndpoint.addModel('syllabus-get-resp-model', { + schema: syllabusSchema, + contentType: 'application/json', + description: 'The new syllabus JSON schema for each school.', + modelName: 'GetSyllabusResp', + }); + + const apiGatewayRole = new iam.Role(this, 'rest-api-s3', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.API_GATEWAY), + description: 'Allow API Gateway to fetch objects from s3 buckets.', + path: `/service-role/${ AwsServicePrincipal.API_GATEWAY }/`, + roleName: 's3-apigateway-read', + managedPolicies: [iam.ManagedPolicy.fromManagedPolicyArn(this, 's3-read-only', + 'arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess')], + }); + + const getIntegration = new apigw.AwsIntegration( + { + service: 's3', + integrationHttpMethod: apigw2.HttpMethod.GET, + path: 'syllabus/{school}.json', + subdomain: props.dataSource, + options: { + credentialsRole: apiGatewayRole, + requestParameters: { ['integration.request.path.school']: 'method.request.path.school' }, + integrationResponses: [{ + statusCode: '200', + responseParameters: s3RespMapping, + }], + }, + }, + ); + + const headIntegration = new apigw.AwsIntegration( + { + service: 's3', + integrationHttpMethod: apigw2.HttpMethod.HEAD, + path: 'syllabus/{school}.json', + subdomain: props.dataSource, + options: { + credentialsRole: apiGatewayRole, + requestParameters: { ['integration.request.path.school']: 'method.request.path.school' }, + integrationResponses: [{ + statusCode: '200', + responseParameters: s3RespMapping, + }], + }, + }, + ); + const syllabusFunctions = new SyllabusFunctions(this, 'syllabus-function'); + const courseGetIntegration = new apigw.LambdaIntegration( + syllabusFunctions.getFunction, { proxy: true }, + ); + const bookPostIntegration = new apigw.LambdaIntegration( + syllabusFunctions.postFunction, { proxy: true }, + ); + + const optionsSyllabusSchools = syllabusSchools.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.GET, apigw2.HttpMethod.OPTIONS, apigw2.HttpMethod.HEAD], + }); + const getSyllabusSchools = syllabusSchools.addMethod(apigw2.HttpMethod.GET, getIntegration, { + requestParameters: { ['method.request.path.school']: true }, + operationName: 'GetSyllabusBySchool', + methodResponses: [{ + statusCode: '200', + responseModels: { ['application/json']: getRespModel }, + responseParameters: syllabusRespParams, + }], + requestValidator: props.validator, + }); + const headSyllabusSchools = syllabusSchools.addMethod(apigw2.HttpMethod.HEAD, headIntegration, { + requestParameters: { ['method.request.path.school']: true }, + operationName: 'GetSyllabusMetadataBySchool', + methodResponses: [{ + statusCode: '200', + responseParameters: syllabusRespParams, + }], + requestValidator: props.validator, + }); + + const optionsSyllabusCourse = root.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.GET, apigw2.HttpMethod.OPTIONS], + }); + const getSyllabusCourse = root.addMethod(apigw2.HttpMethod.GET, courseGetIntegration, { + operationName: 'GetCourse', + requestParameters: { + 'method.request.querystring.id': true, + }, + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }); + + const optionsBookInfo = bookInfo.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.POST, apigw2.HttpMethod.OPTIONS], + }); + const postBookInfo = bookInfo.addMethod(apigw2.HttpMethod.POST, bookPostIntegration, { + operationName: 'GetBookInfo', + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }); + + this.resourceMapping = { + '/syllabus': { + [apigw2.HttpMethod.GET]: getSyllabusCourse, + [apigw2.HttpMethod.OPTIONS]: optionsSyllabusCourse, + }, + '/syllabus/{school}': { + [apigw2.HttpMethod.GET]: getSyllabusSchools, + [apigw2.HttpMethod.OPTIONS]: optionsSyllabusSchools, + [apigw2.HttpMethod.HEAD]: headSyllabusSchools, + }, + '/syllabus/book-info': { + [apigw2.HttpMethod.POST]: postBookInfo, + [apigw2.HttpMethod.OPTIONS]: optionsBookInfo, + }, + }; + } } -export class CourseReviewsApiService extends AbstractRestApiService { - readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } } = {}; - - constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id, props); - - const root = scope.apiEndpoint.root.addResource("course-reviews").addResource('{key}'); - - const getRespModel = scope.apiEndpoint.addModel('review-get-resp-model', { - schema: courseReviewGetRespSchema, - contentType: "application/json", - description: "HTTP GET response body schema for fetching reviews.", - modelName: "GetReviewsResp", - }); - const postReqModel = scope.apiEndpoint.addModel('review-post-req-model', { - schema: courseReviewPostReqSchema, - contentType: "application/json", - description: "HTTP POST request body schema for submitting the review.", - modelName: "PostReviewReq", - }); - const patchReqModel = scope.apiEndpoint.addModel('review-patch-req-model', { - schema: courseReviewPatchReqSchema, - contentType: "application/json", - description: "HTTP PATCH request body schema for updating a review", - modelName: "PatchReviewReq", - }); - - const courseReviewsFunctions = new CourseReviewsFunctions(this, 'crud-functions', { - envVars: { - 'TABLE_NAME': props.dataSource!, - }, - }); - const getIntegration = new LambdaIntegration( - courseReviewsFunctions.getFunction, {proxy: true}, - ); - const postIntegration = new LambdaIntegration( - courseReviewsFunctions.postFunction, {proxy: true}, - ); - const patchIntegration = new LambdaIntegration( - courseReviewsFunctions.patchFunction, {proxy: true}, - ); - const deleteIntegration = new LambdaIntegration( - courseReviewsFunctions.deleteFunction, {proxy: true}, - ); - - const optionsCourseReviews = root.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.GET, HttpMethod.POST, HttpMethod.PATCH, HttpMethod.DELETE, HttpMethod.OPTIONS], - }); - const getCourseReviews = root.addMethod(HttpMethod.GET, getIntegration, - { - requestParameters: { - 'method.request.querystring.uid': false, - }, - operationName: "GetReviews", - methodResponses: [{ - statusCode: '200', - responseModels: {["application/json"]: getRespModel}, - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }, - ); - const postCourseReviews = root.addMethod(HttpMethod.POST, postIntegration, - { - operationName: "PostReview", - requestModels: {["application/json"]: postReqModel}, - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }, - ); - const patchCourseReviews = root.addMethod(HttpMethod.PATCH, patchIntegration, - { - operationName: "UpdateReview", - requestParameters: { - 'method.request.querystring.ts': true, - }, - requestModels: {["application/json"]: patchReqModel}, - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }, - ); - const deleteCourseReviews = root.addMethod(HttpMethod.DELETE, deleteIntegration, - { - operationName: "DeleteReview", - requestParameters: { - 'method.request.querystring.ts': true, - }, - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }, - ); - - this.resourceMapping = { - "/course-reviews/{key}": { - [HttpMethod.GET]: getCourseReviews, - [HttpMethod.OPTIONS]: optionsCourseReviews, - [HttpMethod.PATCH]: patchCourseReviews, - [HttpMethod.POST]: postCourseReviews, - [HttpMethod.DELETE]: deleteCourseReviews, - }, - }; - } +export class CourseReviewsApiService extends RestApiService { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; + + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id, props); + + const root = scope.apiEndpoint.root.addResource('course-reviews').addResource('{key}'); + + const getRespModel = scope.apiEndpoint.addModel('review-get-resp-model', { + schema: courseReviewGetRespSchema, + contentType: 'application/json', + description: 'HTTP GET response body schema for fetching reviews.', + modelName: 'GetReviewsResp', + }); + const postReqModel = scope.apiEndpoint.addModel('review-post-req-model', { + schema: courseReviewPostReqSchema, + contentType: 'application/json', + description: 'HTTP POST request body schema for submitting the review.', + modelName: 'PostReviewReq', + }); + const patchReqModel = scope.apiEndpoint.addModel('review-patch-req-model', { + schema: courseReviewPatchReqSchema, + contentType: 'application/json', + description: 'HTTP PATCH request body schema for updating a review', + modelName: 'PatchReviewReq', + }); + + const courseReviewsFunctions = new CourseReviewsFunctions(this, 'crud-functions', { + envVars: { + TABLE_NAME: props.dataSource!, + }, + }); + const getIntegration = new apigw.LambdaIntegration( + courseReviewsFunctions.getFunction, { proxy: true }, + ); + const postIntegration = new apigw.LambdaIntegration( + courseReviewsFunctions.postFunction, { proxy: true }, + ); + const patchIntegration = new apigw.LambdaIntegration( + courseReviewsFunctions.patchFunction, { proxy: true }, + ); + const deleteIntegration = new apigw.LambdaIntegration( + courseReviewsFunctions.deleteFunction, { proxy: true }, + ); + + const optionsCourseReviews = root.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.GET, apigw2.HttpMethod.POST, apigw2.HttpMethod.PATCH, apigw2.HttpMethod.DELETE, apigw2.HttpMethod.OPTIONS], + }); + const getCourseReviews = root.addMethod(apigw2.HttpMethod.GET, getIntegration, + { + requestParameters: { + 'method.request.querystring.uid': false, + }, + operationName: 'GetReviews', + methodResponses: [{ + statusCode: '200', + responseModels: { ['application/json']: getRespModel }, + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }, + ); + const postCourseReviews = root.addMethod(apigw2.HttpMethod.POST, postIntegration, + { + operationName: 'PostReview', + requestModels: { ['application/json']: postReqModel }, + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }, + ); + const patchCourseReviews = root.addMethod(apigw2.HttpMethod.PATCH, patchIntegration, + { + operationName: 'UpdateReview', + requestParameters: { + 'method.request.querystring.ts': true, + }, + requestModels: { ['application/json']: patchReqModel }, + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }, + ); + const deleteCourseReviews = root.addMethod(apigw2.HttpMethod.DELETE, deleteIntegration, + { + operationName: 'DeleteReview', + requestParameters: { + 'method.request.querystring.ts': true, + }, + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }, + ); + + this.resourceMapping = { + '/course-reviews/{key}': { + [apigw2.HttpMethod.GET]: getCourseReviews, + [apigw2.HttpMethod.OPTIONS]: optionsCourseReviews, + [apigw2.HttpMethod.PATCH]: patchCourseReviews, + [apigw2.HttpMethod.POST]: postCourseReviews, + [apigw2.HttpMethod.DELETE]: deleteCourseReviews, + }, + }; + } } -export class CareerApiService extends AbstractRestApiService { - readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } } = {}; - - constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id, props); - - const root = scope.apiEndpoint.root.addResource("career"); - const intern = root.addResource('intern'); - const part = root.addResource('part-time'); - const seminar = root.addResource('seminar'); - - const internGetIntegration = new MockIntegration({ - requestTemplates: {["application/json"]: '{"statusCode": 200}'}, - passthroughBehavior: PassthroughBehavior.WHEN_NO_TEMPLATES, - integrationResponses: [{ - statusCode: '200', - responseTemplates: {["application/json"]: "{}"}, - }], - }); - const partGetIntegration = new MockIntegration({ - requestTemplates: {["application/json"]: '{"statusCode": 200}'}, - passthroughBehavior: PassthroughBehavior.WHEN_NO_TEMPLATES, - integrationResponses: [{ - statusCode: '200', - responseTemplates: {["application/json"]: "{}"}, - }], - }); - const seminarGetIntegration = new MockIntegration({ - requestTemplates: {["application/json"]: '{"statusCode": 200}'}, - passthroughBehavior: PassthroughBehavior.WHEN_NO_TEMPLATES, - integrationResponses: [{ - statusCode: '200', - responseTemplates: {["application/json"]: "{}"}, - }], - }); - - [intern, part, seminar].forEach((value => value.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.GET, HttpMethod.OPTIONS], - }))); - intern.addMethod(HttpMethod.GET, internGetIntegration, { - requestParameters: { - 'method.request.querystring.offset': true, - 'method.request.querystring.limit': true, - 'method.request.querystring.ind': false, - 'method.request.querystring.dl': false, - 'method.request.querystring.lang': false, - }, - operationName: "GetInternInfo", - methodResponses: [{ - statusCode: '200', - responseModels: {["application/json"]: Model.EMPTY_MODEL}, - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }); - part.addMethod(HttpMethod.GET, partGetIntegration, { - requestParameters: { - 'method.request.querystring.offset': true, - 'method.request.querystring.limit': true, - 'method.request.querystring.loc': false, - 'method.request.querystring.dl': false, - 'method.request.querystring.lang': false, - 'method.request.querystring.pay': false, - 'method.request.querystring.freq': false, - }, - operationName: "GetParttimeInfo", - methodResponses: [{ - statusCode: '200', - responseModels: {["application/json"]: Model.EMPTY_MODEL}, - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }); - seminar.addMethod(HttpMethod.GET, seminarGetIntegration, { - requestParameters: { - 'method.request.querystring.offset': true, - 'method.request.querystring.limit': true, - 'method.request.querystring.ind': false, - 'method.request.querystring.duration': false, - 'method.request.querystring.lang': false, - 'method.request.querystring.dl': false, - 'method.request.querystring.major': false, - }, - operationName: "GetSeminarInfo", - methodResponses: [{ - statusCode: '200', - responseModels: {["application/json"]: Model.EMPTY_MODEL}, - responseParameters: lambdaRespParams, - }], - requestValidator: props.validator, - }); - } +export class CareerApiService extends RestApiService { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; + + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id, props); + + const root = scope.apiEndpoint.root.addResource('career'); + const intern = root.addResource('intern'); + const part = root.addResource('part-time'); + const seminar = root.addResource('seminar'); + + const internGetIntegration = new apigw.MockIntegration({ + requestTemplates: { ['application/json']: '{"statusCode": 200}' }, + passthroughBehavior: apigw.PassthroughBehavior.WHEN_NO_TEMPLATES, + integrationResponses: [{ + statusCode: '200', + responseTemplates: { ['application/json']: '{}' }, + }], + }); + const partGetIntegration = new apigw.MockIntegration({ + requestTemplates: { ['application/json']: '{"statusCode": 200}' }, + passthroughBehavior: apigw.PassthroughBehavior.WHEN_NO_TEMPLATES, + integrationResponses: [{ + statusCode: '200', + responseTemplates: { ['application/json']: '{}' }, + }], + }); + const seminarGetIntegration = new apigw.MockIntegration({ + requestTemplates: { ['application/json']: '{"statusCode": 200}' }, + passthroughBehavior: apigw.PassthroughBehavior.WHEN_NO_TEMPLATES, + integrationResponses: [{ + statusCode: '200', + responseTemplates: { ['application/json']: '{}' }, + }], + }); + + [intern, part, seminar].forEach((value => value.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.GET, apigw2.HttpMethod.OPTIONS], + }))); + intern.addMethod(apigw2.HttpMethod.GET, internGetIntegration, { + requestParameters: { + 'method.request.querystring.offset': true, + 'method.request.querystring.limit': true, + 'method.request.querystring.ind': false, + 'method.request.querystring.dl': false, + 'method.request.querystring.lang': false, + }, + operationName: 'GetInternInfo', + methodResponses: [{ + statusCode: '200', + responseModels: { ['application/json']: apigw.Model.EMPTY_MODEL }, + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }); + part.addMethod(apigw2.HttpMethod.GET, partGetIntegration, { + requestParameters: { + 'method.request.querystring.offset': true, + 'method.request.querystring.limit': true, + 'method.request.querystring.loc': false, + 'method.request.querystring.dl': false, + 'method.request.querystring.lang': false, + 'method.request.querystring.pay': false, + 'method.request.querystring.freq': false, + }, + operationName: 'GetParttimeInfo', + methodResponses: [{ + statusCode: '200', + responseModels: { ['application/json']: apigw.Model.EMPTY_MODEL }, + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }); + seminar.addMethod(apigw2.HttpMethod.GET, seminarGetIntegration, { + requestParameters: { + 'method.request.querystring.offset': true, + 'method.request.querystring.limit': true, + 'method.request.querystring.ind': false, + 'method.request.querystring.duration': false, + 'method.request.querystring.lang': false, + 'method.request.querystring.dl': false, + 'method.request.querystring.major': false, + }, + operationName: 'GetSeminarInfo', + methodResponses: [{ + statusCode: '200', + responseModels: { ['application/json']: apigw.Model.EMPTY_MODEL }, + responseParameters: lambdaRespParams, + }], + requestValidator: props.validator, + }); + } } -export class TimetableApiService extends AbstractRestApiService { - readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } } = {}; - - constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id, props); - - const root = scope.apiEndpoint.root.addResource("timetable"); - const timetableImport = root.addResource('import'); - const timetableExport = root.addResource('export'); - - const timetableFunctions = new TimetableFunctions(this, 'crud-functions', { - envVars: { - 'TABLE_NAME': props.dataSource!, - }, - }); - const getIntegration = new LambdaIntegration( - timetableFunctions.getFunction, {proxy: true}, - ); - const postIntegration = new LambdaIntegration( - timetableFunctions.postFunction, {proxy: true}, - ); - const patchIntegration = new LambdaIntegration( - timetableFunctions.patchFunction, {proxy: true}, - ); - // const importIntegration = new LambdaIntegration( - // timetableFunctions.importFunction, {proxy: true}, - // ); - // const exportIntegration = new LambdaIntegration( - // timetableFunctions.exportFunction, {proxy: true}, - // ); - - const optionsTimetable = root.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.GET, HttpMethod.POST, HttpMethod.PATCH, HttpMethod.OPTIONS, HttpMethod.DELETE], - }); - const getTimetable = root.addMethod(HttpMethod.GET, getIntegration, { - operationName: "GetTimetable", - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }); - const postTimetable = root.addMethod(HttpMethod.POST, postIntegration, { - operationName: "PostTimetable", - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }); - const patchTimetable = root.addMethod(HttpMethod.PATCH, patchIntegration, { - operationName: "UpdateTimetable", - methodResponses: [{ - statusCode: '200', - responseParameters: lambdaRespParams, - }], - authorizer: props.authorizer, - requestValidator: props.validator, - }); - - // [timetableImport, timetableExport].forEach(value => value.addCorsPreflight({ - // allowOrigins: allowOrigins, - // allowHeaders: allowHeaders, - // allowMethods: [HttpMethod.POST, HttpMethod.OPTIONS], - // })); - // const importTimetable = timetableImport.addMethod(HttpMethod.POST, importIntegration, { - // operationName: "ImportTimetable", - // methodResponses: [{ - // statusCode: '200', - // responseParameters: lambdaRespParams, - // }], - // requestValidator: props.validator, - // }); - // const exportTimetable = timetableExport.addMethod(HttpMethod.POST, exportIntegration, { - // operationName: "ExportTimetable", - // methodResponses: [{ - // statusCode: '200', - // responseParameters: lambdaRespParams, - // }], - // requestValidator: props.validator, - // }); - - this.resourceMapping = { - "/timetable": { - [HttpMethod.OPTIONS]: optionsTimetable, - [HttpMethod.GET]: getTimetable, - [HttpMethod.PATCH]: patchTimetable, - [HttpMethod.POST]: postTimetable, - }, - // "/timetable/export": { - // [HttpMethod.POST]: exportTimetable, - // }, - // "/timetable/import": { - // [HttpMethod.POST]: importTimetable, - // }, - }; - } +export class TimetableApiService extends RestApiService { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; + + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id, props); + + const root = scope.apiEndpoint.root.addResource('timetable'); + const timetableImport = root.addResource('import'); + const timetableExport = root.addResource('export'); + + const timetableFunctions = new TimetableFunctions(this, 'crud-functions', { + envVars: { + TABLE_NAME: props.dataSource!, + }, + }); + const getIntegration = new apigw.LambdaIntegration( + timetableFunctions.getFunction, { proxy: true }, + ); + const postIntegration = new apigw.LambdaIntegration( + timetableFunctions.postFunction, { proxy: true }, + ); + const patchIntegration = new apigw.LambdaIntegration( + timetableFunctions.patchFunction, { proxy: true }, + ); + // const importIntegration = new apigw.LambdaIntegration( + // timetableFunctions.importFunction, {proxy: true}, + // ); + // const exportIntegration = new apigw.LambdaIntegration( + // timetableFunctions.exportFunction, {proxy: true}, + // ); + + const optionsTimetable = root.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.GET, apigw2.HttpMethod.POST, apigw2.HttpMethod.PATCH, apigw2.HttpMethod.OPTIONS, apigw2.HttpMethod.DELETE], + }); + const getTimetable = root.addMethod(apigw2.HttpMethod.GET, getIntegration, { + operationName: 'GetTimetable', + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }); + const postTimetable = root.addMethod(apigw2.HttpMethod.POST, postIntegration, { + operationName: 'PostTimetable', + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }); + const patchTimetable = root.addMethod(apigw2.HttpMethod.PATCH, patchIntegration, { + operationName: 'UpdateTimetable', + methodResponses: [{ + statusCode: '200', + responseParameters: lambdaRespParams, + }], + authorizer: props.authorizer, + requestValidator: props.validator, + }); + + // [timetableImport, timetableExport].forEach(value => value.addCorsPreflight({ + // allowOrigins: allowOrigins, + // allowHeaders: allowHeaders, + // allowMethods: [apigw2.HttpMethod.POST, apigw2.HttpMethod.OPTIONS], + // })); + // const importTimetable = timetableImport.addMethod(apigw2.HttpMethod.POST, importIntegration, { + // operationName: "ImportTimetable", + // methodResponses: [{ + // statusCode: '200', + // responseParameters: lambdaRespParams, + // }], + // requestValidator: props.validator, + // }); + // const exportTimetable = timetableExport.addMethod(apigw2.HttpMethod.POST, exportIntegration, { + // operationName: "ExportTimetable", + // methodResponses: [{ + // statusCode: '200', + // responseParameters: lambdaRespParams, + // }], + // requestValidator: props.validator, + // }); + + this.resourceMapping = { + '/timetable': { + [apigw2.HttpMethod.OPTIONS]: optionsTimetable, + [apigw2.HttpMethod.GET]: getTimetable, + [apigw2.HttpMethod.PATCH]: patchTimetable, + [apigw2.HttpMethod.POST]: postTimetable, + }, + // "/timetable/export": { + // [apigw2.HttpMethod.POST]: exportTimetable, + // }, + // "/timetable/import": { + // [apigw2.HttpMethod.POST]: importTimetable, + // }, + }; + } } -export class GraphqlApiService extends AbstractRestApiService { - readonly resourceMapping: { [path: string]: { [method in HttpMethod]?: Method } } = {}; - - constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { - super(scope, id, props); - - const root = scope.apiEndpoint.root.addResource("graphql"); - - const postIntegration = new HttpIntegration(props.dataSource!, { - proxy: true, - httpMethod: HttpMethod.POST, - }); - - const optionsGql = root.addCorsPreflight({ - allowOrigins: allowOrigins, - allowHeaders: allowHeaders, - allowMethods: [HttpMethod.POST, HttpMethod.OPTIONS], - }); - const postGql = root.addMethod(HttpMethod.POST, postIntegration, { - operationName: "PostGraphQL", - methodResponses: [{ - statusCode: '200', - }], - }); - - this.resourceMapping = { - "/graphql": { - [HttpMethod.OPTIONS]: optionsGql, - [HttpMethod.POST]: postGql, - }, - }; - } +export class GraphqlApiService extends RestApiService { + readonly resourceMapping: { [path: string]: { [method in apigw2.HttpMethod]?: apigw.Method } }; + + constructor(scope: AbstractRestApiEndpoint, id: string, props: RestApiServiceProps) { + super(scope, id, props); + + const root = scope.apiEndpoint.root.addResource('graphql'); + + const postIntegration = new apigw.HttpIntegration(props.dataSource!, { + proxy: true, + httpMethod: apigw2.HttpMethod.POST, + }); + + const optionsGql = root.addCorsPreflight({ + allowOrigins: allowOrigins, + allowHeaders: allowHeaders, + allowMethods: [apigw2.HttpMethod.POST, apigw2.HttpMethod.OPTIONS], + }); + const postGql = root.addMethod(apigw2.HttpMethod.POST, postIntegration, { + operationName: 'PostGraphQL', + methodResponses: [{ + statusCode: '200', + }], + }); + + this.resourceMapping = { + '/graphql': { + [apigw2.HttpMethod.OPTIONS]: optionsGql, + [apigw2.HttpMethod.POST]: postGql, + }, + }; + } } diff --git a/lib/constructs/business/search.ts b/lib/constructs/business/search.ts index 597ffc446..6cedfcf8b 100644 --- a/lib/constructs/business/search.ts +++ b/lib/constructs/business/search.ts @@ -1,35 +1,35 @@ -import * as cdk from '@aws-cdk/core'; -import {SecretValue} from '@aws-cdk/core'; -import {Domain, ElasticsearchVersion, TLSSecurityPolicy} from "@aws-cdk/aws-elasticsearch"; -import {EbsDeviceVolumeType} from "@aws-cdk/aws-ec2"; +import { SecretValue } from 'aws-cdk-lib'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import * as es from 'aws-cdk-lib/aws-elasticsearch'; +import { Construct } from 'constructs'; -export class ElasticsearchService extends cdk.Construct { - readonly domain: Domain; +export class ElasticsearchService extends Construct { + readonly domain: es.Domain; - constructor(scope: cdk.Construct, id: string) { - super(scope, id); + constructor(scope: Construct, id: string) { + super(scope, id); - this.domain = new Domain(this, 'es-domain', { - capacity: { - dataNodeInstanceType: 't3.small.elasticsearch' - }, - domainName: "wt-search", - ebs: { - volumeSize: 10, - volumeType: EbsDeviceVolumeType.GP2 - }, - enableVersionUpgrade: true, - enforceHttps: true, - fineGrainedAccessControl: { - masterUserName: 'wasedatime', - masterUserPassword: new SecretValue(process.env.WEBSITE_DEV_PASS) - }, - logging: {}, // fixme - encryptionAtRest: {enabled: true}, - nodeToNodeEncryption: true, - tlsSecurityPolicy: TLSSecurityPolicy.TLS_1_2, - useUnsignedBasicAuth: true, - version: ElasticsearchVersion.V7_9 - }); - } + this.domain = new es.Domain(this, 'es-domain', { + capacity: { + dataNodeInstanceType: 't3.small.elasticsearch', + }, + domainName: 'wt-search', + ebs: { + volumeSize: 10, + volumeType: ec2.EbsDeviceVolumeType.GP2, + }, + enableVersionUpgrade: true, + enforceHttps: true, + fineGrainedAccessControl: { + masterUserName: 'wasedatime', + masterUserPassword: new SecretValue(process.env.WEBSITE_DEV_PASS), + }, + logging: {}, // fixme + encryptionAtRest: { enabled: true }, + nodeToNodeEncryption: true, + tlsSecurityPolicy: es.TLSSecurityPolicy.TLS_1_2, + useUnsignedBasicAuth: true, + version: es.ElasticsearchVersion.V7_9, + }); + } } diff --git a/lib/constructs/business/service.ts b/lib/constructs/business/service.ts index fe2fefe26..66d414a11 100644 --- a/lib/constructs/business/service.ts +++ b/lib/constructs/business/service.ts @@ -1,17 +1,24 @@ -import * as rest from "./rest-api-service"; -import * as gql from "./graphql-api-service"; +import * as gql from './graphql-api-service'; +import * as rest from './rest-api-service'; export enum ApiEndpoint { - REST, - AUTH, - GRAPHQL, + REST, + AUTH, + GRAPHQL, } -export const apiServiceMap: { [name: string]: any } = { - "syllabus": rest.SyllabusApiService, - "course-reviews": rest.CourseReviewsApiService, - "career": rest.CareerApiService, - "timetable": rest.TimetableApiService, - "graphql": rest.GraphqlApiService, - "course": gql.CourseApiService, +export type RestApiServiceId = 'syllabus' | 'course-reviews' | 'career' | 'timetable' | 'graphql'; + +export const restApiServiceMap: { [name in RestApiServiceId]: typeof rest.RestApiService } = { + 'syllabus': rest.SyllabusApiService, + 'course-reviews': rest.CourseReviewsApiService, + 'career': rest.CareerApiService, + 'timetable': rest.TimetableApiService, + 'graphql': rest.GraphqlApiService, +}; + +export type GraphqlApiServiceId = 'course'; + +export const graphqlApiServiceMap: { [name in GraphqlApiServiceId]: typeof gql.GraphqlApiService } = { + course: gql.CourseApiService, }; diff --git a/lib/constructs/common/hosted-zone.ts b/lib/constructs/common/hosted-zone.ts index 519b9b1b0..bbc71ccb8 100644 --- a/lib/constructs/common/hosted-zone.ts +++ b/lib/constructs/common/hosted-zone.ts @@ -1,41 +1,41 @@ -import * as cdk from '@aws-cdk/core'; -import {Duration} from '@aws-cdk/core'; -import {CnameRecord, MxRecord, PublicHostedZone, TxtRecord} from '@aws-cdk/aws-route53'; -import {DOC_DOMAIN, EMAIL_TXT, GITHUB_PAGES, MX_VALUES, ROOT_DOMAIN} from "../../configs/route53/domain"; +import { Duration, Stack, StackProps } from 'aws-cdk-lib'; +import * as route53 from 'aws-cdk-lib/aws-route53'; +import { Construct } from 'constructs'; +import { DOC_DOMAIN, EMAIL_TXT, GITHUB_PAGES, MX_VALUES, ROOT_DOMAIN } from '../../configs/route53/domain'; -export class WasedaTimeHostedZone extends cdk.Stack { - readonly zone: PublicHostedZone; +export class WasedaTimeHostedZone extends Stack { + readonly zone: route53.PublicHostedZone; - constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); - this.zone = new PublicHostedZone(this, 'hosted-zone', { - zoneName: ROOT_DOMAIN, - comment: "The main hosted zone for WasedaTime.", - }); + this.zone = new route53.PublicHostedZone(this, 'hosted-zone', { + zoneName: ROOT_DOMAIN, + comment: 'The main hosted zone for WasedaTime.', + }); - new CnameRecord(this, 'docs', { - zone: this.zone, - domainName: GITHUB_PAGES, - recordName: DOC_DOMAIN, - ttl: Duration.seconds(300), - comment: "DNS Record for API Documentation hosting on Github Pages", - }); + new route53.CnameRecord(this, 'docs', { + zone: this.zone, + domainName: GITHUB_PAGES, + recordName: DOC_DOMAIN, + ttl: Duration.seconds(300), + comment: 'DNS Record for API Documentation hosting on Github Pages', + }); - new MxRecord(this, 'mx-record', { - zone: this.zone, - recordName: ROOT_DOMAIN, - values: MX_VALUES, - ttl: Duration.seconds(300), - comment: "Forward email", - }); + new route53.MxRecord(this, 'mx-record', { + zone: this.zone, + recordName: ROOT_DOMAIN, + values: MX_VALUES, + ttl: Duration.seconds(300), + comment: 'Forward email', + }); - new TxtRecord(this, 'email-txt', { - zone: this.zone, - recordName: ROOT_DOMAIN, - values: EMAIL_TXT, - ttl: Duration.seconds(300), - comment: "Forward email", - }); - } + new route53.TxtRecord(this, 'email-txt', { + zone: this.zone, + recordName: ROOT_DOMAIN, + values: EMAIL_TXT, + ttl: Duration.seconds(300), + comment: 'Forward email', + }); + } } diff --git a/lib/constructs/common/lambda-functions.ts b/lib/constructs/common/lambda-functions.ts index 93d7fa014..78cc99344 100644 --- a/lib/constructs/common/lambda-functions.ts +++ b/lib/constructs/common/lambda-functions.ts @@ -1,381 +1,371 @@ -import * as cdk from "@aws-cdk/core"; -import {Duration} from "@aws-cdk/core"; -import {Function, Runtime} from "@aws-cdk/aws-lambda"; -import {RetentionDays} from "@aws-cdk/aws-logs"; -import {LazyRole, ManagedPolicy, ServicePrincipal} from "@aws-cdk/aws-iam"; -import {PythonFunction} from "@aws-cdk/aws-lambda-python"; -import {NodejsFunction} from "@aws-cdk/aws-lambda-nodejs"; - -import {AwsServicePrincipal} from "../../configs/common/aws"; -import {GOOGLE_API_SERVICE_ACCOUNT_INFO, SLACK_WEBHOOK_URL} from "../../configs/lambda/environment"; +import * as lambda_py from '@aws-cdk/aws-lambda-python-alpha'; +import { Duration } from 'aws-cdk-lib'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as lambda_js from 'aws-cdk-lib/aws-lambda-nodejs'; +import * as logs from 'aws-cdk-lib/aws-logs'; +import { Construct } from 'constructs'; +import { AwsServicePrincipal } from '../../configs/common/aws'; +import { GOOGLE_API_SERVICE_ACCOUNT_INFO, SLACK_WEBHOOK_URL } from '../../configs/lambda/environment'; interface FunctionsProps { - envVars: { [name: string]: string } + envVars: { [name: string]: string }; } -export class CourseReviewsFunctions extends cdk.Construct { - readonly getFunction: Function; - - readonly postFunction: Function; - - readonly patchFunction: Function; - - readonly deleteFunction: Function; - - constructor(scope: cdk.Construct, id: string, props: FunctionsProps) { - super(scope, id); - - const dynamoDBReadRole: LazyRole = new LazyRole(this, 'dynamo-read-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to perform crud operation on dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "dynamodb-lambda-read", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"), - ], - }); - - const dynamoDBPutRole: LazyRole = new LazyRole(this, 'dynamo-put-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to perform crud operation on dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "dynamodb-lambda-write", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"), - ], - }); - - this.getFunction = new PythonFunction(this, 'get-reviews', { - entry: 'src/lambda/get-reviews', - description: "Get course reviews from the database.", - functionName: "get-course-reviews", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - role: dynamoDBReadRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - environment: props.envVars, - }); - - this.postFunction = new PythonFunction(this, 'post-review', { - entry: 'src/lambda/post-review', - description: "Save course reviews into the database.", - functionName: "post-course-review", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 256, - role: dynamoDBPutRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(5), - environment: props.envVars, - }).addEnvironment("GOOGLE_API_SERVICE_ACCOUNT_INFO", GOOGLE_API_SERVICE_ACCOUNT_INFO); - - this.patchFunction = new PythonFunction(this, 'patch-review', { - entry: 'src/lambda/patch-review', - description: "Update course reviews in the database.", - functionName: "patch-course-review", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 256, - role: dynamoDBPutRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(5), - environment: props.envVars, - }).addEnvironment("GOOGLE_API_SERVICE_ACCOUNT_INFO", GOOGLE_API_SERVICE_ACCOUNT_INFO); - - this.deleteFunction = new PythonFunction(this, 'delete-review', { - entry: 'src/lambda/delete-review', - description: "Delete course reviews in the database.", - functionName: "delete-course-review", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - role: dynamoDBPutRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - environment: props.envVars, - }); - } +export class CourseReviewsFunctions extends Construct { + readonly getFunction: lambda.Function; + readonly postFunction: lambda.Function; + readonly patchFunction: lambda.Function; + readonly deleteFunction: lambda.Function; + + constructor(scope: Construct, id: string, props: FunctionsProps) { + super(scope, id); + + const dynamoDBReadRole: iam.LazyRole = new iam.LazyRole(this, 'dynamo-read-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to perform crud operation on dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'dynamodb-lambda-read', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', + 'arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess'), + ], + }); + + const dynamoDBPutRole: iam.LazyRole = new iam.LazyRole(this, 'dynamo-put-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to perform crud operation on dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'dynamodb-lambda-write', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', + 'arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess'), + ], + }); + + this.getFunction = new lambda_py.PythonFunction(this, 'get-reviews', { + entry: 'src/lambda/get-reviews', + description: 'Get course reviews from the database.', + functionName: 'get-course-reviews', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + role: dynamoDBReadRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + environment: props.envVars, + }); + + this.postFunction = new lambda_py.PythonFunction(this, 'post-review', { + entry: 'src/lambda/post-review', + description: 'Save course reviews into the database.', + functionName: 'post-course-review', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 256, + role: dynamoDBPutRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(5), + environment: props.envVars, + }).addEnvironment('GOOGLE_API_SERVICE_ACCOUNT_INFO', GOOGLE_API_SERVICE_ACCOUNT_INFO); + + this.patchFunction = new lambda_py.PythonFunction(this, 'patch-review', { + entry: 'src/lambda/patch-review', + description: 'Update course reviews in the database.', + functionName: 'patch-course-review', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 256, + role: dynamoDBPutRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(5), + environment: props.envVars, + }).addEnvironment('GOOGLE_API_SERVICE_ACCOUNT_INFO', GOOGLE_API_SERVICE_ACCOUNT_INFO); + + this.deleteFunction = new lambda_py.PythonFunction(this, 'delete-review', { + entry: 'src/lambda/delete-review', + description: 'Delete course reviews in the database.', + functionName: 'delete-course-review', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + role: dynamoDBPutRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + environment: props.envVars, + }); + } } -export class SyllabusScraper extends cdk.Construct { - readonly baseFunction: Function; - - constructor(scope: cdk.Construct, id: string, props: FunctionsProps) { - super(scope, id); - - const s3AccessRole: LazyRole = new LazyRole(this, 's3-access-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to access s3 buckets", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "s3-lambda-full-access", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 's3-full-access', - "arn:aws:iam::aws:policy/AmazonS3FullAccess"), - ], - }); - - this.baseFunction = new PythonFunction(this, 'base-function', { - entry: 'src/lambda/syllabus-scraper', - description: "Base function for scraping syllabus data from Waseda University.", - functionName: "syllabus-scraper", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 4096, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(210), - environment: props.envVars, - role: s3AccessRole, - }); - } +export class SyllabusScraper extends Construct { + readonly baseFunction: lambda.Function; + + constructor(scope: Construct, id: string, props: FunctionsProps) { + super(scope, id); + + const s3AccessRole: iam.LazyRole = new iam.LazyRole(this, 's3-access-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to access s3 buckets', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 's3-lambda-full-access', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 's3-full-access', + 'arn:aws:iam::aws:policy/AmazonS3FullAccess'), + ], + }); + + this.baseFunction = new lambda_py.PythonFunction(this, 'base-function', { + entry: 'src/lambda/syllabus-scraper', + description: 'Base function for scraping syllabus data from Waseda University.', + functionName: 'syllabus-scraper', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 4096, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(210), + environment: props.envVars, + role: s3AccessRole, + }); + } } -export class AmplifyStatusPublisher extends cdk.Construct { - readonly baseFunction: Function; - - constructor(scope: cdk.Construct, id: string, props?: FunctionsProps) { - super(scope, id); - - this.baseFunction = new NodejsFunction(this, 'base-function', { - entry: 'src/lambda/amplify-status-publisher/index.js', - description: "Forwards Amplify build status message from SNS to Slack Webhook.", - functionName: "amplify-status-publisher", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - runtime: Runtime.NODEJS_14_X, - timeout: Duration.seconds(3), - }).addEnvironment("SLACK_WEBHOOK_URL", SLACK_WEBHOOK_URL); - } +export class AmplifyStatusPublisher extends Construct { + readonly baseFunction: lambda.Function; + + constructor(scope: Construct, id: string, props?: FunctionsProps) { + super(scope, id); + + this.baseFunction = new lambda_js.NodejsFunction(this, 'base-function', { + entry: 'src/lambda/amplify-status-publisher/index.js', + description: 'Forwards Amplify build status message from SNS to Slack Webhook.', + functionName: 'amplify-status-publisher', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + runtime: lambda.Runtime.NODEJS_14_X, + timeout: Duration.seconds(3), + }).addEnvironment('SLACK_WEBHOOK_URL', SLACK_WEBHOOK_URL); + } } -export class ScraperStatusPublisher extends cdk.Construct { - readonly baseFunction: Function; - - constructor(scope: cdk.Construct, id: string, props?: FunctionsProps) { - super(scope, id); - - this.baseFunction = new NodejsFunction(this, 'base-function', { - entry: 'src/lambda/sfn-status-publisher/index.js', - description: "Forwards scraper execution status message from SNS to Slack Webhook.", - functionName: "scraper-status-publisher", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - runtime: Runtime.NODEJS_14_X, - timeout: Duration.seconds(3), - }).addEnvironment("SLACK_WEBHOOK_URL", SLACK_WEBHOOK_URL); - } +export class ScraperStatusPublisher extends Construct { + readonly baseFunction: lambda.Function; + + constructor(scope: Construct, id: string, props?: FunctionsProps) { + super(scope, id); + + this.baseFunction = new lambda_js.NodejsFunction(this, 'base-function', { + entry: 'src/lambda/sfn-status-publisher/index.js', + description: 'Forwards scraper execution status message from SNS to Slack Webhook.', + functionName: 'scraper-status-publisher', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + runtime: lambda.Runtime.NODEJS_14_X, + timeout: Duration.seconds(3), + }).addEnvironment('SLACK_WEBHOOK_URL', SLACK_WEBHOOK_URL); + } } -export class PreSignupWasedaMailValidator extends cdk.Construct { - readonly baseFunction: Function; - - constructor(scope: cdk.Construct, id: string, props?: FunctionsProps) { - super(scope, id); - - this.baseFunction = new PythonFunction(this, 'base-function', { - entry: 'src/lambda/signup-validator', - description: "Validates if the user is signing up using WasedaMail", - functionName: "wasedamail-signup-validator", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - }); - } +export class PreSignupWasedaMailValidator extends Construct { + readonly baseFunction: lambda.Function; + + constructor(scope: Construct, id: string, props?: FunctionsProps) { + super(scope, id); + + this.baseFunction = new lambda_py.PythonFunction(this, 'base-function', { + entry: 'src/lambda/signup-validator', + description: 'Validates if the user is signing up using WasedaMail', + functionName: 'wasedamail-signup-validator', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + }); + } } -export class TimetableFunctions extends cdk.Construct { - readonly getFunction: Function; - - readonly postFunction: Function; - - readonly patchFunction: Function; - - readonly deleteFunction: Function; - - // readonly importFunction: Function; +export class TimetableFunctions extends Construct { + readonly getFunction: lambda.Function; + readonly postFunction: lambda.Function; + readonly patchFunction: lambda.Function; + readonly deleteFunction: lambda.Function; + // readonly importFunction: lambda.Function; + // readonly exportFunction: lambda.Function; + + constructor(scope: Construct, id: string, props: FunctionsProps) { + super(scope, id); + + const dynamoDBReadRole: iam.LazyRole = new iam.LazyRole(this, 'dynamo-read-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to perform crud operation on dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'dynamodb-lambda-read-timetable', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', + 'arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess'), + ], + }); + + const dynamoDBPutRole: iam.LazyRole = new iam.LazyRole(this, 'dynamo-put-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to perform crud operation on dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'dynamodb-lambda-write-timetable', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', + 'arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess'), + ], + }); + + this.getFunction = new lambda_py.PythonFunction(this, 'get-timetable', { + entry: 'src/lambda/get-timetable', + description: 'Get timetable from the database.', + functionName: 'get-timetable', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + role: dynamoDBReadRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + environment: props.envVars, + }); + + this.postFunction = new lambda_py.PythonFunction(this, 'post-timetable', { + entry: 'src/lambda/post-timetable', + description: 'Save timetable into the database.', + functionName: 'post-timetable', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + role: dynamoDBPutRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + environment: props.envVars, + }); + + this.patchFunction = new lambda_py.PythonFunction(this, 'patch-timetable', { + entry: 'src/lambda/patch-timetable', + description: 'Update timetable in the database.', + functionName: 'patch-timetable', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + role: dynamoDBPutRole, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + environment: props.envVars, + }); + + // this.importFunction = new lambda_py.PythonFunction(this, 'import-timetable', { + // entry: 'src/lambda/import-timetable', + // description: "Import timetable from pdf.", + // functionName: "import-timetable", + // logRetention: logs.RetentionDays.ONE_MONTH, + // memorySize: 256, + // runtime: lambda.Runtime.PYTHON_3_9, + // timeout: Duration.seconds(5), + // }); // - // readonly exportFunction: Function; - - constructor(scope: cdk.Construct, id: string, props: FunctionsProps) { - super(scope, id); - - const dynamoDBReadRole: LazyRole = new LazyRole(this, 'dynamo-read-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to perform crud operation on dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "dynamodb-lambda-read-timetable", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"), - ], - }); - - const dynamoDBPutRole: LazyRole = new LazyRole(this, 'dynamo-put-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to perform crud operation on dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "dynamodb-lambda-write-timetable", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"), - ], - }); - - this.getFunction = new PythonFunction(this, 'get-timetable', { - entry: 'src/lambda/get-timetable', - description: "Get timetable from the database.", - functionName: "get-timetable", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - role: dynamoDBReadRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - environment: props.envVars, - }); - - this.postFunction = new PythonFunction(this, 'post-timetable', { - entry: 'src/lambda/post-timetable', - description: "Save timetable into the database.", - functionName: "post-timetable", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - role: dynamoDBPutRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - environment: props.envVars, - }); - - this.patchFunction = new PythonFunction(this, 'patch-timetable', { - entry: 'src/lambda/patch-timetable', - description: "Update timetable in the database.", - functionName: "patch-timetable", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - role: dynamoDBPutRole, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - environment: props.envVars, - }); - - // this.importFunction = new PythonFunction(this, 'import-timetable', { - // entry: 'src/lambda/import-timetable', - // description: "Import timetable from pdf.", - // functionName: "import-timetable", - // logRetention: RetentionDays.ONE_MONTH, - // memorySize: 256, - // runtime: Runtime.PYTHON_3_9, - // timeout: Duration.seconds(5), - // }); - // - // this.exportFunction = new PythonFunction(this, 'export-timetable', { - // entry: 'src/lambda/export-timetable', - // description: "Export timetable as image.", - // functionName: "export-timetable", - // logRetention: RetentionDays.ONE_MONTH, - // memorySize: 512, - // runtime: Runtime.PYTHON_3_9, - // timeout: Duration.seconds(5), - // }); - } + // this.exportFunction = new lambda_py.PythonFunction(this, 'export-timetable', { + // entry: 'src/lambda/export-timetable', + // description: "Export timetable as image.", + // functionName: "export-timetable", + // logRetention: logs.RetentionDays.ONE_MONTH, + // memorySize: 512, + // runtime: lambda.Runtime.PYTHON_3_9, + // timeout: Duration.seconds(5), + // }); + } } -export class SyllabusFunctions extends cdk.Construct { - readonly getFunction: Function; - - readonly postFunction: Function; - - constructor(scope: cdk.Construct, id: string, props?: FunctionsProps) { - super(scope, id); - - const dynamoDBReadRole: LazyRole = new LazyRole(this, 'dynamo-read-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to perform crud operation on dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "dynamodb-lambda-read-syllabus", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess"), - ], - }); - - this.getFunction = new PythonFunction(this, 'get-course', { - entry: 'src/lambda/get-course', - description: "Get course info from Waseda.", - functionName: "get-course", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 256, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(3), - }); - - const comprehendFullAccessRole: LazyRole = new LazyRole(this, 'comprehend-access-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to interact with AWS Comprehend", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "lambda-comprehend-access", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'comprehend-full-access', - "arn:aws:iam::aws:policy/ComprehendFullAccess"), - ], - }); - - this.postFunction = new PythonFunction(this, 'post-book', { - entry: 'src/lambda/get-book-info', - description: "Analyze reference and output book info.", - functionName: "get-book-info", - logRetention: RetentionDays.ONE_MONTH, - memorySize: 256, - runtime: Runtime.PYTHON_3_9, - role: comprehendFullAccessRole, - timeout: Duration.seconds(10), - }); - } +export class SyllabusFunctions extends Construct { + readonly getFunction: lambda.Function; + readonly postFunction: lambda.Function; + + constructor(scope: Construct, id: string, props?: FunctionsProps) { + super(scope, id); + + const dynamoDBReadRole: iam.LazyRole = new iam.LazyRole(this, 'dynamo-read-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to perform crud operation on dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'dynamodb-lambda-read-syllabus', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-read-only', + 'arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess'), + ], + }); + + this.getFunction = new lambda_py.PythonFunction(this, 'get-course', { + entry: 'src/lambda/get-course', + description: 'Get course info from Waseda.', + functionName: 'get-course', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 256, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(3), + }); + + const comprehendFullAccessRole: iam.LazyRole = new iam.LazyRole(this, 'comprehend-access-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to interact with AWS Comprehend', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'lambda-comprehend-access', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec1', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'comprehend-full-access', + 'arn:aws:iam::aws:policy/ComprehendFullAccess'), + ], + }); + + this.postFunction = new lambda_py.PythonFunction(this, 'post-book', { + entry: 'src/lambda/get-book-info', + description: 'Analyze reference and output book info.', + functionName: 'get-book-info', + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 256, + runtime: lambda.Runtime.PYTHON_3_9, + role: comprehendFullAccessRole, + timeout: Duration.seconds(10), + }); + } } -export class SyllabusUpdateFunction extends cdk.Construct { - readonly updateFunction: Function; - - constructor(scope: cdk.Construct, id: string, props: FunctionsProps) { - super(scope, id); - - const LambdaFullAccess: LazyRole = new LazyRole(this, 'lambda-fullaccess-role', { - assumedBy: new ServicePrincipal(AwsServicePrincipal.LAMBDA), - description: "Allow lambda function to access s3 buckets and dynamodb", - path: `/service-role/${AwsServicePrincipal.LAMBDA}/`, - roleName: "lambda-full-access", - managedPolicies: [ - ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"), - ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', - "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"), - ManagedPolicy.fromManagedPolicyArn(this, 's3-read-only', - "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"), - ], - }); - - this.updateFunction = new PythonFunction(this, 'update-syllabus', { - entry: 'src/lambda/update-syllabus', - description: 'Update syllabus when S3 bucket is updated.', - functionName: "update-syllabus", - role: LambdaFullAccess, - logRetention: RetentionDays.ONE_MONTH, - memorySize: 128, - runtime: Runtime.PYTHON_3_9, - timeout: Duration.seconds(60), - environment: props.envVars, - }); - } +export class SyllabusUpdateFunction extends Construct { + readonly updateFunction: lambda.Function; + + constructor(scope: Construct, id: string, props: FunctionsProps) { + super(scope, id); + + const LambdaFullAccess = new iam.LazyRole(this, 'lambda-fullaccess-role', { + assumedBy: new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA), + description: 'Allow lambda function to access s3 buckets and dynamodb', + path: `/service-role/${ AwsServicePrincipal.LAMBDA }/`, + roleName: 'lambda-full-access', + managedPolicies: [ + iam.ManagedPolicy.fromManagedPolicyArn(this, 'basic-exec', + 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 'db-full-access', + 'arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess'), + iam.ManagedPolicy.fromManagedPolicyArn(this, 's3-read-only', + 'arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess'), + ], + }); + + this.updateFunction = new lambda_py.PythonFunction(this, 'update-syllabus', { + entry: 'src/lambda/update-syllabus', + description: 'Update syllabus when S3 bucket is updated.', + functionName: 'update-syllabus', + role: LambdaFullAccess, + logRetention: logs.RetentionDays.ONE_MONTH, + memorySize: 128, + runtime: lambda.Runtime.PYTHON_3_9, + timeout: Duration.seconds(60), + environment: props.envVars, + }); + } } diff --git a/lib/constructs/persistence/data-pipeline.ts b/lib/constructs/persistence/data-pipeline.ts index beaa78994..6ef0daf2a 100644 --- a/lib/constructs/persistence/data-pipeline.ts +++ b/lib/constructs/persistence/data-pipeline.ts @@ -1,171 +1,157 @@ -import * as cdk from '@aws-cdk/core'; -import {Construct, RemovalPolicy} from '@aws-cdk/core'; -import * as s3 from "@aws-cdk/aws-s3"; -import {BlockPublicAccess, Bucket, BucketAccessControl, BucketEncryption} from "@aws-cdk/aws-s3"; -import {StateMachine, Succeed, TaskInput} from "@aws-cdk/aws-stepfunctions"; -import {LambdaInvocationType, LambdaInvoke} from "@aws-cdk/aws-stepfunctions-tasks"; -import {Function} from "@aws-cdk/aws-lambda"; -import {AttributeType, BillingMode, Table, TableEncryption} from "@aws-cdk/aws-dynamodb"; -import {Rule} from "@aws-cdk/aws-events"; -import {SfnStateMachine} from "@aws-cdk/aws-events-targets"; - -import {SyllabusScraper, SyllabusUpdateFunction} from "../common/lambda-functions"; -import {prodCorsRule} from "../../configs/s3/cors"; -import {syllabusSchedule} from "../../configs/event/schedule"; -import {allowApiGatewayPolicy, allowLambdaPolicy} from "../../utils/s3"; -import {S3EventSource} from '@aws-cdk/aws-lambda-event-sources'; +import { RemovalPolicy } from 'aws-cdk-lib'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import * as events from 'aws-cdk-lib/aws-events'; +import * as events_targets from 'aws-cdk-lib/aws-events-targets'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as event_sources from 'aws-cdk-lib/aws-lambda-event-sources'; +import * as s3 from 'aws-cdk-lib/aws-s3'; +import * as sfn from 'aws-cdk-lib/aws-stepfunctions'; +import * as sfn_tasks from 'aws-cdk-lib/aws-stepfunctions-tasks'; +import { Construct } from 'constructs'; +import { syllabusSchedule } from '../../configs/event/schedule'; +import { prodCorsRule } from '../../configs/s3/cors'; +import { allowApiGatewayPolicy, allowLambdaPolicy } from '../../utils/s3'; +import { SyllabusScraper, SyllabusUpdateFunction } from '../common/lambda-functions'; export enum Worker { - SYLLABUS, - CAREER, - FEEDS + SYLLABUS, + CAREER, + FEEDS } export interface DataPipelineProps { - dataSource?: Bucket; - - dataWarehouse?: Table; + dataSource?: s3.Bucket; + dataWarehouse?: dynamodb.Table; } export abstract class AbstractDataPipeline extends Construct { - abstract readonly dataSource?: Bucket; - - abstract readonly processor: Function | StateMachine; - - abstract readonly dataWarehouse: Bucket | Table; + abstract readonly dataSource?: s3.Bucket; + abstract readonly processor: lambda.Function | sfn.StateMachine; + abstract readonly dataWarehouse: s3.Bucket | dynamodb.Table; } export class SyllabusDataPipeline extends AbstractDataPipeline { - readonly dataSource?: Bucket; - - readonly processor: StateMachine; - - readonly dataWarehouse: Bucket; - - readonly schedules: { [name: string]: Rule } = {}; - - constructor(scope: cdk.Construct, id: string, props?: DataPipelineProps) { - super(scope, id); - - this.dataWarehouse = new Bucket(this, 'syllabus-bucket', { - accessControl: BucketAccessControl.PRIVATE, - blockPublicAccess: BlockPublicAccess.BLOCK_ALL, - bucketName: "wasedatime-syllabus-prod", - cors: prodCorsRule, - encryption: BucketEncryption.S3_MANAGED, - publicReadAccess: false, - removalPolicy: RemovalPolicy.RETAIN, - versioned: true, - }); - allowApiGatewayPolicy(this.dataWarehouse); - allowLambdaPolicy(this.dataWarehouse); - - const scraperBaseFunction: Function = new SyllabusScraper(this, 'scraper-base-function', { - envVars: { - ["BUCKET_NAME"]: this.dataWarehouse.bucketName, - ["OBJECT_PATH"]: 'syllabus/', - }, - }).baseFunction; - - function getLambdaTaskInstance(schools: string[], num: string): LambdaInvoke { - return new LambdaInvoke(scope, "task-" + num, { - lambdaFunction: scraperBaseFunction, - comment: "Scrape the syllabus info of school(s).", - invocationType: LambdaInvocationType.REQUEST_RESPONSE, - payload: TaskInput.fromObject({schools: schools}), - qualifier: scraperBaseFunction.latestVersion.version, - }); - } - - // todo sync to table - this.processor = new StateMachine(this, 'state-machine', { - stateMachineName: 'syllabus-scraper', - definition: getLambdaTaskInstance(["GEC"], "0") - .next(getLambdaTaskInstance(["CMS", "HSS"], "1")) - .next(getLambdaTaskInstance(["EDU", "FSE"], "2")) - .next(getLambdaTaskInstance(["ASE", "CSE"], "3")) - .next(getLambdaTaskInstance(["PSE", "G_ASE", "LAW"], "4")) - .next(getLambdaTaskInstance(["G_FSE", "SOC", "SSS"], "5")) - .next(getLambdaTaskInstance(["G_LAS", "G_CSE", "G_EDU", "HUM"], "6")) - .next(getLambdaTaskInstance(["SILS", "G_HUM", "CJL", "SPS", "G_WBS", "G_PS"], "7")) - .next(getLambdaTaskInstance(["G_SPS", "G_IPS", "G_WLS", "G_E", "G_SSS", "G_SC", "G_LAW", - "G_SAPS", "G_SA", "G_SJAL", "G_SICCS", "G_SEEE", "EHUM", "ART", "CIE", "G_ITS"], "8")) - .next(new Succeed(this, 'success', {})), - }); - - for (const name in syllabusSchedule) { - this.schedules[name] = new Rule(this, name, { - ruleName: name, - enabled: true, - schedule: syllabusSchedule[name], - targets: [new SfnStateMachine(this.processor)], - }, - ); - } + readonly dataSource?: s3.Bucket; + readonly processor: sfn.StateMachine; + readonly dataWarehouse: s3.Bucket; + readonly schedules: { [name: string]: events.Rule } = {}; + + constructor(scope: Construct, id: string, props?: DataPipelineProps) { + super(scope, id); + + this.dataWarehouse = new s3.Bucket(this, 'syllabus-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + bucketName: 'wasedatime-syllabus-prod', + cors: prodCorsRule, + encryption: s3.BucketEncryption.S3_MANAGED, + publicReadAccess: false, + removalPolicy: RemovalPolicy.RETAIN, + versioned: true, + }); + allowApiGatewayPolicy(this.dataWarehouse); + allowLambdaPolicy(this.dataWarehouse); + + const scraperBaseFunction: lambda.Function = new SyllabusScraper(this, 'scraper-base-function', { + envVars: { + ['BUCKET_NAME']: this.dataWarehouse.bucketName, + ['OBJECT_PATH']: 'syllabus/', + }, + }).baseFunction; + + function getLambdaTaskInstance(schools: string[], num: string): sfn_tasks.LambdaInvoke { + return new sfn_tasks.LambdaInvoke(scope, 'task-' + num, { + lambdaFunction: scraperBaseFunction, + comment: 'Scrape the syllabus info of school(s).', + invocationType: sfn_tasks.LambdaInvocationType.REQUEST_RESPONSE, + payload: sfn.TaskInput.fromObject({ schools: schools }), + qualifier: scraperBaseFunction.latestVersion.version, + }); } + + // todo sync to table + this.processor = new sfn.StateMachine(this, 'state-machine', { + stateMachineName: 'syllabus-scraper', + definition: getLambdaTaskInstance(['GEC'], '0') + .next(getLambdaTaskInstance(['CMS', 'HSS'], '1')) + .next(getLambdaTaskInstance(['EDU', 'FSE'], '2')) + .next(getLambdaTaskInstance(['ASE', 'CSE'], '3')) + .next(getLambdaTaskInstance(['PSE', 'G_ASE', 'LAW'], '4')) + .next(getLambdaTaskInstance(['G_FSE', 'SOC', 'SSS'], '5')) + .next(getLambdaTaskInstance(['G_LAS', 'G_CSE', 'G_EDU', 'HUM'], '6')) + .next(getLambdaTaskInstance(['SILS', 'G_HUM', 'CJL', 'SPS', 'G_WBS', 'G_PS'], '7')) + .next(getLambdaTaskInstance(['G_SPS', 'G_IPS', 'G_WLS', 'G_E', 'G_SSS', 'G_SC', 'G_LAW', + 'G_SAPS', 'G_SA', 'G_SJAL', 'G_SICCS', 'G_SEEE', 'EHUM', 'ART', 'CIE', 'G_ITS'], '8')) + .next(new sfn.Succeed(this, 'success', {})), + }); + + for (const name in syllabusSchedule) { + this.schedules[name] = new events.Rule(this, name, { + ruleName: name, + enabled: true, + schedule: syllabusSchedule[name], + targets: [new events_targets.SfnStateMachine(this.processor)], + }); + } + } } //todo add s3 deployment and notifications - export class CareerDataPipeline extends AbstractDataPipeline { - readonly dataSource?: Bucket; - - readonly processor: Function; - - readonly dataWarehouse: Table; - - constructor(scope: cdk.Construct, id: string, props?: DataPipelineProps) { - super(scope, id); - - this.dataSource = new Bucket(this, 'career-bucket', { - accessControl: BucketAccessControl.PRIVATE, - blockPublicAccess: BlockPublicAccess.BLOCK_ALL, - bucketName: "wasedatime-career", - cors: prodCorsRule, - encryption: BucketEncryption.S3_MANAGED, - publicReadAccess: false, - removalPolicy: RemovalPolicy.RETAIN, - versioned: false, - }); - } + readonly dataSource?: s3.Bucket; + readonly processor: lambda.Function; + readonly dataWarehouse: dynamodb.Table; + + constructor(scope: Construct, id: string, props?: DataPipelineProps) { + super(scope, id); + + this.dataSource = new s3.Bucket(this, 'career-bucket', { + accessControl: s3.BucketAccessControl.PRIVATE, + blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, + bucketName: 'wasedatime-career', + cors: prodCorsRule, + encryption: s3.BucketEncryption.S3_MANAGED, + publicReadAccess: false, + removalPolicy: RemovalPolicy.RETAIN, + versioned: false, + }); + } } // sync syllabus on notification export class SyllabusSyncPipeline extends AbstractDataPipeline { - readonly dataSource: Bucket; - - readonly processor: Function; - - readonly dataWarehouse: Table; - - constructor(scope: cdk.Construct, id: string, props?: DataPipelineProps) { - super(scope, id); - - this.dataWarehouse = new Table(this, 'dynamodb-syllabus-table', { - partitionKey: {name: "school", type: AttributeType.STRING}, - sortKey: {name: "id", type: AttributeType.STRING}, - billingMode: BillingMode.PROVISIONED, - encryption: TableEncryption.DEFAULT, - removalPolicy: cdk.RemovalPolicy.RETAIN, - timeToLiveAttribute: "ttl", - tableName: "waseda-syllabus", - readCapacity: 1, - writeCapacity: 1, - }); - //Use exsisting s3 bucket - this.dataSource = props?.dataSource!; - - this.processor = new SyllabusUpdateFunction(this, 'syllabus-update-function', { - envVars: { - ["BUCKET_NAME"]: this.dataSource.bucketName, - ['TABLE_NAME']: this.dataWarehouse.tableName, - ["OBJECT_PATH"]: 'syllabus/', - }, - }).updateFunction; - - this.processor.addEventSource(new S3EventSource(this.dataSource, { - events: [s3.EventType.OBJECT_CREATED_PUT], - filters: [{prefix: 'syllabus/'}], - })); - } + readonly dataSource: s3.Bucket; + readonly processor: lambda.Function; + readonly dataWarehouse: dynamodb.Table; + + constructor(scope: Construct, id: string, props: DataPipelineProps) { + super(scope, id); + + this.dataWarehouse = new dynamodb.Table(this, 'dynamodb-syllabus-table', { + partitionKey: { name: 'school', type: dynamodb.AttributeType.STRING }, + sortKey: { name: 'id', type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PROVISIONED, + encryption: dynamodb.TableEncryption.DEFAULT, + removalPolicy: RemovalPolicy.RETAIN, + timeToLiveAttribute: 'ttl', + tableName: 'waseda-syllabus', + readCapacity: 1, + writeCapacity: 1, + }); + //Use exsisting s3 bucket + this.dataSource = props.dataSource!; + + this.processor = new SyllabusUpdateFunction(this, 'syllabus-update-function', { + envVars: { + ['BUCKET_NAME']: this.dataSource.bucketName, + ['TABLE_NAME']: this.dataWarehouse.tableName, + ['OBJECT_PATH']: 'syllabus/', + }, + }).updateFunction; + + this.processor.addEventSource(new event_sources.S3EventSource(this.dataSource, { + events: [s3.EventType.OBJECT_CREATED_PUT], + filters: [{ prefix: 'syllabus/' }], + })); + } } diff --git a/lib/constructs/persistence/database.ts b/lib/constructs/persistence/database.ts index 77be289c2..73e2d6206 100644 --- a/lib/constructs/persistence/database.ts +++ b/lib/constructs/persistence/database.ts @@ -1,67 +1,64 @@ -import * as cdk from "@aws-cdk/core"; -import {AttributeType, BillingMode, Table, TableEncryption} from "@aws-cdk/aws-dynamodb"; +import { RemovalPolicy } from 'aws-cdk-lib'; +import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; +import { Construct } from 'constructs'; export enum Collection { - COURSE_REVIEW, - CAREER, - FEEDS, - SYLLABUS, - TIMETABLE, + COURSE_REVIEW, + CAREER, + FEEDS, + SYLLABUS, + TIMETABLE, } -export interface DatabaseProps { +export class DynamoDatabase extends Construct { + readonly tables: { [name: number]: dynamodb.Table } = {}; -} - -export class DynamoDatabase extends cdk.Construct { - readonly tables: { [name: number]: Table } = {}; - - constructor(scope: cdk.Construct, id: string, props?: DatabaseProps) { - super(scope, id); + constructor(scope: Construct, id: string) { + super(scope, id); - this.tables[Collection.COURSE_REVIEW] = new Table(this, 'dynamodb-review-table', { - partitionKey: {name: "course_key", type: AttributeType.STRING}, - billingMode: BillingMode.PROVISIONED, - encryption: TableEncryption.DEFAULT, - removalPolicy: cdk.RemovalPolicy.RETAIN, - sortKey: {name: "created_at", type: AttributeType.STRING}, - tableName: "course-review", - readCapacity: 10, - writeCapacity: 7, - pointInTimeRecovery: true, - }); + this.tables[Collection.COURSE_REVIEW] = new dynamodb.Table(this, 'dynamodb-review-table', { + partitionKey: { name: 'course_key', type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PROVISIONED, + encryption: dynamodb.TableEncryption.DEFAULT, + removalPolicy: RemovalPolicy.RETAIN, + sortKey: { name: 'created_at', type: dynamodb.AttributeType.STRING }, + tableName: 'course-review', + readCapacity: 10, + writeCapacity: 7, + pointInTimeRecovery: true, + }); - this.tables[Collection.CAREER] = new Table(this, 'dynamodb-career-table', { - partitionKey: {name: "type", type: AttributeType.STRING}, - billingMode: BillingMode.PROVISIONED, - encryption: TableEncryption.DEFAULT, - removalPolicy: cdk.RemovalPolicy.RETAIN, - sortKey: {name: "created_at", type: AttributeType.STRING}, - tableName: "career", - readCapacity: 1, - writeCapacity: 1, - }); + this.tables[Collection.CAREER] = new dynamodb.Table(this, 'dynamodb-career-table', { + partitionKey: { name: 'type', type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PROVISIONED, + encryption: dynamodb.TableEncryption.DEFAULT, + removalPolicy: RemovalPolicy.RETAIN, + sortKey: { name: 'created_at', type: dynamodb.AttributeType.STRING }, + tableName: 'career', + readCapacity: 1, + writeCapacity: 1, + }); - this.tables[Collection.FEEDS] = new Table(this, 'dynamodb-feeds-table', { - partitionKey: {name: "category", type: AttributeType.STRING}, - billingMode: BillingMode.PROVISIONED, - encryption: TableEncryption.DEFAULT, - removalPolicy: cdk.RemovalPolicy.RETAIN, - sortKey: {name: "created_at", type: AttributeType.STRING}, - tableName: "feeds", - readCapacity: 1, - writeCapacity: 1, - }); + this.tables[Collection.FEEDS] = new dynamodb.Table(this, 'dynamodb-feeds-table', { + partitionKey: { name: 'category', type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PROVISIONED, + encryption: dynamodb.TableEncryption.DEFAULT, + removalPolicy: RemovalPolicy.RETAIN, + sortKey: { name: 'created_at', type: dynamodb.AttributeType.STRING }, + tableName: 'feeds', + readCapacity: 1, + writeCapacity: 1, + }); - this.tables[Collection.TIMETABLE] = new Table(this, 'dynamodb-timetable-table', { - partitionKey: {name: "uid", type: AttributeType.STRING}, - billingMode: BillingMode.PROVISIONED, - encryption: TableEncryption.DEFAULT, - removalPolicy: cdk.RemovalPolicy.RETAIN, - tableName: "timetable", - readCapacity: 12, - writeCapacity: 15, - pointInTimeRecovery: true, - }); - } + this.tables[Collection.TIMETABLE] = new dynamodb.Table(this, 'dynamodb-timetable-table', { + partitionKey: { name: 'uid', type: dynamodb.AttributeType.STRING }, + billingMode: dynamodb.BillingMode.PROVISIONED, + encryption: dynamodb.TableEncryption.DEFAULT, + removalPolicy: RemovalPolicy.RETAIN, + tableName: 'timetable', + readCapacity: 12, + writeCapacity: 15, + pointInTimeRecovery: true, + }); + } } diff --git a/lib/constructs/presentation/web-app.ts b/lib/constructs/presentation/web-app.ts index 97e609d2a..290588826 100644 --- a/lib/constructs/presentation/web-app.ts +++ b/lib/constructs/presentation/web-app.ts @@ -1,137 +1,135 @@ -import * as cdk from "@aws-cdk/core"; -import {App, Branch, CustomRule, Domain, RedirectStatus} from "@aws-cdk/aws-amplify"; - -import {developerAuth} from "../../configs/amplify/website"; -import {bitToken, feedsDeployKey, microAppBuildSpec, microAppDevBuildSpec} from "../../configs/amplify/build-setting"; -import {webAppCode} from "../../configs/amplify/codebase"; -import {ROOT_DOMAIN} from "../../configs/route53/domain"; +import * as amplify from '@aws-cdk/aws-amplify-alpha'; +import { Construct } from 'constructs'; +import { + BIT_TOKEN, + FEEDS_DEPLOY_KEY, + microAppBuildSpec, + microAppDevBuildSpec, +} from '../../configs/amplify/build-setting'; +import { webAppCode } from '../../configs/amplify/codebase'; +import { developerAuth } from '../../configs/amplify/website'; +import { ROOT_DOMAIN } from '../../configs/route53/domain'; export interface WebAppProps { - apiDomain?: string; - - authDomain?: string; + apiDomain?: string; + authDomain?: string; } -export abstract class AbstractWebApp extends cdk.Construct { - abstract readonly app: App; - - abstract readonly branches?: { [env: string]: Branch }; +export abstract class AbstractWebApp extends Construct { + abstract readonly app: amplify.App; + abstract readonly branches?: { [env: string]: amplify.Branch }; + abstract readonly domain?: amplify.Domain; - abstract readonly domain?: Domain; - - protected constructor(scope: cdk.Construct, id: string, props: WebAppProps) { - super(scope, id); - } + protected constructor(scope: Construct, id: string, props: WebAppProps) { + super(scope, id); + } } export class AmplifyMonoWebApp extends AbstractWebApp { - readonly app: App; - - readonly branches: { [key: string]: Branch } = {}; - - readonly domain: Domain; - - readonly microApps: { [key: string]: App } = {}; - - private readonly appProps: WebAppProps; - - constructor(scope: cdk.Construct, id: string, props: WebAppProps) { - super(scope, id, props); - - this.appProps = props; - - this.app = new App(this, 'root-app', { - appName: "wasedatime-web-root", - autoBranchDeletion: false, - buildSpec: microAppBuildSpec("root"), - description: "A web app aiming to provide better campus life at Waseda University.", - environmentVariables: { - "REACT_APP_API_BASE_URL": `https://${props.apiDomain}/v1`, - "REACT_APP_OAUTH_URL": `https://${props.authDomain}`, - "NODE_OPTIONS": "--max-old-space-size=8192", - "BIT_TOKEN": bitToken, - "DEPLOY_KEY": feedsDeployKey, - }, - sourceCodeProvider: webAppCode, - autoBranchCreation: { - autoBuild: true, - patterns: ['release/*'], - basicAuth: developerAuth, - pullRequestPreview: false, - buildSpec: microAppDevBuildSpec("root"), - }, - }); - this.microApps['root'] = this.app; - - const masterBranch: Branch = this.app.addBranch('master', { - autoBuild: false, - branchName: "master", - stage: "PRODUCTION", - buildSpec: microAppBuildSpec("root"), - }).addEnvironment("REACT_APP_API_BASE_URL", `https://${props.apiDomain}/v1`); - this.branches["main"] = masterBranch; - - const devBranch: Branch = this.app.addBranch('dev', { - autoBuild: false, - basicAuth: developerAuth, - branchName: "develop", - stage: "DEVELOPMENT", - buildSpec: microAppDevBuildSpec("root"), - }).addEnvironment("REACT_APP_API_BASE_URL", `https://${props.apiDomain}/staging`); - this.branches["dev"] = devBranch; - - this.domain = this.app.addDomain('domain', { - domainName: ROOT_DOMAIN, - subDomains: [ - {branch: devBranch, prefix: "dev"}, - {branch: masterBranch, prefix: ''}, - {branch: masterBranch, prefix: 'www'}, - ], - }); - } - - public addMicroApp(name: string) { - const microApp = new App(this, `${name}-app`, { - appName: `wasedatime-web-${name}`, - autoBranchDeletion: false, - buildSpec: microAppBuildSpec(name), - environmentVariables: { - "REACT_APP_API_BASE_URL": `https://${this.appProps.apiDomain}/v1`, - "REACT_APP_OAUTH_URL": `https://${this.appProps.authDomain}`, - "NODE_OPTIONS": "--max-old-space-size=8192", - "BIT_TOKEN": bitToken, - }, - sourceCodeProvider: webAppCode, - autoBranchCreation: { - autoBuild: true, - patterns: ['release/*'], - basicAuth: developerAuth, - pullRequestPreview: false, - buildSpec: microAppDevBuildSpec(name), - }, - }); - this.microApps[name] = microApp; - - microApp.addBranch('master', { - autoBuild: false, - branchName: "master", - stage: "PRODUCTION", - buildSpec: microAppBuildSpec(name), - }).addEnvironment("REACT_APP_API_BASE_URL", `https://${this.appProps.apiDomain}/v1`); - - microApp.addBranch('dev', { - autoBuild: false, - branchName: "develop", - stage: "DEVELOPMENT", - buildSpec: microAppDevBuildSpec(name), - }).addEnvironment("REACT_APP_API_BASE_URL", `https://${this.appProps.apiDomain}/staging`); - - const appDomain = this.microApps[name].defaultDomain; - this.app.addCustomRule(new CustomRule({ - source: `/${name}/<*>`, - target: `https://master.${appDomain}/<*>`, - status: RedirectStatus.REWRITE, - })); - this.app.addEnvironment(`MF_${name.toUpperCase()}_DOMAIN`, appDomain); - } + readonly app: amplify.App; + readonly branches: { [key: string]: amplify.Branch } = {}; + readonly domain: amplify.Domain; + readonly microApps: { [key: string]: amplify.App } = {}; + + private readonly appProps: WebAppProps; + + constructor(scope: Construct, id: string, props: WebAppProps) { + super(scope, id, props); + + this.appProps = props; + + this.app = new amplify.App(this, 'root-app', { + appName: 'wasedatime-web-root', + autoBranchDeletion: false, + buildSpec: microAppBuildSpec('root'), + description: 'A web app aiming to provide better campus life at Waseda University.', + environmentVariables: { + REACT_APP_API_BASE_URL: `https://${ props.apiDomain }/v1`, + REACT_APP_OAUTH_URL: `https://${ props.authDomain }`, + NODE_OPTIONS: '--max-old-space-size=8192', + BIT_TOKEN: BIT_TOKEN, + DEPLOY_KEY: FEEDS_DEPLOY_KEY, + }, + sourceCodeProvider: webAppCode, + autoBranchCreation: { + autoBuild: true, + patterns: ['release/*'], + basicAuth: developerAuth, + pullRequestPreview: false, + buildSpec: microAppDevBuildSpec('root'), + }, + }); + this.microApps.root = this.app; + + const masterBranch = this.app.addBranch('master', { + autoBuild: false, + branchName: 'master', + stage: 'PRODUCTION', + buildSpec: microAppBuildSpec('root'), + }).addEnvironment('REACT_APP_API_BASE_URL', `https://${ props.apiDomain }/v1`); + this.branches.main = masterBranch; + + const devBranch = this.app.addBranch('dev', { + autoBuild: false, + basicAuth: developerAuth, + branchName: 'develop', + stage: 'DEVELOPMENT', + buildSpec: microAppDevBuildSpec('root'), + }).addEnvironment('REACT_APP_API_BASE_URL', `https://${ props.apiDomain }/staging`); + this.branches.dev = devBranch; + + this.domain = this.app.addDomain('domain', { + domainName: ROOT_DOMAIN, + subDomains: [ + { branch: devBranch, prefix: 'dev' }, + { branch: masterBranch, prefix: '' }, + { branch: masterBranch, prefix: 'www' }, + ], + }); + } + + public addMicroApp(name: string) { + const microApp = new amplify.App(this, `${ name }-app`, { + appName: `wasedatime-web-${ name }`, + autoBranchDeletion: false, + buildSpec: microAppBuildSpec(name), + environmentVariables: { + REACT_APP_API_BASE_URL: `https://${ this.appProps.apiDomain }/v1`, + REACT_APP_OAUTH_URL: `https://${ this.appProps.authDomain }`, + NODE_OPTIONS: '--max-old-space-size=8192', + BIT_TOKEN: BIT_TOKEN, + }, + sourceCodeProvider: webAppCode, + autoBranchCreation: { + autoBuild: true, + patterns: ['release/*'], + basicAuth: developerAuth, + pullRequestPreview: false, + buildSpec: microAppDevBuildSpec(name), + }, + }); + this.microApps[name] = microApp; + + microApp.addBranch('master', { + autoBuild: false, + branchName: 'master', + stage: 'PRODUCTION', + buildSpec: microAppBuildSpec(name), + }).addEnvironment('REACT_APP_API_BASE_URL', `https://${ this.appProps.apiDomain }/v1`); + + microApp.addBranch('dev', { + autoBuild: false, + branchName: 'develop', + stage: 'DEVELOPMENT', + buildSpec: microAppDevBuildSpec(name), + }).addEnvironment('REACT_APP_API_BASE_URL', `https://${ this.appProps.apiDomain }/staging`); + + const appDomain = this.microApps[name].defaultDomain; + this.app.addCustomRule(new amplify.CustomRule({ + source: `/${ name }/<*>`, + target: `https://master.${ appDomain }/<*>`, + status: amplify.RedirectStatus.REWRITE, + })); + this.app.addEnvironment(`MF_${ name.toUpperCase() }_DOMAIN`, appDomain); + } } diff --git a/lib/stacks/admin.ts b/lib/stacks/admin.ts index a56c4e3b1..edfda03e8 100644 --- a/lib/stacks/admin.ts +++ b/lib/stacks/admin.ts @@ -1,50 +1,48 @@ -import * as cdk from "@aws-cdk/core"; -import {SlackChannelConfiguration} from "@aws-cdk/aws-chatbot/lib/slack-channel-configuration"; -import {Topic} from "@aws-cdk/aws-sns"; - -import {AdminLayer} from "../architecture/layers"; -import {OperationInterface} from "../architecture/interfaces"; -import {OperationEndpoint} from "../configs/common/registry"; +import { StackProps } from 'aws-cdk-lib'; +import * as chatbot from 'aws-cdk-lib/aws-chatbot'; +import * as sns from 'aws-cdk-lib/aws-sns'; +import { Construct } from 'constructs'; +import { OperationInterface } from '../architecture/interfaces'; +import { AdminLayer } from '../architecture/layers'; +import { SLACK_CHANNEL_ID, SLACK_WORKSPACE_ID } from '../configs/chatbot/slack'; +import { CF_TOPIC_ARN } from '../configs/common/arn'; +import { OperationEndpoint } from '../configs/common/registry'; +import { FreeTierUsageBudget } from '../constructs/admin/budget'; +import { GlobalTrailLogs } from '../constructs/admin/log'; import { - AbstractStatusNotifier, - AmplifyBuildStatusNotifier, - StatusNotifier, - SyllabusScraperStatusNotifier, -} from "../constructs/admin/status-notifier"; -import {SLACK_CHANNEL_ID, SLACK_WORKSPACE_ID} from "../configs/chatbot/slack"; -import {FreeTierUsageBudget} from "../constructs/admin/budget"; -import {CF_TOPIC_ARN} from "../configs/common/arn"; -import {GlobalTrailLogs} from "../constructs/admin/log"; + AbstractStatusNotifier, + AmplifyBuildStatusNotifier, + StatusNotifier, + SyllabusScraperStatusNotifier, +} from '../constructs/admin/status-notifier'; export class WasedaTimeAdminLayer extends AdminLayer { - readonly statusNotifiers: { [name in StatusNotifier]?: AbstractStatusNotifier } = {}; - - readonly chatbot: SlackChannelConfiguration; - - readonly trail: GlobalTrailLogs; - - constructor(scope: cdk.Construct, id: string, operationInterface: OperationInterface, props: cdk.StackProps) { - super(scope, id, operationInterface, props); - - this.statusNotifiers[StatusNotifier.BUILD_STATUS] = new AmplifyBuildStatusNotifier(this, 'build-notifier', { - targets: this.operationInterface.getEndpoint(OperationEndpoint.APP), - }); - this.statusNotifiers[StatusNotifier.SCRAPER_STATUS] = new SyllabusScraperStatusNotifier(this, 'scraper-notifier', { - targets: this.operationInterface.getEndpoint(OperationEndpoint.SYLLABUS), - }); - - const freeTierBudget = new FreeTierUsageBudget(this, 'free-tier-budget'); - - this.chatbot = new SlackChannelConfiguration(this, 'chatbot-slack-config', { - slackChannelConfigurationName: 'aws-alert', - slackChannelId: SLACK_CHANNEL_ID, - slackWorkspaceId: SLACK_WORKSPACE_ID, - notificationTopics: [ - freeTierBudget.notification, - Topic.fromTopicArn(this, 'stack-topic', CF_TOPIC_ARN), - ], - }); - - this.trail = new GlobalTrailLogs(this, 'cloudtrail-logs'); - } + readonly statusNotifiers: { [name in StatusNotifier]?: AbstractStatusNotifier } = {}; + readonly chatbot: chatbot.SlackChannelConfiguration; + readonly trail: GlobalTrailLogs; + + constructor(scope: Construct, id: string, operationInterface: OperationInterface, props: StackProps) { + super(scope, id, operationInterface, props); + + this.statusNotifiers[StatusNotifier.BUILD_STATUS] = new AmplifyBuildStatusNotifier(this, 'build-notifier', { + targets: this.operationInterface.getEndpoint(OperationEndpoint.APP), + }); + this.statusNotifiers[StatusNotifier.SCRAPER_STATUS] = new SyllabusScraperStatusNotifier(this, 'scraper-notifier', { + targets: this.operationInterface.getEndpoint(OperationEndpoint.SYLLABUS), + }); + + const freeTierBudget = new FreeTierUsageBudget(this, 'free-tier-budget'); + + this.chatbot = new chatbot.SlackChannelConfiguration(this, 'chatbot-slack-config', { + slackChannelConfigurationName: 'aws-alert', + slackChannelId: SLACK_CHANNEL_ID, + slackWorkspaceId: SLACK_WORKSPACE_ID, + notificationTopics: [ + freeTierBudget.notification, + sns.Topic.fromTopicArn(this, 'stack-topic', CF_TOPIC_ARN), + ], + }); + + this.trail = new GlobalTrailLogs(this, 'cloudtrail-logs'); + } } diff --git a/lib/stacks/business.ts b/lib/stacks/business.ts index 814d19ec6..ce55a331e 100644 --- a/lib/stacks/business.ts +++ b/lib/stacks/business.ts @@ -1,50 +1,49 @@ -import * as cdk from "@aws-cdk/core"; -import {IHostedZone} from "@aws-cdk/aws-route53"; - +import { StackProps } from 'aws-cdk-lib'; +import * as route53 from 'aws-cdk-lib/aws-route53'; +import { Construct } from 'constructs'; +import { DataInterface } from '../architecture/interfaces'; +import { BusinessLayer } from '../architecture/layers'; +import { DataEndpoint, ServiceEndpoint } from '../configs/common/registry'; import { - AbstractApiEndpoint, - AbstractRestApiEndpoint, - WasedaTimeRestApiEndpoint, -} from "../constructs/business/api-endpoint"; -import {DataEndpoint, ServiceEndpoint} from "../configs/common/registry"; -import {BusinessLayer} from "../architecture/layers"; -import {DataInterface} from "../architecture/interfaces"; -import {AbstractAuthProvider, WasedaTimeUserAuth} from "../constructs/business/authentication"; + AbstractApiEndpoint, + AbstractRestApiEndpoint, + WasedaTimeRestApiEndpoint, +} from '../constructs/business/api-endpoint'; +import { AbstractAuthProvider, WasedaTimeUserAuth } from '../constructs/business/authentication'; export class WasedaTimeBusinessLayer extends BusinessLayer { - apiEndpoints: { [name: string]: AbstractApiEndpoint } = {}; - - authProvider: AbstractAuthProvider; - - constructor(scope: cdk.Construct, id: string, dataInterface: DataInterface, hostedZone: IHostedZone, props: cdk.StackProps) { - super(scope, id, dataInterface, props); - - const authEndpoint = new WasedaTimeUserAuth(this, 'cognito-endpoint', hostedZone); - this.authProvider = authEndpoint; - - const restApiEndpoint: AbstractRestApiEndpoint = new WasedaTimeRestApiEndpoint(this, 'rest-api-endpoint', { - zone: hostedZone, - authProvider: authEndpoint.pool, - }); - this.apiEndpoints["rest-api"] = restApiEndpoint; - - // const graphqlApiEndpoint: AbstractGraphqlEndpoint = new WasedaTimeGraphqlEndpoint(this, 'graphql-api-endpoint', { - // zone: hostedZone, - // authProvider: authEndpoint.pool, - // }); - // this.apiEndpoints["graphql-api"] = graphqlApiEndpoint; - // - // graphqlApiEndpoint.addService("course", this.dataInterface.getEndpoint(DataEndpoint.COURSE)); - - restApiEndpoint.addService("syllabus", this.dataInterface.getEndpoint(DataEndpoint.SYLLABUS)) - .addService("course-reviews", this.dataInterface.getEndpoint(DataEndpoint.COURSE_REVIEWS), true) - .addService("career") - .addService("timetable", this.dataInterface.getEndpoint(DataEndpoint.TIMETABLE), true); - // .addService("graphql", graphqlApiEndpoint.apiEndpoint.graphqlUrl); - restApiEndpoint.deploy(); - - this.serviceInterface.setEndpoint(ServiceEndpoint.API_REST, restApiEndpoint.getDomain()); - // this.serviceInterface.setEndpoint(ServiceEndpoint.API_GRAPHQL, graphqlApiEndpoint.getDomain()); - this.serviceInterface.setEndpoint(ServiceEndpoint.AUTH, authEndpoint.getDomain()); - } + apiEndpoints: { [name: string]: AbstractApiEndpoint } = {}; + authProvider: AbstractAuthProvider; + + constructor(scope: Construct, id: string, dataInterface: DataInterface, hostedZone: route53.IHostedZone, props: StackProps) { + super(scope, id, dataInterface, props); + + const authEndpoint = new WasedaTimeUserAuth(this, 'cognito-endpoint', hostedZone); + this.authProvider = authEndpoint; + + const restApiEndpoint: AbstractRestApiEndpoint = new WasedaTimeRestApiEndpoint(this, 'rest-api-endpoint', { + zone: hostedZone, + authProvider: authEndpoint.pool, + }); + this.apiEndpoints['rest-api'] = restApiEndpoint; + + // const graphqlApiEndpoint: AbstractGraphqlEndpoint = new WasedaTimeGraphqlEndpoint(this, 'graphql-api-endpoint', { + // zone: hostedZone, + // authProvider: authEndpoint.pool, + // }); + // this.apiEndpoints["graphql-api"] = graphqlApiEndpoint; + // + // graphqlApiEndpoint.addService("course", this.dataInterface.getEndpoint(DataEndpoint.COURSE)); + + restApiEndpoint.addService('syllabus', this.dataInterface.getEndpoint(DataEndpoint.SYLLABUS)) + .addService('course-reviews', this.dataInterface.getEndpoint(DataEndpoint.COURSE_REVIEWS), true) + .addService('career') + .addService('timetable', this.dataInterface.getEndpoint(DataEndpoint.TIMETABLE), true); + // .addService("graphql", graphqlApiEndpoint.apiEndpoint.graphqlUrl); + restApiEndpoint.deploy(); + + this.serviceInterface.setEndpoint(ServiceEndpoint.API_REST, restApiEndpoint.getDomain()); + // this.serviceInterface.setEndpoint(ServiceEndpoint.API_GRAPHQL, graphqlApiEndpoint.getDomain()); + this.serviceInterface.setEndpoint(ServiceEndpoint.AUTH, authEndpoint.getDomain()); + } } diff --git a/lib/stacks/persistence.ts b/lib/stacks/persistence.ts index 8085ed137..803b2075b 100644 --- a/lib/stacks/persistence.ts +++ b/lib/stacks/persistence.ts @@ -1,64 +1,63 @@ -import * as cdk from "@aws-cdk/core"; - +import { StackProps } from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { PersistenceLayer } from '../architecture/layers'; +import { DataEndpoint, OperationEndpoint } from '../configs/common/registry'; import { - AbstractDataPipeline, - CareerDataPipeline, - SyllabusDataPipeline, - SyllabusSyncPipeline, - Worker, -} from "../constructs/persistence/data-pipeline"; -import {DataEndpoint, OperationEndpoint} from "../configs/common/registry"; -import {PersistenceLayer} from "../architecture/layers"; -import {Collection, DynamoDatabase} from "../constructs/persistence/database"; + AbstractDataPipeline, + CareerDataPipeline, + SyllabusDataPipeline, + SyllabusSyncPipeline, + Worker, +} from '../constructs/persistence/data-pipeline'; +import { Collection, DynamoDatabase } from '../constructs/persistence/database'; export class WasedaTimePersistenceLayer extends PersistenceLayer { - readonly dataPipelines: { [name in Worker]?: AbstractDataPipeline } = {}; - - readonly databases: { [name: string]: DynamoDatabase } = {}; - - constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - const syllabusDataPipeline = new SyllabusDataPipeline(this, 'syllabus-datapipeline', {}); - this.dataPipelines[Worker.SYLLABUS] = syllabusDataPipeline; - - const syllabusSyncPipeline = new SyllabusSyncPipeline(this, 'syllabus-sync', { - dataSource: syllabusDataPipeline.dataWarehouse, - }); - - const dynamoDatabase = new DynamoDatabase(this, 'dynamo-db', {}); - this.databases["dynamo-main"] = dynamoDatabase; - - this.dataPipelines[Worker.CAREER] = new CareerDataPipeline(this, 'career-datapipeline', { - dataWarehouse: dynamoDatabase.tables[Collection.CAREER], - }); - - this.dataInterface.setEndpoint( - DataEndpoint.COURSE_REVIEWS, - dynamoDatabase.tables[Collection.COURSE_REVIEW].tableName, - ); - this.dataInterface.setEndpoint( - DataEndpoint.CAREER, - dynamoDatabase.tables[Collection.CAREER].tableName, - ); - this.dataInterface.setEndpoint( - DataEndpoint.TIMETABLE, - dynamoDatabase.tables[Collection.TIMETABLE].tableName, - ); - this.dataInterface.setEndpoint( - DataEndpoint.SYLLABUS, - syllabusDataPipeline.dataWarehouse.bucketName, - ); - // this.dataInterface.setEndpoint( - // DataEndpoint.COURSE, - // syllabusSyncPipeline.dataWarehouse.tableName, - // ); - - this.operationInterface.setEndpoint( - OperationEndpoint.SYLLABUS, - { - [syllabusDataPipeline.processor.stateMachineArn]: "scraper", - }, - ); - } + readonly dataPipelines: { [name in Worker]?: AbstractDataPipeline } = {}; + readonly databases: { [name: string]: DynamoDatabase } = {}; + + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const syllabusDataPipeline = new SyllabusDataPipeline(this, 'syllabus-datapipeline', {}); + this.dataPipelines[Worker.SYLLABUS] = syllabusDataPipeline; + + const syllabusSyncPipeline = new SyllabusSyncPipeline(this, 'syllabus-sync', { + dataSource: syllabusDataPipeline.dataWarehouse, + }); + + const dynamoDatabase = new DynamoDatabase(this, 'dynamo-db'); + this.databases['dynamo-main'] = dynamoDatabase; + + this.dataPipelines[Worker.CAREER] = new CareerDataPipeline(this, 'career-datapipeline', { + dataWarehouse: dynamoDatabase.tables[Collection.CAREER], + }); + + this.dataInterface.setEndpoint( + DataEndpoint.COURSE_REVIEWS, + dynamoDatabase.tables[Collection.COURSE_REVIEW].tableName, + ); + this.dataInterface.setEndpoint( + DataEndpoint.CAREER, + dynamoDatabase.tables[Collection.CAREER].tableName, + ); + this.dataInterface.setEndpoint( + DataEndpoint.TIMETABLE, + dynamoDatabase.tables[Collection.TIMETABLE].tableName, + ); + this.dataInterface.setEndpoint( + DataEndpoint.SYLLABUS, + syllabusDataPipeline.dataWarehouse.bucketName, + ); + // this.dataInterface.setEndpoint( + // DataEndpoint.COURSE, + // syllabusSyncPipeline.dataWarehouse.tableName, + // ); + + this.operationInterface.setEndpoint( + OperationEndpoint.SYLLABUS, + { + [syllabusDataPipeline.processor.stateMachineArn]: 'scraper', + }, + ); + } } diff --git a/lib/stacks/presentation.ts b/lib/stacks/presentation.ts index 2affd972b..b1073d1e2 100644 --- a/lib/stacks/presentation.ts +++ b/lib/stacks/presentation.ts @@ -1,38 +1,38 @@ -import * as cdk from '@aws-cdk/core'; - -import {AbstractWebApp, AmplifyMonoWebApp} from "../constructs/presentation/web-app"; -import {PresentationLayer} from "../architecture/layers"; -import {OperationEndpoint, ServiceEndpoint} from "../configs/common/registry"; -import {ServiceInterface} from "../architecture/interfaces"; -import {webappSiteRules} from "../configs/amplify/website"; -import {feedsDeployKey} from "../configs/amplify/build-setting"; +import { StackProps } from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { ServiceInterface } from '../architecture/interfaces'; +import { PresentationLayer } from '../architecture/layers'; +import { FEEDS_DEPLOY_KEY } from '../configs/amplify/build-setting'; +import { webappSiteRules } from '../configs/amplify/website'; +import { OperationEndpoint, ServiceEndpoint } from '../configs/common/registry'; +import { AbstractWebApp, AmplifyMonoWebApp } from '../constructs/presentation/web-app'; export class WasedaTimePresentationLayer extends PresentationLayer { - readonly app: AbstractWebApp; + readonly app: AbstractWebApp; - constructor(scope: cdk.Construct, id: string, serviceInterface: ServiceInterface, props?: cdk.StackProps) { - super(scope, id, serviceInterface, props); + constructor(scope: Construct, id: string, serviceInterface: ServiceInterface, props?: StackProps) { + super(scope, id, serviceInterface, props); - const monoApp = new AmplifyMonoWebApp(this, 'amplify-monorepo-web-app', { - apiDomain: this.serviceInterface.getEndpoint(ServiceEndpoint.API_REST), - authDomain: this.serviceInterface.getEndpoint(ServiceEndpoint.AUTH), - }); - monoApp.addMicroApp("syllabus"); - monoApp.addMicroApp("campus"); - monoApp.addMicroApp("feeds"); + const monoApp = new AmplifyMonoWebApp(this, 'amplify-monorepo-web-app', { + apiDomain: this.serviceInterface.getEndpoint(ServiceEndpoint.API_REST), + authDomain: this.serviceInterface.getEndpoint(ServiceEndpoint.AUTH), + }); + monoApp.addMicroApp('syllabus'); + monoApp.addMicroApp('campus'); + monoApp.addMicroApp('feeds'); - monoApp.microApps["feeds"].addEnvironment("DEPLOY_KEY", feedsDeployKey); + monoApp.microApps.feeds.addEnvironment('DEPLOY_KEY', FEEDS_DEPLOY_KEY); - webappSiteRules.forEach((value => monoApp.app.addCustomRule(value))); + webappSiteRules.forEach((value => monoApp.app.addCustomRule(value))); - this.app = monoApp; - const appDomains = Object.entries(monoApp.microApps).reduce( - function (result: { [key: string]: string }, [key, value]) { - result[value.appId] = key.toUpperCase(); - return result; - }, {}, - ); + this.app = monoApp; + const appDomains = Object.entries(monoApp.microApps).reduce( + function (result: { [key: string]: string }, [key, value]) { + result[value.appId] = key.toUpperCase(); + return result; + }, {}, + ); - this.operationInterface.setEndpoint(OperationEndpoint.APP, appDomains); - } + this.operationInterface.setEndpoint(OperationEndpoint.APP, appDomains); + } } diff --git a/lib/utils/appsync.ts b/lib/utils/appsync.ts index 962fffb59..cdf12be64 100644 --- a/lib/utils/appsync.ts +++ b/lib/utils/appsync.ts @@ -1,48 +1,47 @@ -import {GraphqlType, IIntermediateType, ObjectType} from '@aws-cdk/aws-appsync'; - -const pluralize = require('pluralize'); +import { GraphqlType, IIntermediateType, ObjectType } from '@aws-cdk/aws-appsync-alpha'; +import * as pluralize from 'pluralize'; // Int export const int = GraphqlType.int(); -export const list_int = GraphqlType.int({isList: true}); +export const list_int = GraphqlType.int({ isList: true }); // String export const string = GraphqlType.string(); -export const list_string = GraphqlType.string({isList: true}); -export const required_string = GraphqlType.string({isRequired: true}); +export const list_string = GraphqlType.string({ isList: true }); +export const required_string = GraphqlType.string({ isRequired: true }); // ID export const id = GraphqlType.id(); -export const required_id = GraphqlType.id({isRequired: true}); +export const required_id = GraphqlType.id({ isRequired: true }); // Boolean -export const required_boolean = GraphqlType.boolean({isRequired: true}); +export const required_boolean = GraphqlType.boolean({ isRequired: true }); // Float export const float = GraphqlType.float(); // Object export const list_of = (type: IIntermediateType) => { - return type.attribute({isList: true}); + return type.attribute({ isList: true }); }; export const required = (type: IIntermediateType) => { - return type.attribute({isRequired: true}); + return type.attribute({ isRequired: true }); }; export const args = { - after: string, - first: int, - before: string, - last: int, + after: string, + first: int, + before: string, + last: int, }; export const PageInfo = new ObjectType('PageInfo', { - definition: { - hasNextPage: required_boolean, - hasPreviousPage: required_boolean, - startCursor: string, - endCursor: string, - }, + definition: { + hasNextPage: required_boolean, + hasPreviousPage: required_boolean, + startCursor: string, + endCursor: string, + }, }); /** @@ -55,15 +54,15 @@ export const PageInfo = new ObjectType('PageInfo', { * @option base - the prefix for this Object Type * @option target - the Object Type that the prefix is connected to */ -export interface baseOptions { - /** - * the prefix for this Object Type - */ - readonly base: ObjectType; - /** - * the Object Type that the prefix is connected to - */ - readonly target: ObjectType; +export interface BaseOptions { + /** + * the prefix for this Object Type + */ + readonly base: ObjectType; + /** + * the Object Type that the prefix is connected to + */ + readonly target: ObjectType; } /** @@ -72,12 +71,12 @@ export interface baseOptions { * @param suffix the end of the name (i.e. Edge or Connection) * @param options the options associated with this name */ -function obtainName(suffix: string, options: baseOptions): string { - // If base and target are the same, do not have prefix - const isSame: boolean = options.base == options.target; - const prefix = isSame ? '' : options.base.name; - const target = pluralize(options.target.name); - return `${prefix}${target}${suffix}`; +function obtainName(suffix: string, options: BaseOptions): string { + // If base and target are the same, do not have prefix + const isSame: boolean = options.base == options.target; + const prefix = isSame ? '' : options.base.name; + const target = pluralize(options.target.name); + return `${ prefix }${ target }${ suffix }`; } /** @@ -86,14 +85,14 @@ function obtainName(suffix: string, options: baseOptions): string { * @param options.base the base object type * @param options.target the target object type */ -export function generateEdge(options: baseOptions): ObjectType { - const name = obtainName('Edge', options); - return new ObjectType(name, { - definition: { - node: options.target.attribute(), - cursor: required_string, - }, - }); +export function generateEdge(options: BaseOptions): ObjectType { + const name = obtainName('Edge', options); + return new ObjectType(name, { + definition: { + node: options.target.attribute(), + cursor: required_string, + }, + }); } /** @@ -104,17 +103,17 @@ export function generateEdge(options: baseOptions): ObjectType { * @param options.base the base object type * @param options.target the target object type */ -export function generateConnection(edge: ObjectType, options: baseOptions): ObjectType { - const name = obtainName('Connection', options); - const plural = pluralize(options.target.name).toLowerCase(); - return new ObjectType(name, { - definition: { - pageInfo: PageInfo.attribute({isRequired: true}), - edges: edge.attribute({isList: true}), - totalCount: int, - [plural]: options.target.attribute({isList: true}), - }, - }); +export function generateConnection(edge: ObjectType, options: BaseOptions): ObjectType { + const name = obtainName('Connection', options); + const plural = pluralize(options.target.name).toLowerCase(); + return new ObjectType(name, { + definition: { + pageInfo: PageInfo.attribute({ isRequired: true }), + edges: edge.attribute({ isList: true }), + totalCount: int, + [plural]: options.target.attribute({ isList: true }), + }, + }); } /** @@ -125,11 +124,11 @@ export function generateConnection(edge: ObjectType, options: baseOptions): Obje * * @returns - `{ edge: ObjectType, connection: ObjectType}` */ -export function generateConnectionAndEdge(options: baseOptions): { [key: string]: ObjectType } { - const edge = generateEdge(options); - const connection = generateConnection(edge, options); - return { - edge: edge, - connection: connection, - }; +export function generateConnectionAndEdge(options: BaseOptions): { [key: string]: ObjectType } { + const edge = generateEdge(options); + const connection = generateConnection(edge, options); + return { + edge: edge, + connection: connection, + }; } diff --git a/lib/utils/s3.ts b/lib/utils/s3.ts index 206c5b010..61c1131a6 100644 --- a/lib/utils/s3.ts +++ b/lib/utils/s3.ts @@ -1,48 +1,48 @@ -import {Bucket} from "@aws-cdk/aws-s3"; -import {Effect, PolicyStatement, ServicePrincipal} from "@aws-cdk/aws-iam"; -import {AwsServicePrincipal} from "../configs/common/aws"; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as s3 from 'aws-cdk-lib/aws-s3'; +import { AwsServicePrincipal } from '../configs/common/aws'; -export function allowApiGatewayPolicy(bucket: Bucket): void { - const apiGatewayListBucket: PolicyStatement = new PolicyStatement({ - sid: "Stmt1603867916417", - effect: Effect.ALLOW, - principals: [new ServicePrincipal(AwsServicePrincipal.API_GATEWAY)], - actions: ["s3:ListBucket"], - resources: [bucket.bucketArn], - }); - const apiGatewayGetObject: PolicyStatement = new PolicyStatement({ - sid: "Stmt1603867944000", - effect: Effect.ALLOW, - principals: [new ServicePrincipal(AwsServicePrincipal.API_GATEWAY)], - actions: ["s3:GetObject", "s3:GetObjectVersion"], - resources: [`${bucket.bucketArn}/*`], - }); - bucket.addToResourcePolicy(apiGatewayListBucket); - bucket.addToResourcePolicy(apiGatewayGetObject); +export function allowApiGatewayPolicy(bucket: s3.Bucket): void { + const apiGatewayListBucket: iam.PolicyStatement = new iam.PolicyStatement({ + sid: 'Stmt1603867916417', + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal(AwsServicePrincipal.API_GATEWAY)], + actions: ['s3:ListBucket'], + resources: [bucket.bucketArn], + }); + const apiGatewayGetObject: iam.PolicyStatement = new iam.PolicyStatement({ + sid: 'Stmt1603867944000', + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal(AwsServicePrincipal.API_GATEWAY)], + actions: ['s3:GetObject', 's3:GetObjectVersion'], + resources: [`${ bucket.bucketArn }/*`], + }); + bucket.addToResourcePolicy(apiGatewayListBucket); + bucket.addToResourcePolicy(apiGatewayGetObject); } -export function allowLambdaPolicy(bucket: Bucket): void { - const lambdaListBucket: PolicyStatement = new PolicyStatement({ - sid: "Stmt1873873416417", - effect: Effect.ALLOW, - principals: [new ServicePrincipal(AwsServicePrincipal.LAMBDA)], - actions: ["s3:ListBucket"], - resources: [bucket.bucketArn], - }); - const lambdaAccessObject: PolicyStatement = new PolicyStatement({ - sid: "Stmt1873873416417", - effect: Effect.ALLOW, - principals: [new ServicePrincipal(AwsServicePrincipal.LAMBDA)], - actions: [ - "s3:PutObject", - "s3:PutObjectAcl", - "s3:GetObject", - "s3:GetObjectAcl", - "s3:DeleteObject", - "s3:GetObjectVersion", - ], - resources: [`${bucket.bucketArn}/*`], - }); - bucket.addToResourcePolicy(lambdaListBucket); - bucket.addToResourcePolicy(lambdaAccessObject); +export function allowLambdaPolicy(bucket: s3.Bucket): void { + const lambdaListBucket: iam.PolicyStatement = new iam.PolicyStatement({ + sid: 'Stmt1873873416417', + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA)], + actions: ['s3:ListBucket'], + resources: [bucket.bucketArn], + }); + const lambdaAccessObject: iam.PolicyStatement = new iam.PolicyStatement({ + sid: 'Stmt1873873416417', + effect: iam.Effect.ALLOW, + principals: [new iam.ServicePrincipal(AwsServicePrincipal.LAMBDA)], + actions: [ + 's3:PutObject', + 's3:PutObjectAcl', + 's3:GetObject', + 's3:GetObjectAcl', + 's3:DeleteObject', + 's3:GetObjectVersion', + ], + resources: [`${ bucket.bucketArn }/*`], + }); + bucket.addToResourcePolicy(lambdaListBucket); + bucket.addToResourcePolicy(lambdaAccessObject); } diff --git a/package.json b/package.json index 3277b30a3..b419531af 100644 --- a/package.json +++ b/package.json @@ -1,60 +1,52 @@ { "name": "wasedatime-backend", - "version": "1.2.0", + "version": "2.0.0-alpha.1", "bin": { "wasedatime-backend": "bin/index.js" }, "scripts": { - "preinstall": "npx only-allow pnpm", + "preinstall": "npx -y only-allow pnpm", "build": "tsc", "watch": "tsc -w", "test": "jest", - "cdk": "cdk" + "cdk": "cdk", + "release": "standard-version", + "prepare": "husky install", + "lint": "eslint . --ext .ts" + }, + "peerDependencies": { + "aws-cdk-lib": "2.13.0", + "constructs": "10.0.66" }, "devDependencies": { - "@aws-cdk/assert": "2.8.0", + "@aws-cdk/assert": "2.13.0", + "@commitlint/cli": "16.2.1", + "@commitlint/config-conventional": "16.2.1", "@types/jest": "27.4.0", - "@types/node": "16.11.25", - "aws-cdk": "2.8.0", + "@types/node": "17.0.18", + "@types/pluralize": "^0.0.29", + "@typescript-eslint/eslint-plugin": "5.10.2", + "@typescript-eslint/parser": "5.10.2", + "aws-cdk-lib": "2.13.0", + "constructs": "10.0.66", + "eslint": "8.8.0", + "eslint-import-resolver-node": "0.3.6", + "eslint-import-resolver-typescript": "2.5.0", + "eslint-plugin-import": "2.25.4", + "husky": "7.0.4", "jest": "27.5.1", + "standard-version": "9.3.2", "ts-jest": "27.1.3", "ts-node": "10.5.0", "typescript": "4.5.5" }, "dependencies": { - "@aws-cdk/assets": "1.134.0", - "@aws-cdk/aws-amplify": "1.134.0", - "@aws-cdk/aws-apigateway": "1.134.0", - "@aws-cdk/aws-apigatewayv2": "1.134.0", - "@aws-cdk/aws-appsync": "1.134.0", - "@aws-cdk/aws-budgets": "1.134.0", - "@aws-cdk/aws-certificatemanager": "1.134.0", - "@aws-cdk/aws-chatbot": "1.134.0", - "@aws-cdk/aws-cloudtrail": "1.134.0", - "@aws-cdk/aws-cloudwatch": "1.134.0", - "@aws-cdk/aws-cloudwatch-actions": "1.134.0", - "@aws-cdk/aws-codebuild": "1.134.0", - "@aws-cdk/aws-cognito": "1.134.0", - "@aws-cdk/aws-dynamodb": "1.134.0", - "@aws-cdk/aws-ec2": "1.134.0", - "@aws-cdk/aws-elasticsearch": "1.134.0", - "@aws-cdk/aws-events": "1.134.0", - "@aws-cdk/aws-events-targets": "1.134.0", - "@aws-cdk/aws-iam": "1.134.0", - "@aws-cdk/aws-lambda": "1.134.0", - "@aws-cdk/aws-lambda-event-sources": "1.134.0", - "@aws-cdk/aws-lambda-python": "1.134.0", - "@aws-cdk/aws-lambda-nodejs": "1.134.0", - "@aws-cdk/aws-logs": "1.134.0", - "@aws-cdk/aws-route53": "1.134.0", - "@aws-cdk/aws-route53-targets": "1.134.0", - "@aws-cdk/aws-s3": "1.134.0", - "@aws-cdk/aws-sns": "1.134.0", - "@aws-cdk/aws-sns-subscriptions": "1.134.0", - "@aws-cdk/aws-sso": "1.134.0", - "@aws-cdk/aws-stepfunctions": "1.134.0", - "@aws-cdk/aws-stepfunctions-tasks": "1.134.0", - "@aws-cdk/core": "1.134.0", + "@aws-cdk/aws-amplify-alpha": "2.13.0-alpha.0", + "@aws-cdk/aws-apigatewayv2-alpha": "2.13.0-alpha.0", + "@aws-cdk/aws-apigatewayv2-authorizers-alpha": "2.13.0-alpha.0", + "@aws-cdk/aws-apigatewayv2-integrations-alpha": "2.13.0-alpha.0", + "@aws-cdk/aws-appsync-alpha": "2.13.0-alpha.0", + "@aws-cdk/aws-lambda-python-alpha": "2.13.0-alpha.0", "flatted": "3.2.5", "pluralize": "8.0.0", "source-map-support": "0.5.21" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05813101f..e21593784 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1024 +1,170 @@ lockfileVersion: 5.3 specifiers: - '@aws-cdk/assert': 2.8.0 - '@aws-cdk/assets': 1.134.0 - '@aws-cdk/aws-amplify': 1.134.0 - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-apigatewayv2': 1.134.0 - '@aws-cdk/aws-appsync': 1.134.0 - '@aws-cdk/aws-budgets': 1.134.0 - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-chatbot': 1.134.0 - '@aws-cdk/aws-cloudtrail': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-cloudwatch-actions': 1.134.0 - '@aws-cdk/aws-codebuild': 1.134.0 - '@aws-cdk/aws-cognito': 1.134.0 - '@aws-cdk/aws-dynamodb': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticsearch': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-events-targets': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-lambda-event-sources': 1.134.0 - '@aws-cdk/aws-lambda-nodejs': 1.134.0 - '@aws-cdk/aws-lambda-python': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/aws-route53-targets': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sns-subscriptions': 1.134.0 - '@aws-cdk/aws-sso': 1.134.0 - '@aws-cdk/aws-stepfunctions': 1.134.0 - '@aws-cdk/aws-stepfunctions-tasks': 1.134.0 - '@aws-cdk/core': 1.134.0 + '@aws-cdk/assert': 2.13.0 + '@aws-cdk/aws-amplify-alpha': 2.13.0-alpha.0 + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0 + '@aws-cdk/aws-apigatewayv2-authorizers-alpha': 2.13.0-alpha.0 + '@aws-cdk/aws-apigatewayv2-integrations-alpha': 2.13.0-alpha.0 + '@aws-cdk/aws-appsync-alpha': 2.13.0-alpha.0 + '@aws-cdk/aws-lambda-python-alpha': 2.13.0-alpha.0 + '@commitlint/cli': 16.2.1 + '@commitlint/config-conventional': 16.2.1 '@types/jest': 27.4.0 - '@types/node': 16.11.25 - aws-cdk: 2.8.0 + '@types/node': 17.0.18 + '@types/pluralize': ^0.0.29 + '@typescript-eslint/eslint-plugin': 5.10.2 + '@typescript-eslint/parser': 5.10.2 + aws-cdk-lib: 2.13.0 + constructs: 10.0.66 + eslint: 8.8.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.5.0 + eslint-plugin-import: 2.25.4 flatted: 3.2.5 + husky: 7.0.4 jest: 27.5.1 pluralize: 8.0.0 source-map-support: 0.5.21 + standard-version: 9.3.2 ts-jest: 27.1.3 ts-node: 10.5.0 typescript: 4.5.5 dependencies: - '@aws-cdk/assets': 1.134.0 - '@aws-cdk/aws-amplify': 1.134.0 - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-apigatewayv2': 1.134.0 - '@aws-cdk/aws-appsync': 1.134.0 - '@aws-cdk/aws-budgets': 1.134.0 - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-chatbot': 1.134.0 - '@aws-cdk/aws-cloudtrail': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-cloudwatch-actions': 1.134.0 - '@aws-cdk/aws-codebuild': 1.134.0 - '@aws-cdk/aws-cognito': 1.134.0 - '@aws-cdk/aws-dynamodb': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticsearch': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-events-targets': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-lambda-event-sources': 1.134.0 - '@aws-cdk/aws-lambda-nodejs': 1.134.0 - '@aws-cdk/aws-lambda-python': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/aws-route53-targets': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sns-subscriptions': 1.134.0 - '@aws-cdk/aws-sso': 1.134.0 - '@aws-cdk/aws-stepfunctions': 1.134.0 - '@aws-cdk/aws-stepfunctions-tasks': 1.134.0 - '@aws-cdk/core': 1.134.0 + '@aws-cdk/aws-amplify-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a + '@aws-cdk/aws-apigatewayv2-authorizers-alpha': 2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e + '@aws-cdk/aws-apigatewayv2-integrations-alpha': 2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e + '@aws-cdk/aws-appsync-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a + '@aws-cdk/aws-lambda-python-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a flatted: 3.2.5 pluralize: 8.0.0 source-map-support: 0.5.21 devDependencies: - '@aws-cdk/assert': 2.8.0_jest@27.5.1 + '@aws-cdk/assert': 2.13.0_e899eddb210d099498d0df86b34847a7 + '@commitlint/cli': 16.2.1 + '@commitlint/config-conventional': 16.2.1 '@types/jest': 27.4.0 - '@types/node': 16.11.25 - aws-cdk: 2.8.0 + '@types/node': 17.0.18 + '@types/pluralize': 0.0.29 + '@typescript-eslint/eslint-plugin': 5.10.2_2595c2126aec4d4b6e944b931dabb4c2 + '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 + eslint: 8.8.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.5.0_392f898cec7735a5f7a99430cbc0b4f4 + eslint-plugin-import: 2.25.4_eslint@8.8.0 + husky: 7.0.4 jest: 27.5.1_ts-node@10.5.0 + standard-version: 9.3.2 ts-jest: 27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb - ts-node: 10.5.0_ad16171857a0edcfc445c7bfcf336eb6 + ts-node: 10.5.0_f3bd4037939c2ed2942ba074291f8ef2 typescript: 4.5.5 packages: - /@aws-cdk/assert/2.8.0_jest@27.5.1: - resolution: {integrity: sha512-NSSPMs2hXn42x7qWPhNCIg+CUAgqNZNuvU9v/EJo+xENADc+bm2X2y0RNJOjS5jcvMiy2AHtwT9Gj3uHd0S/IQ==} - engines: {node: '>= 14.15.0'} + /@aws-cdk/assert/2.13.0_e899eddb210d099498d0df86b34847a7: + resolution: { integrity: sha512-Q4tRx/g/XWbqLd/L1YgJZTXWmNbNI161RYl0CmwkTRWm1rKQfgkwQ3VqmxjCxcT9gQxJBzKlSe6j5tAG1UpaNg== } + engines: { node: '>= 14.15.0' } peerDependencies: - aws-cdk-lib: ^2.8.0 + aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 jest: '>=26.6.3' dependencies: - '@aws-cdk/cloudformation-diff': 2.8.0 + '@aws-cdk/cloudformation-diff': 2.13.0 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 jest: 27.5.1_ts-node@10.5.0 dev: true - /@aws-cdk/assets/1.134.0: - resolution: {integrity: sha512-0UG+5iHQiok+TzfrZubsLrmyBuPtunAm9u6aXyG3yQ6RAJTfsvRRuM3g92BYvWWJEVAZxj3Zly/YT5jJJ+AS4g==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-acmpca/1.134.0: - resolution: {integrity: sha512-cOd7VTRAL4PKCpYEdzIbxAustSiT6ek9n7h1lMkAtGEInRh3PN1HNs8sK9bxHXK3mOo5Io6EFoCl5KjSepvQCw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-amplify/1.134.0: - resolution: {integrity: sha512-dOFmJJw2aYWQKryoDBSxjR7MDAiUKepLiOxHTufq5Y5go6bDvRBf6630lVNHzv6U5+x8gwuWf3i6PXcX7fi9Kw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-codebuild': 1.134.0 - '@aws-cdk/aws-codecommit': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - yaml: 1.10.2 - dev: false - bundledDependencies: - - yaml - - /@aws-cdk/aws-apigateway/1.134.0: - resolution: {integrity: sha512-Old3NjNaU+XdFs3Rrfynq6Oa6bt6iE+6YSkq/ZHqljdTGydhTb/wU5fCBh3j9AbYsBxrua5VZO7IJdyEoiQ25w==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-cognito': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticloadbalancingv2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-apigatewayv2/1.134.0: - resolution: {integrity: sha512-SHkNt64vCXaUXK6XdemPD4EBHZaEbndY/ENAmcrs/FJ+3enaVqmjL4ykNTgaRvfipFjNQfEvnZVLcJIRj2VRvw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-applicationautoscaling/1.134.0: - resolution: {integrity: sha512-1LvSK5WWTaW2id+KQgfFfHHo7uoBXzuyfGWgv2YwUpKu1JUQwdTcTi0Bljbfzk4tG0gYenNxOFnzxhhV1Fe+Ww==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-autoscaling-common': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-appsync/1.134.0: - resolution: {integrity: sha512-0b0BxZU+9OKarP6MkhhD0er7nurit9GRqg1Z3iKh0dVK4Jy7DLwcCMZ7FjbF0JRiPEl/2wuvvZK5cth38kTlzQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cognito': 1.134.0 - '@aws-cdk/aws-dynamodb': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticsearch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-rds': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-autoscaling-common/1.134.0: - resolution: {integrity: sha512-Ret8dHpdPko5OZSJk4d4ejVEKRdabHHPpnxR4QFaJJC+V+88kshQ6SB764HDKm6+14/uQnruubspKmlq3XAhuQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-autoscaling-hooktargets/1.134.0: - resolution: {integrity: sha512-FZIJDz0b9rTZMtF+F4KEoKiTZ1I96nPTFghpzygjvCptr2iwTZpSYqSOuEKd+dZfOF0g70AJQOKGuCpJCC0XnA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-autoscaling': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sns-subscriptions': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-autoscaling/1.134.0: - resolution: {integrity: sha512-2ZmvnWEdprgeFnG9o8Ck62RvUwLLNUD89h8NzaftRTqGKicdRIwli7RQSs70A6QjoxyKOQAhenBA4DAo2nK4Zw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-autoscaling-common': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticloadbalancing': 1.134.0 - '@aws-cdk/aws-elasticloadbalancingv2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-budgets/1.134.0: - resolution: {integrity: sha512-SGb+qfagOllzdZSym5JpjSHVa7mO+h8rOj4zCp/T1n45u4QscwPrAspXbIYUhFqU/rLcC1OoYU0sT5tzSoGTrw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-certificatemanager/1.134.0: - resolution: {integrity: sha512-Bjx8/7OhtmVQmnLSE9lq/7veakoPe3vy5lNXkABtQRowk0c2G30kWe5mjDhazSCd+RbUWfaTnnS84RcK0vwTKg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-acmpca': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-chatbot/1.134.0: - resolution: {integrity: sha512-q5ASARAw6mnl4RfT1lTVvLPdnMaP8tejfQIrl11+eGVvZAeM+kLJwdjh2162CjhcrOxBAOmiCT4ySsdsMMQEag==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-codestarnotifications': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cloudformation/1.134.0: - resolution: {integrity: sha512-+9WNeJH4cKiZ5WOLJyeIM7ugADHwDIhWgptzH03EozAG4FuqujDnN5QtHpTLBd/GE3ItOpuD465zPJsRYqLlrQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cloudfront/1.134.0: - resolution: {integrity: sha512-N20WzDePC0JJwBSBvja5CjMUFby245743KoKVZ6TneAXPM933G4jCp6jurrZ9S1SSC25KhfBK/pKrNrt+PbMcQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-ssm': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cloudtrail/1.134.0: - resolution: {integrity: sha512-m8lo3i5OLoHpdIYIoKwmheqWxmIEd8meg3UzCwAw1yPXG/95w5AeZoNxS/wCwlGSnh+Q5ldPFXrew/+28DCT2w==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cloudwatch-actions/1.134.0: - resolution: {integrity: sha512-zBs95329UyBEUYQlHgGtZIghNQldqWnh5+AJzbjbYtZ1wqnC6/7XVyYI0NWUCzjapbx+/UCUSnvkpXVC7iqedQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-applicationautoscaling': 1.134.0 - '@aws-cdk/aws-autoscaling': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cloudwatch/1.134.0: - resolution: {integrity: sha512-LdnRXLHVHBYDa2CSCZc4jzB+89hUjt5xI1SWmhY9vIqXvNLp7Xt2wq3gYzCJG1Gq+jwpTG69S0B3TzFLKL988A==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-codebuild/1.134.0: - resolution: {integrity: sha512-obGBDFY2cctr8iosKOe4jkFp7/vGsClEzujw894/vU33K08LDxT6BJDsN8J/3I4nbY24cVnvu86bhmShUM8Ltg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/assets': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-codecommit': 1.134.0 - '@aws-cdk/aws-codestarnotifications': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-ecr': 1.134.0 - '@aws-cdk/aws-ecr-assets': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - yaml: 1.10.2 - dev: false - bundledDependencies: - - yaml - - /@aws-cdk/aws-codecommit/1.134.0: - resolution: {integrity: sha512-h21mvL1e9uw5Yhxskq0r3/1iOAGVnOZykI3vvjSuuvQI3vzvyhdeLXxguMtcrKZOTo4mxBtMI8zWWBwZs7cfPQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-codestarnotifications': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-codeguruprofiler/1.134.0: - resolution: {integrity: sha512-Uv17un0PkPqOLJq17IJelDJ40+SaBIk+GEBqmASIix7R/SB0FB62g9r1vh3SwDnBWAmebNIV6HFZyVIjh4LJWA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-codepipeline/1.134.0: - resolution: {integrity: sha512-cKlzhYAN+vH4PLK6BIi3gup2HU6pxqRsUIC/YIY+fQDIJvyP1qJW1utswgYTt4bIuSPQCOr2w1tghNQlxgvLhQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-codestarnotifications': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-codestarnotifications/1.134.0: - resolution: {integrity: sha512-cUgiT1tscqgXmAOA7WK4eCvs4kTa9wf1s1jfhPnipcjXq9/KaU+kuvmLeOc0UMRyfeXcdRYXaPTymKAtdHhllQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-cognito/1.134.0: - resolution: {integrity: sha512-P6ybQBUoxneyUotbwFDlgf+3E9zdqdgcVdAc6x75rkNAC6VgOMPi4ktTs0BLoe9g1qFepinnwSoOGrDw/T2M6w==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - punycode: 2.1.1 - dev: false - bundledDependencies: - - punycode - - /@aws-cdk/aws-dynamodb/1.134.0: - resolution: {integrity: sha512-WPxrtUVMvlt73dfrlvQnC+DdR8xrsqfT/fZ4xvP604jRtM2UlGIuXrURSWL34ozwBIazs3IrlWyLWXaYC5kdGg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-applicationautoscaling': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kinesis': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-ec2/1.134.0: - resolution: {integrity: sha512-4HPDl0tzkkKhEn4ja8E9r8WgRIyzd2suZCdRYVONC9A5KO8Rhgld8NIf/+WpDTZvlh01o/vYH/zONodJS2rkjw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/aws-ssm': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-ecr-assets/1.134.0: - resolution: {integrity: sha512-BqxwQB6QKU2hH3IvwazBYvfhBk6eUh3ZRfOCD9nagQqI/oIcvxr3bHmfaZQoIERsiZ3qLP5XMz8lBaWJWBMYTA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/assets': 1.134.0 - '@aws-cdk/aws-ecr': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - minimatch: 3.0.4 - dev: false - bundledDependencies: - - minimatch - - /@aws-cdk/aws-ecr/1.134.0: - resolution: {integrity: sha512-NOMyucbtEWyljlXWQgL49AJy13YLsW4k45rjrZKB34Oiz+bigpeAirTxyOUvz+1cXjIndmzCD3AuQflTvCUxkw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-amplify-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: + resolution: { integrity: sha512-wDRc0dblM7onOUGk9CxMchBOGnieapmFNwWEIH5yZJ6KCufUR1RpjfVL0QVF/1XKGI/G3MtHNSt7ogzQljUHig== } + engines: { node: '>= 14.15.0' } + peerDependencies: + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-ecs/1.134.0: - resolution: {integrity: sha512-BjdBKydt0SpCzty96QVEajlpbKCidygznbR8OAyBSKv3nupcATtJ7U1d63u6lmzlVwOAVui6piWoWdpybPelwA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-applicationautoscaling': 1.134.0 - '@aws-cdk/aws-autoscaling': 1.134.0 - '@aws-cdk/aws-autoscaling-hooktargets': 1.134.0 - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-ecr': 1.134.0 - '@aws-cdk/aws-ecr-assets': 1.134.0 - '@aws-cdk/aws-elasticloadbalancing': 1.134.0 - '@aws-cdk/aws-elasticloadbalancingv2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/aws-route53-targets': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/aws-servicediscovery': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/aws-ssm': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-efs/1.134.0: - resolution: {integrity: sha512-gh3dGFjeyG5jVOMQURCjTlqDP22U1Y2eo1P9cROW4b009Drk2NmofVplkrLX6INFgVcXNyikbcJ4l1PfN81T2A==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-eks/1.134.0: - resolution: {integrity: sha512-kfyAKRM9mmFO8tEcsTqkdsMduAuAGhPSR79cQeWM+BOT/+BpUWteoJr0Q/zol/yTowCZxBemjQE9J9LD9YrmsQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-autoscaling': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-ssm': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - '@aws-cdk/lambda-layer-awscli': 1.134.0 - '@aws-cdk/lambda-layer-kubectl': 1.134.0 - '@aws-cdk/lambda-layer-node-proxy-agent': 1.134.0 - constructs: 3.3.147 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 yaml: 1.10.2 dev: false bundledDependencies: - yaml - /@aws-cdk/aws-elasticloadbalancing/1.134.0: - resolution: {integrity: sha512-eVQmn39enzFT5n6e/DOcZnRXLbBxPWw0q0DhXJrOY1DAIXUO6Ba7X64al7YdQ+aDs/RZ9Rao9L4Ok9lWxJgWdw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-elasticloadbalancingv2/1.134.0: - resolution: {integrity: sha512-+IrGm5SGjibKPaLb/7+s28caOrRRkEQMlyk5bqWd1quVwZpepN1929UpgFD7NQwlDpUwFM0QvuB0uOLeNwNzBw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-elasticsearch/1.134.0: - resolution: {integrity: sha512-7xI2RNlXuKIOyHT1F55hoo/HVZiYQxqhpPU9kbtH1RoDY/mtLQE4k3Ym5667cXogbrbwBl6ZyLSTYCGj2KkhWQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-certificatemanager': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-events-targets/1.134.0: - resolution: {integrity: sha512-mGzOXu6FoqFeXBKEHzvTNY55O0ce+SDE+dB5FdS+PfkNHHt8pTMQEov1skloMqi1/tNyNS6CfDSDlFXEBpNNOQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-autoscaling': 1.134.0 - '@aws-cdk/aws-codebuild': 1.134.0 - '@aws-cdk/aws-codepipeline': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-ecs': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kinesis': 1.134.0 - '@aws-cdk/aws-kinesisfirehose': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sns-subscriptions': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/aws-stepfunctions': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-events/1.134.0: - resolution: {integrity: sha512-M0jmIwgIssB4Gi1m4h3Jeuu+KETmjijHHFGI0Xffxmu9myMvfKjfgyFLytQuz4/7UfaPH6vqkHCCp9/bJNLo2Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-globalaccelerator/1.134.0: - resolution: {integrity: sha512-E/WkxX70GX0BKRmB1oklqmhTPsdLii3kwi5IcI0p0eGFzVt47+p2tu2mLGOl9RGpO3uS/7MAlxtm9Qzh9f8K/Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-iam/1.134.0: - resolution: {integrity: sha512-EZy+oyIiAl2WvAfKpn2zhSZ9Wtcu06RUTIbkrourietnQoQhqhiwpp/H84VosgUgwpHsx7BNmZ8EJJXJXs7XfA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-kinesis/1.134.0: - resolution: {integrity: sha512-JWHP+LJfqt9/pqVjXnoQkWGZEoAJuPLTb0RHibEyFMd+dq/bFjWbfxTHPbxmFdm2NLqG6dI05EzHwx9IfcaYuw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-kinesisfirehose/1.134.0: - resolution: {integrity: sha512-0kkc+JFqoeTmvY8I1yrwUVZ0GkrOsqUHmfgCf1iqd9OojftdZQnzJS/iczuSfakGv0cjIAu15XOBwBKsnjdHgQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kinesis': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-kms/1.134.0: - resolution: {integrity: sha512-nuXWE/lHnR9PzZdjCN9cbhT5IAHS593JVrS889v+O/9l3jLCgdSaElQ6EAjmr7WHne2npRbTo/Qw7ebT31BIRQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-lambda-event-sources/1.134.0: - resolution: {integrity: sha512-0xbQnz9UEVMUBRoykCjXfldxAq/WgDt/mncApdqq65MnXCuH5cileDcUurgb9x8F+mQEIM+h1DOVcoqexGmS8Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-dynamodb': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kinesis': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-notifications': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sns-subscriptions': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-lambda-nodejs/1.134.0: - resolution: {integrity: sha512-tAlyH9/h3EEDtxTSnFW7E5HtkDHpdnamnW3VjF3BQOPz7W6ZhMG2XWVd+byFJg0/xgIeiIGjkaBTY1Pcxnc78Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-lambda-python/1.134.0: - resolution: {integrity: sha512-0MMyl+rIViKMnI4f/TVw94Q+2BNWNeXHos4Tgag3Z5Odrtky5lct7098tRaECGRi7NyB0H+rCuCvXZ2xdSTezw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-lambda/1.134.0: - resolution: {integrity: sha512-RGxPEPw2twJzcllNSNkHSLjgntuT8JQ5Sphiuyk3EZayPDPYUCbkEVWhmkHoLP5KnZprn2GIPaknSGnOVB7TBQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-applicationautoscaling': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-codeguruprofiler': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-ecr': 1.134.0 - '@aws-cdk/aws-ecr-assets': 1.134.0 - '@aws-cdk/aws-efs': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/aws-signer': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-logs/1.134.0: - resolution: {integrity: sha512-XolgIfT8vamdlVy7TAtHvhX7BFeJrg37pEur0CAiuzROipnBGwHc63K4QqJYlA0QDEsLXn8BupUV76jBHr3wvQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-s3-assets': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-rds/1.134.0: - resolution: {integrity: sha512-Z9hSZoImG8O6M4fFU6kicu/jeec4TH6fkIlSE7oJ+cElf+LiRn/djnbqK49nNvzAcuHRii7StOIHwSHOo4x9hw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-secretsmanager': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-route53-targets/1.134.0: - resolution: {integrity: sha512-5COv3nOUl4iiYJ4RUHVQH9TPEadP5Tt3WahbQtaQdelBhZ3co/q/UNp95/fLLeaR+A8HOk64A0JEKTpmVyXnRw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-cloudfront': 1.134.0 - '@aws-cdk/aws-cognito': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticloadbalancing': 1.134.0 - '@aws-cdk/aws-elasticloadbalancingv2': 1.134.0 - '@aws-cdk/aws-globalaccelerator': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-route53/1.134.0: - resolution: {integrity: sha512-VodtS60oCfrxtBjriwytmYVkRSAc4m6oxCz6w2nvF9IwAxPWHga66KDdEnMpRKExZtpBx0Pw1EHgxG03bhVx+g==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/custom-resources': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-s3-assets/1.134.0: - resolution: {integrity: sha512-1geRa/eAkGpWekTpf6QJiLH3UtN4PNrpK+2WtK3hW1fsuj0F8GC9gB+AQSruMAI6SC195tsEMTLO5zqdypDknQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/assets': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-s3-notifications/1.134.0: - resolution: {integrity: sha512-+R2aRZeHPaFiHjG3FKMqX6Zi/Z4F5QL2slOfuMKzhNtCbWnAfZbm+RmLxjvQOGGH1TOQVR9bh8OTW6NcftjCKg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-s3/1.134.0: - resolution: {integrity: sha512-HhVITjecHzJSf1eH5JqphvQBAaSXSDdbNQMNSX/qmMnhorsvOuU/vSmn4mmPTOUnbR6NP4k51WotVZ9qmMCaow==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-sam/1.134.0: - resolution: {integrity: sha512-OEsPH6rFwOCRXOWxTfv7ryI6juH9bTzFKOU8nsWIpeTplU80X2o4bU4MOrDRlEBKosazt7yQvmitJRjqNBBzIA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-secretsmanager/1.134.0: - resolution: {integrity: sha512-34s7VwnvONqlJUiuyH+eK3V6Lp3rzl7HEzWdL3+ToOSq9jc6/MoZ6lu8fe5xMrwVYGRz9dlHwqMjejktENLdZg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-sam': 1.134.0 - '@aws-cdk/core': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-servicediscovery/1.134.0: - resolution: {integrity: sha512-6Te4u1xUI//io6BM6SyLUyNSttv61FkG9FSdMcNftnuCskhXt95GBE6pEH+C1k4lUbGjQduegaKDFowLDicqUQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-apigatewayv2-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: + resolution: { integrity: sha512-IEMJzaoov/qxvWLCN+hLv+mowmGLlNxodSeApYJJdbvk9E6OkdWN9bDfmJWnqdBuuQAqjJCUl/377LLB9lHnvw== } + engines: { node: '>= 14.15.0' } + peerDependencies: + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-elasticloadbalancingv2': 1.134.0 - '@aws-cdk/aws-route53': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 dev: false - /@aws-cdk/aws-signer/1.134.0: - resolution: {integrity: sha512-L9A6FXJrcxIfGLMKdOweikGJjePFy0FegYEqK3w26+3I8ZmQreeDf9GOCEpFY6f1D8t4m2jxJK5/hjMuwFpV6w==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-apigatewayv2-authorizers-alpha/2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e: + resolution: { integrity: sha512-7Ii1Ed0++eEIWKtzbm4DSh/yGKXMSjhzeywC6tCGsMKj9mns9hKqmHPr2RvLML4HywdtMUWwH7LP7a6nWWR8MQ== } + engines: { node: '>= 14.15.0' } + peerDependencies: + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0 + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 dev: false - /@aws-cdk/aws-sns-subscriptions/1.134.0: - resolution: {integrity: sha512-dSg8DLovQ0TVeUpIQfrVyXao0ZZQJIjU0Sj07aD0C7L91mUqtWc59a0kC0XAH4JdBTRTKE9vqdgxX6DDcxiAmw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-sns/1.134.0: - resolution: {integrity: sha512-Lf+JOASA5r3YganhTtC7FKgSgp4DacH0zGCzLsv1GF7nLfWEbdVDBpiwTj2l42I9IQEEcYsIMhmbx1RB0AO2vQ==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-codestarnotifications': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/aws-sqs/1.134.0: - resolution: {integrity: sha512-idzqP90kvIsm15STScg90BvBuxNiXvg0AEfJ/tz9Z7b339VPTOzkJwMmY0DCSjvR8d3gnZZd6Xd6X4u6XUqR3Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-apigatewayv2-integrations-alpha/2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e: + resolution: { integrity: sha512-Tq38ftHdcZIFsuiSfUzhZKrq7mvGyDU5D1pSEZNwgfWEuYnAHGBRQELuyEHUWvXIQNoC11axV/7i2Wh/2y+USQ== } + engines: { node: '>= 14.15.0' } + peerDependencies: + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0 + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 + '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 dev: false - /@aws-cdk/aws-ssm/1.134.0: - resolution: {integrity: sha512-cKubHdfexeiuXLPTk77FMTFgehpuYyD72e6rd42Oc79KNGAoytWWGzDc+tieIpz8caBOt5U4QJ3KNF/ARF1wGA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-appsync-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: + resolution: { integrity: sha512-/wAT5azT6H867uczIqFIeJxS4GrtghkqN5J9QlNOHASDyBRkQOvH6EBjk6WHii4fqql1stbEA92ae07+jRKLJQ== } + engines: { node: '>= 14.15.0' } + peerDependencies: + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 dev: false - /@aws-cdk/aws-sso/1.134.0: - resolution: {integrity: sha512-R3oIwRgcvRAI2C2KLk3ZkdAkHv4hXoObEVCq9XJ9hzKpzzl7TBVaL9RL8YQjC1qQs40HidGOXl0G+W5Nm/pmtg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} + /@aws-cdk/aws-lambda-python-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: + resolution: { integrity: sha512-V+aGUkmbpvSRb6ik8CEyRaE6VnVRfHxDDcBm1lkilgIMBWZtGxLBY6bjYVNBliHfMroeXbTYjObttj36hDz6/w== } + engines: { node: '>= 14.15.0' } + peerDependencies: + aws-cdk-lib: ^2.13.0 + constructs: ^10.0.0 dependencies: - '@aws-cdk/core': 1.134.0 - dev: false - - /@aws-cdk/aws-stepfunctions-tasks/1.134.0: - resolution: {integrity: sha512-ChzBXMt4xJv/RieWcOtEYDX+FKwwsBHK+rcB28ocqRRGLFUOUsIQI6BCgxTqQ/nYyTBjmiQQ87fywAPkqvJ9Tw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-apigateway': 1.134.0 - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-codebuild': 1.134.0 - '@aws-cdk/aws-dynamodb': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-ecr': 1.134.0 - '@aws-cdk/aws-ecr-assets': 1.134.0 - '@aws-cdk/aws-ecs': 1.134.0 - '@aws-cdk/aws-eks': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-kms': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/aws-sqs': 1.134.0 - '@aws-cdk/aws-stepfunctions': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 + aws-cdk-lib: 2.13.0_constructs@10.0.66 + constructs: 10.0.66 dev: false - /@aws-cdk/aws-stepfunctions/1.134.0: - resolution: {integrity: sha512-EwcA1O5kz9SJGLoc+j6G3e8fKIXttQ4/+hr0gk4mCAOrJODmzjzIEKrM8GX8XrzknHiW39sOc5lPavVoFkuP+Q==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudwatch': 1.134.0 - '@aws-cdk/aws-events': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-s3': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/cfnspec/2.8.0: - resolution: {integrity: sha512-MLaTOu8IBRdaosXyAZF1xpubIeAPiNKtII7bw8JKOb07/HVUmdnNCStjPZCsPP5yQ4/OO2Qg2rPhPqocufpWlQ==} + /@aws-cdk/cfnspec/2.13.0: + resolution: { integrity: sha512-+ZV6egnKjLtuLxK0kOd+WRQ8lDiQF+Ll1UYTuf47WyF0xoAkuJxV2sFm36tGGLtEgV3bY452m1Aiik5i25pWJw== } dependencies: fs-extra: 9.1.0 md5: 2.3.0 dev: true - /@aws-cdk/cloud-assembly-schema/1.134.0: - resolution: {integrity: sha512-P7HTOJ/e7MM+RfMQKpzP4cie0hbf/st/l6AmbYx0t/aayhnL1MXrnWPZd1t89TEYiekJkwsXX6x6N7S180uQvw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - jsonschema: 1.4.0 - semver: 7.3.5 - dev: false - bundledDependencies: - - jsonschema - - semver - - /@aws-cdk/cloud-assembly-schema/2.8.0: - resolution: {integrity: sha512-nFNeetl/RT69n7tS07Ln3dUnLdjp7D01cCBr8wy4JPZ6fY7xpVg30jS5IHA/9CYpx44ZvKy+iBiURtx/YhUyjQ==} - engines: {node: '>= 14.15.0'} - dependencies: - jsonschema: 1.4.0 - semver: 7.3.5 - dev: true - bundledDependencies: - - jsonschema - - semver - - /@aws-cdk/cloudformation-diff/2.8.0: - resolution: {integrity: sha512-9Z1b1oFBjP4r1dNgWaJF9Hg0+ND1OIsw6BWacFS7V016ZT055FttYD5bbaqlE09ZdjReDaDw6UHbE9s+IhD9sA==} - engines: {node: '>= 14.15.0'} + /@aws-cdk/cloudformation-diff/2.13.0: + resolution: { integrity: sha512-TMxM5h6eME30j0XTlnJPdXO8zobQJdSiFTHJfS/4MwV2ee/ILsJoGz53Pd/5l030hIct9H54R/UpXSW7DUBXUA== } + engines: { node: '>= 14.15.0' } dependencies: - '@aws-cdk/cfnspec': 2.8.0 + '@aws-cdk/cfnspec': 2.13.0 '@types/node': 10.17.60 chalk: 4.1.2 diff: 5.0.0 @@ -1027,96 +173,6 @@ packages: table: 6.8.0 dev: true - /@aws-cdk/core/1.134.0: - resolution: {integrity: sha512-rdQYFTrGBemgy1C23r2s18ONXgnsp4dXyZMTTcy7e6QkF3JBTI4za2GUWY4XQaKnchGV9UhylPNFqh59hXzEUA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/cloud-assembly-schema': 1.134.0 - '@aws-cdk/cx-api': 1.134.0 - '@aws-cdk/region-info': 1.134.0 - '@balena/dockerignore': 1.0.2 - constructs: 3.3.147 - fs-extra: 9.1.0 - ignore: 5.1.9 - minimatch: 3.0.4 - dev: false - bundledDependencies: - - fs-extra - - minimatch - - '@balena/dockerignore' - - ignore - - /@aws-cdk/custom-resources/1.134.0: - resolution: {integrity: sha512-BfVq0IsXpPV6Eyzt0kLzNzLHKZvslNzQexSXY3yN5E2NHqXucqCem4X+qN+xp8p5eO0R83pmsPKUW9OT9SyEqg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-cloudformation': 1.134.0 - '@aws-cdk/aws-ec2': 1.134.0 - '@aws-cdk/aws-iam': 1.134.0 - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/aws-logs': 1.134.0 - '@aws-cdk/aws-sns': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/cx-api/1.134.0: - resolution: {integrity: sha512-D822T7LI+61Sktv4bdR6g2rKXdGNgYZXkkHrSSpATp6ov++0E0ttsQVblkLrzcOtKtB5nbaGrF7cf/0fxdoKeg==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/cloud-assembly-schema': 1.134.0 - semver: 7.3.5 - dev: false - bundledDependencies: - - semver - - /@aws-cdk/cx-api/2.8.0: - resolution: {integrity: sha512-phz2j+uVuYfVIfkhXHF37GuRgf7qQklMV+XUVmG2+sfdXBKq5bZl9kOCTAHx37I1mQOH2tzEDu/EU3l4XuHfZw==} - engines: {node: '>= 14.15.0'} - dependencies: - '@aws-cdk/cloud-assembly-schema': 2.8.0 - semver: 7.3.5 - dev: true - bundledDependencies: - - semver - - /@aws-cdk/lambda-layer-awscli/1.134.0: - resolution: {integrity: sha512-LXzfg3aadSHkSeefMnGveIDXj+K7/79Ug19Sm4Vp0CZXAykkUco1RWk9TZ/dKoEPxGC8MhYoQYxxZegjUlMmzw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/lambda-layer-kubectl/1.134.0: - resolution: {integrity: sha512-FrzgFgLzZkDEzCJfRs0ig7JzkrXfbx+aSPh/aVROr98wlSPoMWFiavGBRS0BIB5JK7eXxpg7I0VPvMFzEx96OA==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/lambda-layer-node-proxy-agent/1.134.0: - resolution: {integrity: sha512-5l3BmgI5H3nq8+FWK/2W9T8bqbmsyJ4bhCswao6xZ3I2LT2iKPs2Gw0oXPhDc6xakdy2DglSlOUx9kM9ZvWW4w==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dependencies: - '@aws-cdk/aws-lambda': 1.134.0 - '@aws-cdk/core': 1.134.0 - constructs: 3.3.147 - dev: false - - /@aws-cdk/region-info/1.134.0: - resolution: {integrity: sha512-1BzvZsdXWvn1ub3yGcpALafBHqISbirgNz9fsFuqvZuBUYJBiIi97awSyFMKZKzLvGNkrAk9rsNjHo9gWnJOWw==} - engines: {node: '>= 10.13.0 <13 || >=13.7.0'} - dev: false - - /@aws-cdk/region-info/2.8.0: - resolution: {integrity: sha512-CozezuNkdIruZEVEHQRxN4Cl0QcYKb/PDMGDeIYspZdjgGsttpeSkk2QFZ1Y9AMTOZMSyVExcQF4gZ+uU8T5wA==} - engines: {node: '>= 14.15.0'} - dev: true - /@babel/code-frame/7.14.5: resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==} engines: {node: '>=6.9.0'} @@ -1455,73 +511,269 @@ packages: dev: true /@balena/dockerignore/1.0.2: - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - dev: false + resolution: { integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== } + dev: true /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + resolution: { integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== } dev: true - /@cspotcode/source-map-consumer/0.8.0: - resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} - engines: {node: '>= 12'} + /@commitlint/cli/16.2.1: + resolution: { integrity: sha512-zfKf+B9osuiDbxGMJ7bWFv7XFCW8wlQYPtCffNp7Ukdb7mdrep5R9e03vPUZysnwp8NX6hg05kPEvnD/wRIGWw== } + engines: { node: '>=v12' } + hasBin: true + dependencies: + '@commitlint/format': 16.2.1 + '@commitlint/lint': 16.2.1 + '@commitlint/load': 16.2.1 + '@commitlint/read': 16.2.1 + '@commitlint/types': 16.2.1 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.3.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' dev: true - /@cspotcode/source-map-support/0.7.0: - resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} - engines: {node: '>=12'} + /@commitlint/config-conventional/16.2.1: + resolution: { integrity: sha512-cP9gArx7gnaj4IqmtCIcHdRjTYdRUi6lmGE+lOzGGjGe45qGOS8nyQQNvkNy2Ey2VqoSWuXXkD8zCUh6EHf1Ww== } + engines: { node: '>=v12' } dependencies: - '@cspotcode/source-map-consumer': 0.8.0 + conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@istanbuljs/load-nyc-config/1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + /@commitlint/config-validator/16.2.1: + resolution: { integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw== } + engines: { node: '>=v12' } dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 + '@commitlint/types': 16.2.1 + ajv: 6.12.6 dev: true - /@istanbuljs/schema/0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + /@commitlint/ensure/16.2.1: + resolution: { integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/types': 16.2.1 + lodash: 4.17.21 dev: true - /@jest/console/27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@commitlint/execute-rule/16.2.1: + resolution: { integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g== } + engines: { node: '>=v12' } + dev: true + + /@commitlint/format/16.2.1: + resolution: { integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q== } + engines: { node: '>=v12' } dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@commitlint/types': 16.2.1 chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 dev: true - /@jest/core/27.5.1_ts-node@10.5.0: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + /@commitlint/is-ignored/16.2.1: + resolution: { integrity: sha512-exl8HRzTIfb1YvDJp2b2HU5z1BT+9tmgxR2XF0YEzkMiCIuEKh+XLeocPr1VcvAKXv3Cmv5X/OfNRp+i+/HIhQ== } + engines: { node: '>=v12' } dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.9 + '@commitlint/types': 16.2.1 + semver: 7.3.5 + dev: true + + /@commitlint/lint/16.2.1: + resolution: { integrity: sha512-fNINQ3X2ZqsCkNB3Z0Z8ElmhewqrS3gy2wgBTx97BkcjOWiyPAGwDJ752hwrsUnWAVBRztgw826n37xPzxsOgg== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/is-ignored': 16.2.1 + '@commitlint/parse': 16.2.1 + '@commitlint/rules': 16.2.1 + '@commitlint/types': 16.2.1 + dev: true + + /@commitlint/load/16.2.1: + resolution: { integrity: sha512-oSpz0jTyVI/A1AIImxJINTLDOMB8YF7lWGm+Jg5wVWM0r7ucpuhyViVvpSRTgvL0z09oIxlctyFGWUQQpI42uw== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/config-validator': 16.2.1 + '@commitlint/execute-rule': 16.2.1 + '@commitlint/resolve-extends': 16.2.1 + '@commitlint/types': 16.2.1 + '@types/node': 17.0.18 + chalk: 4.1.2 + cosmiconfig: 7.0.1 + cosmiconfig-typescript-loader: 1.0.5_f3bd4037939c2ed2942ba074291f8ef2 + lodash: 4.17.21 + resolve-from: 5.0.0 + typescript: 4.5.5 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/message/16.2.1: + resolution: { integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw== } + engines: { node: '>=v12' } + dev: true + + /@commitlint/parse/16.2.1: + resolution: { integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/types': 16.2.1 + conventional-changelog-angular: 5.0.13 + conventional-commits-parser: 3.2.4 + dev: true + + /@commitlint/read/16.2.1: + resolution: { integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/top-level': 16.2.1 + '@commitlint/types': 16.2.1 + fs-extra: 10.0.0 + git-raw-commits: 2.0.11 + dev: true + + /@commitlint/resolve-extends/16.2.1: + resolution: { integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/config-validator': 16.2.1 + '@commitlint/types': 16.2.1 + import-fresh: 3.3.0 + lodash: 4.17.21 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true + + /@commitlint/rules/16.2.1: + resolution: { integrity: sha512-ZFezJXQaBBso+BOTre/+1dGCuCzlWVaeLiVRGypI53qVgPMzQqZhkCcrxBFeqB87qeyzr4A4EoG++IvITwwpIw== } + engines: { node: '>=v12' } + dependencies: + '@commitlint/ensure': 16.2.1 + '@commitlint/message': 16.2.1 + '@commitlint/to-lines': 16.2.1 + '@commitlint/types': 16.2.1 + execa: 5.1.1 + dev: true + + /@commitlint/to-lines/16.2.1: + resolution: { integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ== } + engines: { node: '>=v12' } + dev: true + + /@commitlint/top-level/16.2.1: + resolution: { integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw== } + engines: { node: '>=v12' } + dependencies: + find-up: 5.0.0 + dev: true + + /@commitlint/types/16.2.1: + resolution: { integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA== } + engines: { node: '>=v12' } + dependencies: + chalk: 4.1.2 + dev: true + + /@cspotcode/source-map-consumer/0.8.0: + resolution: { integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== } + engines: { node: '>= 12' } + dev: true + + /@cspotcode/source-map-support/0.7.0: + resolution: { integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== } + engines: { node: '>=12' } + dependencies: + '@cspotcode/source-map-consumer': 0.8.0 + dev: true + + /@eslint/eslintrc/1.1.0: + resolution: { integrity: sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + ajv: 6.12.6 + debug: 4.3.2 + espree: 9.3.1 + globals: 13.12.1 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array/0.9.3: + resolution: { integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== } + engines: { node: '>=10.10.0' } + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.2 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: { integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== } + dev: true + + /@hutson/parse-repository-url/3.0.2: + resolution: { integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== } + engines: { node: '>=6.9.0' } + dev: true + + /@istanbuljs/load-nyc-config/1.1.0: + resolution: { integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== } + engines: { node: '>=8' } + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema/0.1.3: + resolution: { integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== } + engines: { node: '>=8' } + dev: true + + /@jest/console/27.5.1: + resolution: { integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + dependencies: + '@jest/types': 27.5.1 + '@types/node': 17.0.18 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + dev: true + + /@jest/core/27.5.1_ts-node@10.5.0: + resolution: { integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 17.0.18 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.9 jest-changed-files: 27.5.1 jest-config: 27.5.1_ts-node@10.5.0 jest-haste-map: 27.5.1 @@ -1548,30 +800,30 @@ packages: dev: true /@jest/environment/27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 jest-mock: 27.5.1 dev: true /@jest/fake-timers/27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.0.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true /@jest/globals/27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/types': 27.5.1 @@ -1579,8 +831,8 @@ packages: dev: true /@jest/reporters/27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1592,17 +844,17 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.0 graceful-fs: 4.2.9 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.0.0 istanbul-lib-instrument: 5.1.0 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.0 - istanbul-reports: 3.1.3 + istanbul-reports: 3.1.4 jest-haste-map: 27.5.1 jest-resolve: 27.5.1 jest-util: 27.5.1 @@ -1617,8 +869,8 @@ packages: dev: true /@jest/source-map/27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: callsites: 3.1.0 graceful-fs: 4.2.9 @@ -1626,8 +878,8 @@ packages: dev: true /@jest/test-result/27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/console': 27.5.1 '@jest/types': 27.5.1 @@ -1636,8 +888,8 @@ packages: dev: true /@jest/test-sequencer/27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/test-result': 27.5.1 graceful-fs: 4.2.9 @@ -1648,8 +900,8 @@ packages: dev: true /@jest/transform/27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@babel/core': 7.15.5 '@jest/types': 27.5.1 @@ -1671,43 +923,56 @@ packages: dev: true /@jest/types/27.4.2: - resolution: {integrity: sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true - /@jsii/check-node/1.52.1: - resolution: {integrity: sha512-B+vpPwXrKTWA1dBHuStp0sg+YpFZ9APjS6qeDiknMHPMatlT7VA0RVk/LmCLaPZhsfNzByJ+zhRFs0R83zTr1Q==} - engines: {node: '>= 10.3.0'} + /@nodelib/fs.scandir/2.1.5: + resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } + engines: { node: '>= 8' } dependencies: - chalk: 4.1.2 - semver: 7.3.5 + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== } + engines: { node: '>= 8' } + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== } + engines: { node: '>= 8' } + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 dev: true /@sinonjs/commons/1.8.3: - resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} + resolution: { integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== } dependencies: type-detect: 4.0.8 dev: true /@sinonjs/fake-timers/8.0.1: - resolution: {integrity: sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==} + resolution: { integrity: sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== } dependencies: '@sinonjs/commons': 1.8.3 dev: true @@ -1765,7 +1030,7 @@ packages: /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 16.11.25 + '@types/node': 17.0.18 dev: true /@types/istanbul-lib-coverage/2.0.3: @@ -1779,88 +1044,273 @@ packages: dev: true /@types/istanbul-reports/3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + resolution: { integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== } dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true /@types/jest/27.4.0: - resolution: {integrity: sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==} + resolution: { integrity: sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== } dependencies: jest-diff: 27.4.2 pretty-format: 27.4.2 dev: true + /@types/json-schema/7.0.9: + resolution: { integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== } + dev: true + + /@types/json5/0.0.29: + resolution: { integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= } + dev: true + + /@types/minimist/1.2.2: + resolution: { integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== } + dev: true + /@types/node/10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + resolution: { integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== } + dev: true + + /@types/node/17.0.18: + resolution: { integrity: sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== } + dev: true + + /@types/normalize-package-data/2.4.1: + resolution: { integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== } + dev: true + + /@types/parse-json/4.0.0: + resolution: { integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== } dev: true - /@types/node/16.11.25: - resolution: {integrity: sha512-NrTwfD7L1RTc2qrHQD4RTTy4p0CO2LatKBEKEds3CaVuhoM/+DJzmWZl5f+ikR8cm8F5mfJxK+9rQq07gRiSjQ==} + /@types/pluralize/0.0.29: + resolution: { integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA== } dev: true /@types/prettier/2.3.2: - resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} + resolution: { integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== } dev: true /@types/stack-utils/2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + resolution: { integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== } dev: true /@types/yargs-parser/20.2.1: - resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} + resolution: { integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== } dev: true /@types/yargs/16.0.4: - resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} + resolution: { integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== } dependencies: '@types/yargs-parser': 20.2.1 dev: true + /@typescript-eslint/eslint-plugin/5.10.2_2595c2126aec4d4b6e944b931dabb4c2: + resolution: { integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/scope-manager': 5.10.2 + '@typescript-eslint/type-utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 + '@typescript-eslint/utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 + debug: 4.3.2 + eslint: 8.8.0 + functional-red-black-tree: 1.0.1 + ignore: 5.2.0 + regexpp: 3.2.0 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.10.2_eslint@8.8.0+typescript@4.5.5: + resolution: { integrity: sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.10.2 + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/typescript-estree': 5.10.2_typescript@4.5.5 + debug: 4.3.2 + eslint: 8.8.0 + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.10.2: + resolution: { integrity: sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/visitor-keys': 5.10.2 + dev: true + + /@typescript-eslint/type-utils/5.10.2_eslint@8.8.0+typescript@4.5.5: + resolution: { integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/utils': 5.10.2_eslint@8.8.0+typescript@4.5.5 + debug: 4.3.2 + eslint: 8.8.0 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.10.2: + resolution: { integrity: sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dev: true + + /@typescript-eslint/typescript-estree/5.10.2_typescript@4.5.5: + resolution: { integrity: sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/visitor-keys': 5.10.2 + debug: 4.3.2 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.5.5 + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.10.2_eslint@8.8.0+typescript@4.5.5: + resolution: { integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.9 + '@typescript-eslint/scope-manager': 5.10.2 + '@typescript-eslint/types': 5.10.2 + '@typescript-eslint/typescript-estree': 5.10.2_typescript@4.5.5 + eslint: 8.8.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.8.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.10.2: + resolution: { integrity: sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + '@typescript-eslint/types': 5.10.2 + eslint-visitor-keys: 3.3.0 + dev: true + + /JSONStream/1.3.5: + resolution: { integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== } + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + /abab/2.0.5: - resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} + resolution: { integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== } dev: true /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + resolution: { integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== } dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 dev: true + /acorn-jsx/5.3.2_acorn@8.7.0: + resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.7.0 + dev: true + /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} + resolution: { integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== } + engines: { node: '>=0.4.0' } dev: true /acorn-walk/8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} + resolution: { integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== } + engines: { node: '>=0.4.0' } dev: true /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} + engines: { node: '>=0.4.0' } hasBin: true dev: true /acorn/8.5.0: - resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} - engines: {node: '>=0.4.0'} + resolution: { integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== } + engines: { node: '>=0.4.0' } + hasBin: true + dev: true + + /acorn/8.7.0: + resolution: { integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== } + engines: { node: '>=0.4.0' } hasBin: true dev: true + /add-stream/1.0.0: + resolution: { integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= } + dev: true + /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + resolution: { integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== } + engines: { node: '>= 6.0.0' } dependencies: debug: 4.3.2 transitivePeerDependencies: - supports-color dev: true + /ajv/6.12.6: + resolution: { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + /ajv/8.6.3: - resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + resolution: { integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== } dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1907,123 +1357,99 @@ packages: picomatch: 2.3.0 dev: true - /archiver-utils/2.1.0: - resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} - engines: {node: '>= 6'} - dependencies: - glob: 7.2.0 - graceful-fs: 4.2.9 - lazystream: 1.0.0 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 2.3.7 + /arg/4.1.3: + resolution: { integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== } dev: true - /archiver/5.3.0: - resolution: {integrity: sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==} - engines: {node: '>= 10'} + /argparse/1.0.10: + resolution: { integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== } dependencies: - archiver-utils: 2.1.0 - async: 3.2.1 - buffer-crc32: 0.2.13 - readable-stream: 3.6.0 - readdir-glob: 1.1.1 - tar-stream: 2.2.0 - zip-stream: 4.1.0 + sprintf-js: 1.0.3 dev: true - /arg/4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + /argparse/2.0.1: + resolution: { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } dev: true - /argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + /array-ify/1.0.0: + resolution: { integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= } + dev: true + + /array-includes/3.1.4: + resolution: { integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== } + engines: { node: '>= 0.4' } dependencies: - sprintf-js: 1.0.3 + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + get-intrinsic: 1.1.1 + is-string: 1.0.7 dev: true - /ast-types/0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + /array-union/2.1.0: + resolution: { integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== } + engines: { node: '>=8' } + dev: true + + /array.prototype.flat/1.2.5: + resolution: { integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== } + engines: { node: '>= 0.4' } dependencies: - tslib: 2.3.1 + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 dev: true - /astral-regex/2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + /arrify/1.0.1: + resolution: { integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= } + engines: { node: '>=0.10.0' } dev: true - /async/3.2.1: - resolution: {integrity: sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==} + /astral-regex/2.0.0: + resolution: { integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== } + engines: { node: '>=8' } dev: true /asynckit/0.4.0: - resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} + resolution: { integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= } dev: true /at-least-node/1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} + resolution: { integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== } + engines: { node: '>= 4.0.0' } + dev: true - /aws-cdk/2.8.0: - resolution: {integrity: sha512-zpTck1WTlyYj4PzT9bMEvbNen2YLvcXfKjwhiNNTS71bRWzDyPNXjhrZBNq/LwO97FfjmYKcX8s2GFmptpdECA==} - engines: {node: '>= 14.15.0'} - hasBin: true + /aws-cdk-lib/2.13.0_constructs@10.0.66: + resolution: { integrity: sha512-nKpQk+9H7T128gpzl+7XTu+19Yzj6kmCMrvSwTXLa/qr4/soEpXI68/+19ymEAHOYEL4Dd3eyk490P+y0wzi6A== } + engines: { node: '>= 14.15.0' } + peerDependencies: + constructs: ^10.0.0 dependencies: - '@aws-cdk/cloud-assembly-schema': 2.8.0 - '@aws-cdk/cloudformation-diff': 2.8.0 - '@aws-cdk/cx-api': 2.8.0 - '@aws-cdk/region-info': 2.8.0 - '@jsii/check-node': 1.52.1 - archiver: 5.3.0 - aws-sdk: 2.988.0 - camelcase: 6.3.0 - cdk-assets: 2.8.0 - chalk: 4.1.2 - chokidar: 3.5.2 - decamelize: 5.0.1 + '@balena/dockerignore': 1.0.2 + case: 1.6.3 + constructs: 10.0.66 fs-extra: 9.1.0 - glob: 7.2.0 - json-diff: 0.7.1 - minimatch: 3.0.4 - promptly: 3.2.0 - proxy-agent: 5.0.0 + ignore: 5.2.0 + jsonschema: 1.4.0 + minimatch: 3.1.2 + punycode: 2.1.1 semver: 7.3.5 - source-map-support: 0.5.21 - strip-ansi: 6.0.1 - table: 6.8.0 - uuid: 8.3.2 - wrap-ansi: 7.0.0 yaml: 1.10.2 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /aws-sdk/2.988.0: - resolution: {integrity: sha512-2b56fPJ9vHgLnDeZ6NDgQzzJT/0NbSGNYIzGZx47/FROwoxRArqt9agiQ14y1zlXPsP9QNKPjp6HsW4IFLjGWQ==} - engines: {node: '>= 0.8.0'} - requiresBuild: true - dependencies: - buffer: 4.9.2 - events: 1.1.1 - ieee754: 1.1.13 - jmespath: 0.15.0 - querystring: 0.2.0 - sax: 1.2.1 - url: 0.10.3 - uuid: 3.3.2 - xml2js: 0.4.19 dev: true + bundledDependencies: + - '@balena/dockerignore' + - case + - fs-extra + - ignore + - jsonschema + - minimatch + - punycode + - semver + - yaml /babel-jest/27.5.1_@babel+core@7.15.5: - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } peerDependencies: '@babel/core': ^7.8.0 dependencies: @@ -2041,8 +1467,8 @@ packages: dev: true /babel-plugin-istanbul/6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + resolution: { integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== } + engines: { node: '>=8' } dependencies: '@babel/helper-plugin-utils': 7.14.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -2054,8 +1480,8 @@ packages: dev: true /babel-plugin-jest-hoist/27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@babel/template': 7.15.4 '@babel/types': 7.15.6 @@ -2064,7 +1490,7 @@ packages: dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.15.5: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + resolution: { integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== } peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -2084,8 +1510,8 @@ packages: dev: true /babel-preset-jest/27.5.1_@babel+core@7.15.5: - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -2095,23 +1521,7 @@ packages: dev: true /balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bl/4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 + resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } dev: true /brace-expansion/1.1.11: @@ -2119,6 +1529,7 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -2151,74 +1562,57 @@ packages: dev: true /bser/2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: { integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== } dependencies: node-int64: 0.4.0 dev: true - /buffer-crc32/0.2.13: - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} - dev: true - /buffer-from/1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - /buffer/4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - isarray: 1.0.0 - dev: true + resolution: { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + /call-bind/1.0.2: + resolution: { integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== } dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 dev: true - /bytes/3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} - engines: {node: '>= 0.8'} + /callsites/3.1.0: + resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } + engines: { node: '>=6' } dev: true - /callsites/3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + /camelcase-keys/6.2.2: + resolution: { integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== } + engines: { node: '>=8' } + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 dev: true /camelcase/5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: { integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== } + engines: { node: '>=6' } dev: true /camelcase/6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + resolution: { integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== } + engines: { node: '>=10' } dev: true /caniuse-lite/1.0.30001257: - resolution: {integrity: sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==} + resolution: { integrity: sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== } dev: true - /cdk-assets/2.8.0: - resolution: {integrity: sha512-iWHnvalMDKuFHRDTKYAkoMzIubHW5cCoArDi92rBKIoTc0wIgv6+MFnQfEPaRLUW/32vVIhrHV774nkfrN89mw==} - engines: {node: '>= 14.15.0'} - hasBin: true - dependencies: - '@aws-cdk/cloud-assembly-schema': 2.8.0 - '@aws-cdk/cx-api': 2.8.0 - archiver: 5.3.0 - aws-sdk: 2.988.0 - glob: 7.2.0 - mime: 2.6.0 - yargs: 16.2.0 + /case/1.6.3: + resolution: { integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== } + engines: { node: '>= 0.8.0' } dev: true /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + resolution: { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== } + engines: { node: '>=4' } dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -2242,21 +1636,6 @@ packages: resolution: {integrity: sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=} dev: true - /chokidar/3.5.2: - resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /ci-info/3.2.0: resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} dev: true @@ -2265,17 +1644,6 @@ packages: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /cli-color/2.0.1: - resolution: {integrity: sha512-eBbxZF6fqPUNnf7CLAFOersUnyYzv83tHFLSlts+OAHsNendaqv2tHCq+/MO+b3Y+9JeoUlIvobyxG/Z8GNeOg==} - engines: {node: '>=0.10'} - dependencies: - d: 1.0.1 - es5-ext: 0.10.53 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - dev: true - /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: @@ -2315,64 +1683,255 @@ packages: dev: true /colorette/1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + resolution: { integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== } dev: true /combined-stream/1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + resolution: { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } + engines: { node: '>= 0.8' } dependencies: delayed-stream: 1.0.0 dev: true - /compress-commons/4.1.1: - resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==} - engines: {node: '>= 10'} + /compare-func/2.0.0: + resolution: { integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== } dependencies: - buffer-crc32: 0.2.13 - crc32-stream: 4.0.2 - normalize-path: 3.0.0 - readable-stream: 3.6.0 + array-ify: 1.0.0 + dot-prop: 5.3.0 dev: true /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + dev: true - /constructs/3.3.147: - resolution: {integrity: sha512-xTSA87W5hscsHdFC2NcbJWALeMt8QWoCvVXRHPIuoBDDXdvBuNoqL2a5kY1yEWSMLQvBPnrDyinfz3twTX6dAw==} - engines: {node: '>= 10.17.0'} - dev: false - bundledDependencies: [] + /concat-stream/2.0.0: + resolution: { integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== } + engines: { '0': node >= 6.0 } + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.0 + typedarray: 0.0.6 + dev: true + + /constructs/10.0.66: + resolution: { integrity: sha512-luFprSllFDm8iEt/irxsWnm8PHNKNNnZ3pV+5PRXDUOnLaWCv6Vwm+7E0IX6pfgiSphOSsWqhA4ReJA+xe0YHg== } + engines: { node: '>= 12.7.0' } + dev: true + + /conventional-changelog-angular/5.0.13: + resolution: { integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== } + engines: { node: '>=10' } + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-atom/2.0.8: + resolution: { integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-codemirror/2.0.8: + resolution: { integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-config-spec/2.1.0: + resolution: { integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== } + dev: true + + /conventional-changelog-conventionalcommits/4.6.1: + resolution: { integrity: sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw== } + engines: { node: '>=10' } + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + dev: true + + /conventional-changelog-conventionalcommits/4.6.3: + resolution: { integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== } + engines: { node: '>=10' } + dependencies: + compare-func: 2.0.0 + lodash: 4.17.21 + q: 1.5.1 + dev: true + + /conventional-changelog-core/4.2.4: + resolution: { integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== } + engines: { node: '>=10' } + dependencies: + add-stream: 1.0.0 + conventional-changelog-writer: 5.0.1 + conventional-commits-parser: 3.2.4 + dateformat: 3.0.3 + get-pkg-repo: 4.2.1 + git-raw-commits: 2.0.11 + git-remote-origin-url: 2.0.0 + git-semver-tags: 4.1.1 + lodash: 4.17.21 + normalize-package-data: 3.0.3 + q: 1.5.1 + read-pkg: 3.0.0 + read-pkg-up: 3.0.0 + through2: 4.0.2 + dev: true + + /conventional-changelog-ember/2.0.9: + resolution: { integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-eslint/3.0.9: + resolution: { integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-express/2.0.6: + resolution: { integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-jquery/3.0.11: + resolution: { integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== } + engines: { node: '>=10' } + dependencies: + q: 1.5.1 + dev: true + + /conventional-changelog-jshint/2.0.9: + resolution: { integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== } + engines: { node: '>=10' } + dependencies: + compare-func: 2.0.0 + q: 1.5.1 + dev: true + + /conventional-changelog-preset-loader/2.3.4: + resolution: { integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== } + engines: { node: '>=10' } + dev: true + + /conventional-changelog-writer/5.0.1: + resolution: { integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== } + engines: { node: '>=10' } + hasBin: true + dependencies: + conventional-commits-filter: 2.0.7 + dateformat: 3.0.3 + handlebars: 4.7.7 + json-stringify-safe: 5.0.1 + lodash: 4.17.21 + meow: 8.1.2 + semver: 6.3.0 + split: 1.0.1 + through2: 4.0.2 + dev: true + + /conventional-changelog/3.1.24: + resolution: { integrity: sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== } + engines: { node: '>=10' } + dependencies: + conventional-changelog-angular: 5.0.13 + conventional-changelog-atom: 2.0.8 + conventional-changelog-codemirror: 2.0.8 + conventional-changelog-conventionalcommits: 4.6.3 + conventional-changelog-core: 4.2.4 + conventional-changelog-ember: 2.0.9 + conventional-changelog-eslint: 3.0.9 + conventional-changelog-express: 2.0.6 + conventional-changelog-jquery: 3.0.11 + conventional-changelog-jshint: 2.0.9 + conventional-changelog-preset-loader: 2.3.4 + dev: true + + /conventional-commits-filter/2.0.7: + resolution: { integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== } + engines: { node: '>=10' } + dependencies: + lodash.ismatch: 4.4.0 + modify-values: 1.0.1 + dev: true + + /conventional-commits-parser/3.2.4: + resolution: { integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== } + engines: { node: '>=10' } + hasBin: true + dependencies: + is-text-path: 1.0.1 + JSONStream: 1.3.5 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /conventional-recommended-bump/6.1.0: + resolution: { integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== } + engines: { node: '>=10' } + hasBin: true + dependencies: + concat-stream: 2.0.0 + conventional-changelog-preset-loader: 2.3.4 + conventional-commits-filter: 2.0.7 + conventional-commits-parser: 3.2.4 + git-raw-commits: 2.0.11 + git-semver-tags: 4.1.1 + meow: 8.1.2 + q: 1.5.1 + dev: true /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + resolution: { integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== } dependencies: safe-buffer: 5.1.2 dev: true /core-util-is/1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + resolution: { integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== } dev: true - /crc-32/1.2.0: - resolution: {integrity: sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==} - engines: {node: '>=0.8'} - hasBin: true + /cosmiconfig-typescript-loader/1.0.5_f3bd4037939c2ed2942ba074291f8ef2: + resolution: { integrity: sha512-FL/YR1nb8hyN0bAcP3MBaIoZravfZtVsN/RuPnoo6UVjqIrDxSNIpXHCGgJe0ZWy5yImpyD6jq5wCJ5f1nUv8g== } + engines: { node: '>=12', npm: '>=6' } + peerDependencies: + '@types/node': '*' + typescript: '>=3' dependencies: - exit-on-epipe: 1.0.1 - printj: 1.1.2 + '@types/node': 17.0.18 + cosmiconfig: 7.0.1 + ts-node: 10.5.0_f3bd4037939c2ed2942ba074291f8ef2 + typescript: 4.5.5 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' dev: true - /crc32-stream/4.0.2: - resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==} - engines: {node: '>= 10'} + /cosmiconfig/7.0.1: + resolution: { integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== } + engines: { node: '>=10' } dependencies: - crc-32: 1.2.0 - readable-stream: 3.6.0 + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 dev: true /create-require/1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + resolution: { integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== } dev: true /cross-spawn/7.0.3: @@ -2393,40 +1952,49 @@ packages: dev: true /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + resolution: { integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== } dev: true /cssstyle/2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + resolution: { integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== } + engines: { node: '>=8' } dependencies: cssom: 0.3.8 dev: true - /d/1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} - dependencies: - es5-ext: 0.10.53 - type: 1.2.0 - dev: true - - /data-uri-to-buffer/3.0.1: - resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} - engines: {node: '>= 6'} + /dargs/7.0.0: + resolution: { integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== } + engines: { node: '>=8' } dev: true /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== } + engines: { node: '>=10' } dependencies: abab: 2.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 dev: true + /dateformat/3.0.3: + resolution: { integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== } + dev: true + + /debug/2.6.9: + resolution: { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: { integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== } + dependencies: + ms: 2.1.2 + dev: true + /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} + resolution: { integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -2436,205 +2004,380 @@ packages: ms: 2.1.2 dev: true - /decamelize/5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} + /decamelize-keys/1.1.0: + resolution: { integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= } + engines: { node: '>=0.10.0' } + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize/1.2.0: + resolution: { integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= } + engines: { node: '>=0.10.0' } dev: true /decimal.js/10.3.1: - resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} + resolution: { integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== } dev: true /dedent/0.7.0: - resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} + resolution: { integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= } dev: true /deep-is/0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } dev: true /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== } + engines: { node: '>=0.10.0' } dev: true - /degenerator/3.0.1: - resolution: {integrity: sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==} - engines: {node: '>= 6'} + /define-properties/1.1.3: + resolution: { integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== } + engines: { node: '>= 0.4' } dependencies: - ast-types: 0.13.4 - escodegen: 1.14.3 - esprima: 4.0.1 - vm2: 3.9.5 + object-keys: 1.1.1 dev: true /delayed-stream/1.0.0: - resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} - engines: {node: '>=0.4.0'} + resolution: { integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= } + engines: { node: '>=0.4.0' } dev: true - /depd/1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} + /detect-indent/6.1.0: + resolution: { integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== } + engines: { node: '>=8' } dev: true /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} + resolution: { integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== } + engines: { node: '>=8' } dev: true /diff-sequences/27.4.0: - resolution: {integrity: sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dev: true /diff-sequences/27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dev: true /diff/4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + resolution: { integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== } + engines: { node: '>=0.3.1' } dev: true /diff/5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} + resolution: { integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== } + engines: { node: '>=0.3.1' } dev: true - /difflib/0.2.4: - resolution: {integrity: sha1-teMDYabbAjF21WKJLbhZQKcY9H4=} + /dir-glob/3.0.1: + resolution: { integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== } + engines: { node: '>=8' } dependencies: - heap: 0.2.6 + path-type: 4.0.0 + dev: true + + /doctrine/2.1.0: + resolution: { integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== } + engines: { node: '>=0.10.0' } + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: { integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== } + engines: { node: '>=6.0.0' } + dependencies: + esutils: 2.0.3 dev: true /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== } + engines: { node: '>=8' } dependencies: webidl-conversions: 5.0.0 dev: true - /dreamopt/0.8.0: - resolution: {integrity: sha1-W8yAvnCX5F/EicNCQFq2gUCowdk=} - engines: {node: '>=0.4.0'} + /dot-prop/5.3.0: + resolution: { integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== } + engines: { node: '>=8' } dependencies: - wordwrap: 1.0.0 + is-obj: 2.0.0 + dev: true + + /dotgitignore/2.1.0: + resolution: { integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== } + engines: { node: '>=6' } + dependencies: + find-up: 3.0.0 + minimatch: 3.1.2 dev: true /electron-to-chromium/1.3.838: - resolution: {integrity: sha512-65O6UJiyohFAdX/nc6KJ0xG/4zOn7XCO03kQNNbCeMRGxlWTLzc6Uyi0tFNQuuGWqySZJi8CD2KXPXySVYmzMA==} + resolution: { integrity: sha512-65O6UJiyohFAdX/nc6KJ0xG/4zOn7XCO03kQNNbCeMRGxlWTLzc6Uyi0tFNQuuGWqySZJi8CD2KXPXySVYmzMA== } dev: true /emittery/0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} + resolution: { integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== } + engines: { node: '>=10' } dev: true /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } dev: true - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + /error-ex/1.3.2: + resolution: { integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== } dependencies: - once: 1.4.0 + is-arrayish: 0.2.1 dev: true - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + /es-abstract/1.19.1: + resolution: { integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== } + engines: { node: '>= 0.4' } dependencies: - is-arrayish: 0.2.1 + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.1 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.1 + dev: true + + /es-to-primitive/1.2.1: + resolution: { integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== } + engines: { node: '>= 0.4' } + dependencies: + is-callable: 1.2.4 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade/3.1.1: + resolution: { integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== } + engines: { node: '>=6' } dev: true - /es5-ext/0.10.53: - resolution: {integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==} + /escape-string-regexp/1.0.5: + resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } + engines: { node: '>=0.8.0' } + dev: true + + /escape-string-regexp/2.0.0: + resolution: { integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== } + engines: { node: '>=8' } + dev: true + + /escape-string-regexp/4.0.0: + resolution: { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } + engines: { node: '>=10' } + dev: true + + /escodegen/2.0.0: + resolution: { integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== } + engines: { node: '>=6.0' } + hasBin: true dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - next-tick: 1.0.0 + esprima: 4.0.1 + estraverse: 5.2.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 dev: true - /es6-iterator/2.0.3: - resolution: {integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c=} + /eslint-import-resolver-node/0.3.6: + resolution: { integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== } dependencies: - d: 1.0.1 - es5-ext: 0.10.53 - es6-symbol: 3.1.3 + debug: 3.2.7 + resolve: 1.20.0 dev: true - /es6-symbol/3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + /eslint-import-resolver-typescript/2.5.0_392f898cec7735a5f7a99430cbc0b4f4: + resolution: { integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ== } + engines: { node: '>=4' } + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' dependencies: - d: 1.0.1 - ext: 1.6.0 + debug: 4.3.2 + eslint: 8.8.0 + eslint-plugin-import: 2.25.4_eslint@8.8.0 + glob: 7.2.0 + is-glob: 4.0.3 + resolve: 1.20.0 + tsconfig-paths: 3.12.0 + transitivePeerDependencies: + - supports-color dev: true - /es6-weak-map/2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + /eslint-module-utils/2.7.3: + resolution: { integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== } + engines: { node: '>=4' } dependencies: - d: 1.0.1 - es5-ext: 0.10.53 - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + debug: 3.2.7 + find-up: 2.1.0 dev: true - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + /eslint-plugin-import/2.25.4_eslint@8.8.0: + resolution: { integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== } + engines: { node: '>=4' } + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + dependencies: + array-includes: 3.1.4 + array.prototype.flat: 1.2.5 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.8.0 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.3 + has: 1.0.3 + is-core-module: 2.8.1 + is-glob: 4.0.3 + minimatch: 3.0.4 + object.values: 1.1.5 + resolve: 1.20.0 + tsconfig-paths: 3.12.0 dev: true - /escape-string-regexp/1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} + /eslint-scope/5.1.1: + resolution: { integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== } + engines: { node: '>=8.0.0' } + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 dev: true - /escape-string-regexp/2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + /eslint-scope/7.1.1: + resolution: { integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + esrecurse: 4.3.0 + estraverse: 5.2.0 dev: true - /escodegen/1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true + /eslint-utils/3.0.0_eslint@8.8.0: + resolution: { integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== } + engines: { node: ^10.0.0 || ^12.0.0 || >= 14.0.0 } + peerDependencies: + eslint: '>=5' dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 + eslint: 8.8.0 + eslint-visitor-keys: 2.1.0 dev: true - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} + /eslint-visitor-keys/2.1.0: + resolution: { integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== } + engines: { node: '>=10' } + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: { integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dev: true + + /eslint/8.8.0: + resolution: { integrity: sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } hasBin: true dependencies: - esprima: 4.0.1 - estraverse: 5.2.0 + '@eslint/eslintrc': 1.1.0 + '@humanwhocodes/config-array': 0.9.3 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.2 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.8.0 + eslint-visitor-keys: 3.3.0 + espree: 9.3.1 + esquery: 1.4.0 esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.12.1 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.3.1: + resolution: { integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + dependencies: + acorn: 8.7.0 + acorn-jsx: 5.3.2_acorn@8.7.0 + eslint-visitor-keys: 3.3.0 dev: true /esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: { integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== } + engines: { node: '>=4' } hasBin: true dev: true + /esquery/1.4.0: + resolution: { integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== } + engines: { node: '>=0.10' } + dependencies: + estraverse: 5.2.0 + dev: true + + /esrecurse/4.3.0: + resolution: { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== } + engines: { node: '>=4.0' } + dependencies: + estraverse: 5.2.0 + dev: true + /estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} + resolution: { integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== } + engines: { node: '>=4.0' } dev: true /estraverse/5.2.0: - resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} - engines: {node: '>=4.0'} + resolution: { integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== } + engines: { node: '>=4.0' } dev: true /esutils/2.0.3: @@ -2642,18 +2385,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /event-emitter/0.3.5: - resolution: {integrity: sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=} - dependencies: - d: 1.0.1 - es5-ext: 0.10.53 - dev: true - - /events/1.1.1: - resolution: {integrity: sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=} - engines: {node: '>=0.4.x'} - dev: true - /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2669,19 +2400,14 @@ packages: strip-final-newline: 2.0.0 dev: true - /exit-on-epipe/1.0.1: - resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} - engines: {node: '>=0.8'} - dev: true - /exit/0.1.2: - resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} - engines: {node: '>= 0.8.0'} + resolution: { integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= } + engines: { node: '>= 0.8.0' } dev: true /expect/27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 jest-get-type: 27.5.1 @@ -2689,193 +2415,365 @@ packages: jest-message-util: 27.5.1 dev: true - /ext/1.6.0: - resolution: {integrity: sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==} - dependencies: - type: 2.5.0 + /fast-deep-equal/3.1.3: + resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } dev: true - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-glob/3.2.11: + resolution: { integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== } + engines: { node: '>=8.6.0' } + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 dev: true /fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } dev: true /fast-levenshtein/2.0.6: - resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + resolution: { integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= } + dev: true + + /fastq/1.13.0: + resolution: { integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== } + dependencies: + reusify: 1.0.4 dev: true /fb-watchman/2.0.1: - resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + resolution: { integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== } dependencies: bser: 2.1.1 dev: true - /file-uri-to-path/2.0.0: - resolution: {integrity: sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==} - engines: {node: '>= 6'} + /figures/3.2.0: + resolution: { integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== } + engines: { node: '>=8' } + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-entry-cache/6.0.1: + resolution: { integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flat-cache: 3.0.4 dev: true /fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + resolution: { integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== } + engines: { node: '>=8' } dependencies: to-regex-range: 5.0.1 dev: true + /find-up/2.1.0: + resolution: { integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= } + engines: { node: '>=4' } + dependencies: + locate-path: 2.0.0 + dev: true + + /find-up/3.0.0: + resolution: { integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== } + engines: { node: '>=6' } + dependencies: + locate-path: 3.0.0 + dev: true + /find-up/4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: { integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== } + engines: { node: '>=8' } dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true + /find-up/5.0.0: + resolution: { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } + engines: { node: '>=10' } + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: { integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== } + engines: { node: ^10.12.0 || >=12.0.0 } + dependencies: + flatted: 3.2.5 + rimraf: 3.0.2 + dev: true + /flatted/3.2.5: - resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} - dev: false + resolution: { integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== } /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} + resolution: { integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== } + engines: { node: '>= 6' } dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.32 dev: true - /fs-constants/1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + /fs-access/1.0.1: + resolution: { integrity: sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= } + engines: { node: '>=0.10.0' } + dependencies: + null-check: 1.0.0 dev: true - /fs-extra/8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + /fs-extra/10.0.0: + resolution: { integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== } + engines: { node: '>=12' } dependencies: graceful-fs: 4.2.9 - jsonfile: 4.0.0 - universalify: 0.1.2 + jsonfile: 6.1.0 + universalify: 2.0.0 dev: true /fs-extra/9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== } + engines: { node: '>=10' } dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.9 jsonfile: 6.1.0 universalify: 2.0.0 + dev: true /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + resolution: { integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [ darwin ] requiresBuild: true dev: true - optional: true + optional: true + + /function-bind/1.1.1: + resolution: { integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== } + dev: true + + /functional-red-black-tree/1.0.1: + resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } + dev: true + + /gensync/1.0.0-beta.2: + resolution: { integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== } + engines: { node: '>=6.9.0' } + dev: true + + /get-caller-file/2.0.5: + resolution: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } + engines: { node: 6.* || 8.* || >= 10.* } + dev: true + + /get-intrinsic/1.1.1: + resolution: { integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== } + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: true + + /get-package-type/0.1.0: + resolution: { integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== } + engines: { node: '>=8.0.0' } + dev: true - /ftp/0.3.10: - resolution: {integrity: sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=} - engines: {node: '>=0.8.0'} + /get-pkg-repo/4.2.1: + resolution: { integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== } + engines: { node: '>=6.9.0' } + hasBin: true dependencies: - readable-stream: 1.1.14 - xregexp: 2.0.0 + '@hutson/parse-repository-url': 3.0.2 + hosted-git-info: 4.1.0 + through2: 2.0.5 + yargs: 16.2.0 dev: true - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /get-stream/6.0.1: + resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } + engines: { node: '>=10' } dev: true - /gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + /get-symbol-description/1.0.0: + resolution: { integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 dev: true - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + /git-raw-commits/2.0.11: + resolution: { integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== } + engines: { node: '>=10' } + hasBin: true + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 dev: true - /get-package-type/0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + /git-remote-origin-url/2.0.0: + resolution: { integrity: sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= } + engines: { node: '>=4' } + dependencies: + gitconfiglocal: 1.0.0 + pify: 2.3.0 dev: true - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + /git-semver-tags/4.1.1: + resolution: { integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== } + engines: { node: '>=10' } + hasBin: true + dependencies: + meow: 8.1.2 + semver: 6.3.0 dev: true - /get-uri/3.0.2: - resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} - engines: {node: '>= 6'} + /gitconfiglocal/1.0.0: + resolution: { integrity: sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= } dependencies: - '@tootallnate/once': 1.1.2 - data-uri-to-buffer: 3.0.1 - debug: 4.3.2 - file-uri-to-path: 2.0.0 - fs-extra: 8.1.0 - ftp: 0.3.10 - transitivePeerDependencies: - - supports-color + ini: 1.3.8 dev: true /glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== } + engines: { node: '>= 6' } + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } + engines: { node: '>=10.13.0' } dependencies: is-glob: 4.0.3 dev: true /glob/7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + resolution: { integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== } dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true + /global-dirs/0.1.1: + resolution: { integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= } + engines: { node: '>=4' } + dependencies: + ini: 1.3.8 + dev: true + /globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + resolution: { integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== } + engines: { node: '>=4' } + dev: true + + /globals/13.12.1: + resolution: { integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== } + engines: { node: '>=8' } + dependencies: + type-fest: 0.20.2 + dev: true + + /globby/11.1.0: + resolution: { integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== } + engines: { node: '>=10' } + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 dev: true /graceful-fs/4.2.9: - resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + resolution: { integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== } + dev: true + + /handlebars/4.7.7: + resolution: { integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== } + engines: { node: '>=0.4.7' } + hasBin: true + dependencies: + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.15.1 + dev: true + + /hard-rejection/2.1.0: + resolution: { integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== } + engines: { node: '>=6' } + dev: true + + /has-bigints/1.0.1: + resolution: { integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== } + dev: true /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} + resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } + engines: { node: '>=4' } dev: true /has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } + engines: { node: '>=8' } + dev: true + + /has-symbols/1.0.2: + resolution: { integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== } + engines: { node: '>= 0.4' } + dev: true + + /has-tostringtag/1.0.0: + resolution: { integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== } + engines: { node: '>= 0.4' } + dependencies: + has-symbols: 1.0.2 dev: true /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + resolution: { integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== } + engines: { node: '>= 0.4.0' } dependencies: function-bind: 1.1.1 dev: true - /heap/0.2.6: - resolution: {integrity: sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=} + /hosted-git-info/2.8.9: + resolution: { integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== } + dev: true + + /hosted-git-info/4.1.0: + resolution: { integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== } + engines: { node: '>=10' } + dependencies: + lru-cache: 6.0.0 dev: true /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== } + engines: { node: '>=10' } dependencies: whatwg-encoding: 1.0.5 dev: true @@ -2884,17 +2782,6 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-errors/1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: true - /http-proxy-agent/4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} @@ -2917,33 +2804,44 @@ packages: dev: true /human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + resolution: { integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== } + engines: { node: '>=10.17.0' } + dev: true + + /husky/7.0.4: + resolution: { integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== } + engines: { node: '>=12' } + hasBin: true dev: true /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } + engines: { node: '>=0.10.0' } dependencies: safer-buffer: 2.1.2 dev: true - /ieee754/1.1.13: - resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + /ignore/4.0.6: + resolution: { integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== } + engines: { node: '>= 4' } dev: true - /ieee754/1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + /ignore/5.2.0: + resolution: { integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== } + engines: { node: '>= 4' } dev: true - /ignore/5.1.9: - resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} - engines: {node: '>= 4'} - dev: false + /import-fresh/3.3.0: + resolution: { integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== } + engines: { node: '>=6' } + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true /import-local/3.0.2: - resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} - engines: {node: '>=8'} + resolution: { integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== } + engines: { node: '>=8' } hasBin: true dependencies: pkg-dir: 4.2.0 @@ -2951,110 +2849,201 @@ packages: dev: true /imurmurhash/0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} + resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } + engines: { node: '>=0.8.19' } + dev: true + + /indent-string/4.0.0: + resolution: { integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== } + engines: { node: '>=8' } dev: true /inflight/1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + dev: true + + /ini/1.3.8: + resolution: { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== } dev: true - /ip/1.1.5: - resolution: {integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=} + /internal-slot/1.0.3: + resolution: { integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== } + engines: { node: '>= 0.4' } + dependencies: + get-intrinsic: 1.1.1 + has: 1.0.3 + side-channel: 1.0.4 dev: true /is-arrayish/0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } dev: true - /is-binary-path/2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + /is-bigint/1.0.4: + resolution: { integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== } dependencies: - binary-extensions: 2.2.0 + has-bigints: 1.0.1 + dev: true + + /is-boolean-object/1.1.2: + resolution: { integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-buffer/1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + resolution: { integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== } + dev: true + + /is-callable/1.2.4: + resolution: { integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== } + engines: { node: '>= 0.4' } dev: true - /is-core-module/2.6.0: - resolution: {integrity: sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==} + /is-core-module/2.8.1: + resolution: { integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== } dependencies: has: 1.0.3 dev: true + /is-date-object/1.0.5: + resolution: { integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-extglob/2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } + engines: { node: '>=0.10.0' } dev: true /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } + engines: { node: '>=8' } dev: true /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} + engines: { node: '>=6' } dev: true /is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } + engines: { node: '>=0.10.0' } dependencies: is-extglob: 2.1.1 dev: true + /is-negative-zero/2.0.2: + resolution: { integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== } + engines: { node: '>= 0.4' } + dev: true + + /is-number-object/1.0.6: + resolution: { integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== } + engines: { node: '>=0.12.0' } + dev: true + + /is-obj/2.0.0: + resolution: { integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== } + engines: { node: '>=8' } + dev: true + + /is-plain-obj/1.1.0: + resolution: { integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= } + engines: { node: '>=0.10.0' } dev: true /is-potential-custom-element-name/1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + resolution: { integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== } + dev: true + + /is-regex/1.1.4: + resolution: { integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true - /is-promise/2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + /is-shared-array-buffer/1.0.1: + resolution: { integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== } dev: true /is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== } + engines: { node: '>=8' } + dev: true + + /is-string/1.0.7: + resolution: { integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol/1.0.4: + resolution: { integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== } + engines: { node: '>= 0.4' } + dependencies: + has-symbols: 1.0.2 + dev: true + + /is-text-path/1.0.1: + resolution: { integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= } + engines: { node: '>=0.10.0' } + dependencies: + text-extensions: 1.9.0 dev: true /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + resolution: { integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= } dev: true - /isarray/0.0.1: - resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=} + /is-weakref/1.0.2: + resolution: { integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== } + dependencies: + call-bind: 1.0.2 dev: true /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + resolution: { integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= } dev: true /isexe/2.0.0: - resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } + dev: true + + /istanbul-lib-coverage/3.0.0: + resolution: { integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== } + engines: { node: '>=8' } dev: true /istanbul-lib-coverage/3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} + resolution: { integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== } + engines: { node: '>=8' } dev: true /istanbul-lib-instrument/5.1.0: - resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} - engines: {node: '>=8'} + resolution: { integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== } + engines: { node: '>=8' } dependencies: '@babel/core': 7.15.5 '@babel/parser': 7.15.6 @@ -3075,27 +3064,27 @@ packages: dev: true /istanbul-lib-source-maps/4.0.0: - resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== } + engines: { node: '>=8' } dependencies: debug: 4.3.2 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.0.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.3: - resolution: {integrity: sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==} - engines: {node: '>=8'} + /istanbul-reports/3.1.4: + resolution: { integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== } + engines: { node: '>=8' } dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true /jest-changed-files/27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 execa: 5.1.1 @@ -3103,13 +3092,13 @@ packages: dev: true /jest-circus/27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -3130,8 +3119,8 @@ packages: dev: true /jest-cli/27.5.1_ts-node@10.5.0: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3160,8 +3149,8 @@ packages: dev: true /jest-config/27.5.1_ts-node@10.5.0: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } peerDependencies: ts-node: '>=9.0.0' peerDependenciesMeta: @@ -3192,7 +3181,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.5.0_ad16171857a0edcfc445c7bfcf336eb6 + ts-node: 10.5.0_f3bd4037939c2ed2942ba074291f8ef2 transitivePeerDependencies: - bufferutil - canvas @@ -3201,8 +3190,8 @@ packages: dev: true /jest-diff/27.4.2: - resolution: {integrity: sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: chalk: 4.1.2 diff-sequences: 27.4.0 @@ -3211,8 +3200,8 @@ packages: dev: true /jest-diff/27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: chalk: 4.1.2 diff-sequences: 27.5.1 @@ -3221,15 +3210,15 @@ packages: dev: true /jest-docblock/27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: detect-newline: 3.1.0 dev: true /jest-each/27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 @@ -3239,13 +3228,13 @@ packages: dev: true /jest-environment-jsdom/27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -3257,34 +3246,34 @@ packages: dev: true /jest-environment-node/27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true /jest-get-type/27.4.0: - resolution: {integrity: sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dev: true /jest-get-type/27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dev: true /jest-haste-map/27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.25 + '@types/node': 17.0.18 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.9 @@ -3299,14 +3288,14 @@ packages: dev: true /jest-jasmine2/27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -3324,16 +3313,16 @@ packages: dev: true /jest-leak-detector/27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: jest-get-type: 27.5.1 pretty-format: 27.5.1 dev: true /jest-matcher-utils/27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: chalk: 4.1.2 jest-diff: 27.5.1 @@ -3342,8 +3331,8 @@ packages: dev: true /jest-message-util/27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@babel/code-frame': 7.14.5 '@jest/types': 27.5.1 @@ -3357,16 +3346,16 @@ packages: dev: true /jest-mock/27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} - engines: {node: '>=6'} + resolution: { integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== } + engines: { node: '>=6' } peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -3377,13 +3366,13 @@ packages: dev: true /jest-regex-util/27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dev: true /jest-resolve-dependencies/27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 jest-regex-util: 27.5.1 @@ -3393,8 +3382,8 @@ packages: dev: true /jest-resolve/27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 @@ -3409,15 +3398,15 @@ packages: dev: true /jest-runner/27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/console': 27.5.1 '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.9 @@ -3441,8 +3430,8 @@ packages: dev: true /jest-runtime/27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 @@ -3471,16 +3460,16 @@ packages: dev: true /jest-serializer/27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: - '@types/node': 16.11.25 + '@types/node': 17.0.18 graceful-fs: 4.2.9 dev: true /jest-snapshot/27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@babel/core': 7.15.5 '@babel/generator': 7.15.4 @@ -3510,10 +3499,10 @@ packages: /jest-util/27.4.2: resolution: {integrity: sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 ci-info: 3.2.0 graceful-fs: 4.2.9 @@ -3521,11 +3510,11 @@ packages: dev: true /jest-util/27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 chalk: 4.1.2 ci-info: 3.2.0 graceful-fs: 4.2.9 @@ -3533,8 +3522,8 @@ packages: dev: true /jest-validate/27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 camelcase: 6.3.0 @@ -3545,12 +3534,12 @@ packages: dev: true /jest-watcher/27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.11.25 + '@types/node': 17.0.18 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -3558,17 +3547,17 @@ packages: dev: true /jest-worker/27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + resolution: { integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== } + engines: { node: '>= 10.13.0' } dependencies: - '@types/node': 16.11.25 + '@types/node': 17.0.18 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true /jest/27.5.1_ts-node@10.5.0: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3587,26 +3576,28 @@ packages: - utf-8-validate dev: true - /jmespath/0.15.0: - resolution: {integrity: sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=} - engines: {node: '>= 0.6.0'} - dev: true - /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: { integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== } hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true + /js-yaml/4.1.0: + resolution: { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== } + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + /jsdom/16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} + resolution: { integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== } + engines: { node: '>=10' } peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -3614,7 +3605,7 @@ packages: optional: true dependencies: abab: 2.0.5 - acorn: 8.5.0 + acorn: 8.7.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -3647,124 +3638,160 @@ packages: dev: true /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + resolution: { integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== } + engines: { node: '>=4' } hasBin: true dev: true - /json-diff/0.7.1: - resolution: {integrity: sha512-/LxjcgeDIZwFB1HHTShKAYs2NaxAgwUQjXKvrFLDvw3KqvbffFmy5ZeeamxoSLgQG89tRs9+CFKiR3lJAPPhDw==} - hasBin: true - dependencies: - cli-color: 2.0.1 - difflib: 0.2.4 - dreamopt: 0.8.0 + /json-parse-better-errors/1.0.2: + resolution: { integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== } dev: true /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== } + dev: true + + /json-schema-traverse/0.4.1: + resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } dev: true /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + resolution: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } dev: true - /json5/2.2.0: - resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} - engines: {node: '>=6'} + /json-stable-stringify-without-jsonify/1.0.1: + resolution: { integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= } + dev: true + + /json-stringify-safe/5.0.1: + resolution: { integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= } + dev: true + + /json5/1.0.1: + resolution: { integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== } hasBin: true dependencies: minimist: 1.2.5 dev: true - /jsonfile/4.0.0: - resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} - optionalDependencies: - graceful-fs: 4.2.9 + /json5/2.2.0: + resolution: { integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== } + engines: { node: '>=6' } + hasBin: true + dependencies: + minimist: 1.2.5 dev: true /jsonfile/6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + resolution: { integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== } dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.9 + dev: true + + /jsonparse/1.3.1: + resolution: { integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= } + engines: { '0': node >= 0.2.0 } + dev: true /jsonschema/1.4.0: - resolution: {integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==} + resolution: { integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== } + dev: true - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + /kind-of/6.0.3: + resolution: { integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== } + engines: { node: '>=0.10.0' } dev: true - /lazystream/1.0.0: - resolution: {integrity: sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=} - engines: {node: '>= 0.6.3'} - dependencies: - readable-stream: 2.3.7 + /kleur/3.0.3: + resolution: { integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== } + engines: { node: '>=6' } dev: true /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + resolution: { integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== } + engines: { node: '>=6' } dev: true /levn/0.3.0: - resolution: {integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=} - engines: {node: '>= 0.8.0'} + resolution: { integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= } + engines: { node: '>= 0.8.0' } dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true + /levn/0.4.1: + resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } + engines: { node: '>= 0.8.0' } + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /lines-and-columns/1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } dev: true - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + /load-json-file/4.0.0: + resolution: { integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs= } + engines: { node: '>=4' } dependencies: - p-locate: 4.1.0 + graceful-fs: 4.2.9 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + + /locate-path/2.0.0: + resolution: { integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= } + engines: { node: '>=4' } + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 dev: true - /lodash.defaults/4.2.0: - resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=} + /locate-path/3.0.0: + resolution: { integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== } + engines: { node: '>=6' } + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 dev: true - /lodash.difference/4.5.0: - resolution: {integrity: sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=} + /locate-path/5.0.0: + resolution: { integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== } + engines: { node: '>=8' } + dependencies: + p-locate: 4.1.0 dev: true - /lodash.flatten/4.4.0: - resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} + /locate-path/6.0.0: + resolution: { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } + engines: { node: '>=10' } + dependencies: + p-locate: 5.0.0 dev: true - /lodash.isplainobject/4.0.6: - resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + /lodash.ismatch/4.4.0: + resolution: { integrity: sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= } dev: true /lodash.memoize/4.1.2: - resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} + resolution: { integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= } dev: true - /lodash.truncate/4.4.2: - resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} + /lodash.merge/4.6.2: + resolution: { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } dev: true - /lodash.union/4.6.0: - resolution: {integrity: sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=} + /lodash.truncate/4.4.2: + resolution: { integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= } dev: true /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /lru-cache/5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 + resolution: { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== } dev: true /lru-cache/6.0.0: @@ -3772,11 +3799,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - - /lru-queue/0.1.0: - resolution: {integrity: sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=} - dependencies: - es5-ext: 0.10.53 dev: true /make-dir/3.1.0: @@ -3787,43 +3809,62 @@ packages: dev: true /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + resolution: { integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== } dev: true /makeerror/1.0.11: - resolution: {integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=} + resolution: { integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= } dependencies: tmpl: 1.0.5 dev: true + /map-obj/1.0.1: + resolution: { integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= } + engines: { node: '>=0.10.0' } + dev: true + + /map-obj/4.3.0: + resolution: { integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== } + engines: { node: '>=8' } + dev: true + /md5/2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + resolution: { integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== } dependencies: charenc: 0.0.2 crypt: 0.0.2 is-buffer: 1.1.6 dev: true - /memoizee/0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - dependencies: - d: 1.0.1 - es5-ext: 0.10.53 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 + /meow/8.1.2: + resolution: { integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== } + engines: { node: '>=10' } + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.0 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 dev: true /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: { integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== } + dev: true + + /merge2/1.4.1: + resolution: { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } + engines: { node: '>= 8' } dev: true /micromatch/4.0.4: - resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} - engines: {node: '>=8.6'} + resolution: { integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== } + engines: { node: '>=8.6' } dependencies: braces: 3.0.2 picomatch: 2.3.0 @@ -3835,97 +3876,160 @@ packages: dev: true /mime-types/2.1.32: - resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} - engines: {node: '>= 0.6'} + resolution: { integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== } + engines: { node: '>= 0.6' } dependencies: mime-db: 1.49.0 dev: true - /mime/2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true + /mimic-fn/2.1.0: + resolution: { integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== } + engines: { node: '>=6' } dev: true - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + /min-indent/1.0.1: + resolution: { integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== } + engines: { node: '>=4' } dev: true /minimatch/3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + resolution: { integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== } dependencies: brace-expansion: 1.1.11 + dev: true - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + /minimatch/3.1.2: + resolution: { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== } + dependencies: + brace-expansion: 1.1.11 dev: true - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + /minimist-options/4.1.0: + resolution: { integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== } + engines: { node: '>= 6' } + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist/1.2.5: + resolution: { integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== } dev: true - /mute-stream/0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + /modify-values/1.0.1: + resolution: { integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== } + engines: { node: '>=0.10.0' } dev: true - /natural-compare/1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + /ms/2.0.0: + resolution: { integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= } dev: true - /netmask/2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} + /ms/2.1.2: + resolution: { integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== } dev: true - /next-tick/1.0.0: - resolution: {integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw=} + /natural-compare/1.4.0: + resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } dev: true - /next-tick/1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + /neo-async/2.6.2: + resolution: { integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== } dev: true /node-int64/0.4.0: - resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} + resolution: { integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= } dev: true /node-releases/1.1.75: - resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} + resolution: { integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== } + dev: true + + /normalize-package-data/2.5.0: + resolution: { integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== } + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.20.0 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data/3.0.3: + resolution: { integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== } + engines: { node: '>=10' } + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.8.1 + semver: 7.3.5 + validate-npm-package-license: 3.0.4 dev: true /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== } + engines: { node: '>=0.10.0' } dev: true /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + resolution: { integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== } + engines: { node: '>=8' } dependencies: path-key: 3.1.1 dev: true + /null-check/1.0.0: + resolution: { integrity: sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= } + engines: { node: '>=0.10.0' } + dev: true + /nwsapi/2.2.0: - resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} + resolution: { integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== } + dev: true + + /object-inspect/1.12.0: + resolution: { integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== } + dev: true + + /object-keys/1.1.1: + resolution: { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } + engines: { node: '>= 0.4' } + dev: true + + /object.assign/4.1.2: + resolution: { integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + dev: true + + /object.values/1.1.5: + resolution: { integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 dev: true /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } dependencies: wrappy: 1.0.2 dev: true /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: { integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== } + engines: { node: '>=6' } dependencies: mimic-fn: 2.1.0 dev: true /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} + engines: { node: '>= 0.8.0' } dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -3935,54 +4039,95 @@ packages: word-wrap: 1.2.3 dev: true + /optionator/0.9.1: + resolution: { integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== } + engines: { node: '>= 0.8.0' } + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/1.3.0: + resolution: { integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== } + engines: { node: '>=4' } + dependencies: + p-try: 1.0.0 + dev: true + /p-limit/2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: { integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== } + engines: { node: '>=6' } + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== } + engines: { node: '>=10' } + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/2.0.0: + resolution: { integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= } + engines: { node: '>=4' } + dependencies: + p-limit: 1.3.0 + dev: true + + /p-locate/3.0.0: + resolution: { integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== } + engines: { node: '>=6' } dependencies: - p-try: 2.2.0 + p-limit: 2.3.0 dev: true /p-locate/4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: { integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== } + engines: { node: '>=8' } dependencies: p-limit: 2.3.0 dev: true + /p-locate/5.0.0: + resolution: { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== } + engines: { node: '>=10' } + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try/1.0.0: + resolution: { integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= } + engines: { node: '>=4' } + dev: true + /p-try/2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== } + engines: { node: '>=6' } dev: true - /pac-proxy-agent/5.0.0: - resolution: {integrity: sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==} - engines: {node: '>= 8'} + /parent-module/1.0.1: + resolution: { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== } + engines: { node: '>=6' } dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.2 - get-uri: 3.0.2 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - pac-resolver: 5.0.0 - raw-body: 2.4.1 - socks-proxy-agent: 5.0.1 - transitivePeerDependencies: - - supports-color + callsites: 3.1.0 dev: true - /pac-resolver/5.0.0: - resolution: {integrity: sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==} - engines: {node: '>= 8'} + /parse-json/4.0.0: + resolution: { integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= } + engines: { node: '>=4' } dependencies: - degenerator: 3.0.1 - ip: 1.1.5 - netmask: 2.0.2 + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 dev: true /parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== } + engines: { node: '>=8' } dependencies: '@babel/code-frame': 7.14.5 error-ex: 1.3.2 @@ -3991,58 +4136,90 @@ packages: dev: true /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + resolution: { integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== } + dev: true + + /path-exists/3.0.0: + resolution: { integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= } + engines: { node: '>=4' } dev: true /path-exists/4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } + engines: { node: '>=8' } dev: true /path-is-absolute/1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } + engines: { node: '>=0.10.0' } dev: true /path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } + engines: { node: '>=8' } dev: true /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } + dev: true + + /path-type/3.0.0: + resolution: { integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== } + engines: { node: '>=4' } + dependencies: + pify: 3.0.0 + dev: true + + /path-type/4.0.0: + resolution: { integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== } + engines: { node: '>=8' } dev: true /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} + resolution: { integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== } + engines: { node: '>=8.6' } + dev: true + + /pify/2.3.0: + resolution: { integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= } + engines: { node: '>=0.10.0' } + dev: true + + /pify/3.0.0: + resolution: { integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= } + engines: { node: '>=4' } dev: true /pirates/4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} + resolution: { integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== } + engines: { node: '>= 6' } dev: true /pkg-dir/4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + resolution: { integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== } + engines: { node: '>=8' } dependencies: find-up: 4.1.0 dev: true /pluralize/8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} + resolution: { integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== } + engines: { node: '>=4' } dev: false /prelude-ls/1.1.2: - resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} - engines: {node: '>= 0.8.0'} + resolution: { integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= } + engines: { node: '>= 0.8.0' } + dev: true + + /prelude-ls/1.2.1: + resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } + engines: { node: '>= 0.8.0' } dev: true /pretty-format/27.4.2: - resolution: {integrity: sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.4.2 ansi-regex: 5.0.1 @@ -4051,28 +4228,16 @@ packages: dev: true /pretty-format/27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 dev: true - /printj/1.1.2: - resolution: {integrity: sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==} - engines: {node: '>=0.8'} - hasBin: true - dev: true - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - - /promptly/3.2.0: - resolution: {integrity: sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==} - dependencies: - read: 1.0.7 + resolution: { integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== } dev: true /prompts/2.4.1: @@ -4083,76 +4248,71 @@ packages: sisteransi: 1.0.5 dev: true - /proxy-agent/5.0.0: - resolution: {integrity: sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==} - engines: {node: '>= 8'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.2 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - lru-cache: 5.1.1 - pac-proxy-agent: 5.0.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 5.0.1 - transitivePeerDependencies: - - supports-color + /psl/1.8.0: + resolution: { integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== } dev: true - /proxy-from-env/1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + /punycode/2.1.1: + resolution: { integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== } + engines: { node: '>=6' } dev: true - /psl/1.8.0: - resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} + /q/1.5.1: + resolution: { integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= } + engines: { node: '>=0.6.0', teleport: '>=0.2.0' } dev: true - /punycode/1.3.2: - resolution: {integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=} + /queue-microtask/1.2.3: + resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } dev: true - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} + /quick-lru/4.0.1: + resolution: { integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== } + engines: { node: '>=8' } + dev: true - /querystring/0.2.0: - resolution: {integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + /react-is/17.0.2: + resolution: { integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== } dev: true - /raw-body/2.4.1: - resolution: {integrity: sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==} - engines: {node: '>= 0.8'} + /read-pkg-up/3.0.0: + resolution: { integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= } + engines: { node: '>=4' } dependencies: - bytes: 3.1.0 - http-errors: 1.7.3 - iconv-lite: 0.4.24 - unpipe: 1.0.0 + find-up: 2.1.0 + read-pkg: 3.0.0 dev: true - /react-is/17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + /read-pkg-up/7.0.1: + resolution: { integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== } + engines: { node: '>=8' } + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 dev: true - /read/1.0.7: - resolution: {integrity: sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=} - engines: {node: '>=0.8'} + /read-pkg/3.0.0: + resolution: { integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= } + engines: { node: '>=4' } dependencies: - mute-stream: 0.0.8 + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 dev: true - /readable-stream/1.1.14: - resolution: {integrity: sha1-fPTFTvZI44EwhMY23SB54WbAgdk=} + /read-pkg/5.2.0: + resolution: { integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== } + engines: { node: '>=8' } dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 dev: true /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + resolution: { integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== } dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -4164,125 +4324,154 @@ packages: dev: true /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + resolution: { integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== } + engines: { node: '>= 6' } dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: true - /readdir-glob/1.1.1: - resolution: {integrity: sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==} + /redent/3.0.0: + resolution: { integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== } + engines: { node: '>=8' } dependencies: - minimatch: 3.0.4 + indent-string: 4.0.0 + strip-indent: 3.0.0 dev: true - /readdirp/3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.0 + /regexpp/3.2.0: + resolution: { integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== } + engines: { node: '>=8' } dev: true /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= } + engines: { node: '>=0.10.0' } dev: true /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } + engines: { node: '>=0.10.0' } dev: true /resolve-cwd/3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolution: { integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== } + engines: { node: '>=8' } dependencies: resolve-from: 5.0.0 dev: true + /resolve-from/4.0.0: + resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== } + engines: { node: '>=4' } + dev: true + /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: { integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== } + engines: { node: '>=8' } + dev: true + + /resolve-global/1.0.0: + resolution: { integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== } + engines: { node: '>=8' } + dependencies: + global-dirs: 0.1.1 dev: true /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== } + engines: { node: '>=10' } dev: true /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} + resolution: { integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== } dependencies: - is-core-module: 2.6.0 + is-core-module: 2.8.1 path-parse: 1.0.7 dev: true + /reusify/1.0.4: + resolution: { integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + dev: true + /rimraf/3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + resolution: { integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== } hasBin: true dependencies: glob: 7.2.0 dev: true + /run-parallel/1.2.0: + resolution: { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== } + dependencies: + queue-microtask: 1.2.3 + dev: true + /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + resolution: { integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== } dev: true /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolution: { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } dev: true /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /sax/1.2.1: - resolution: {integrity: sha1-e45lYZCyKOgaZq6nSEgNgozS03o=} + resolution: { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } dev: true /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} + resolution: { integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== } + engines: { node: '>=10' } dependencies: xmlchars: 2.2.0 dev: true + /semver/5.7.1: + resolution: { integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== } + hasBin: true + dev: true + /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + resolution: { integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== } hasBin: true dev: true /semver/7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== } + engines: { node: '>=10' } hasBin: true dependencies: lru-cache: 6.0.0 - - /setprototypeof/1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} dev: true /shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } + engines: { node: '>=8' } dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } + engines: { node: '>=8' } + dev: true + + /side-channel/1.0.4: + resolution: { integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.12.0 dev: true /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} + resolution: { integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== } dev: true /sisteransi/1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + resolution: { integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== } dev: true /slash/3.0.0: @@ -4299,30 +4488,6 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /smart-buffer/4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true - - /socks-proxy-agent/5.0.1: - resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.2 - socks: 2.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /socks/2.6.1: - resolution: {integrity: sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - dependencies: - ip: 1.1.5 - smart-buffer: 4.2.0 - dev: true - /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -4335,94 +4500,171 @@ packages: dev: true /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } + engines: { node: '>=0.10.0' } /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} + resolution: { integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== } + engines: { node: '>= 8' } + dev: true + + /spdx-correct/3.1.1: + resolution: { integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== } + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-exceptions/2.3.0: + resolution: { integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== } + dev: true + + /spdx-expression-parse/3.0.1: + resolution: { integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== } + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-license-ids/3.0.11: + resolution: { integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== } + dev: true + + /split/1.0.1: + resolution: { integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== } + dependencies: + through: 2.3.8 + dev: true + + /split2/3.2.2: + resolution: { integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== } + dependencies: + readable-stream: 3.6.0 dev: true /sprintf-js/1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= } dev: true /stack-utils/2.0.3: - resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} - engines: {node: '>=10'} + resolution: { integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== } + engines: { node: '>=10' } dependencies: escape-string-regexp: 2.0.0 dev: true - /statuses/1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} + /standard-version/9.3.2: + resolution: { integrity: sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ== } + engines: { node: '>=10' } + hasBin: true + dependencies: + chalk: 2.4.2 + conventional-changelog: 3.1.24 + conventional-changelog-config-spec: 2.1.0 + conventional-changelog-conventionalcommits: 4.6.1 + conventional-recommended-bump: 6.1.0 + detect-indent: 6.1.0 + detect-newline: 3.1.0 + dotgitignore: 2.1.0 + figures: 3.2.0 + find-up: 5.0.0 + fs-access: 1.0.1 + git-semver-tags: 4.1.1 + semver: 7.3.5 + stringify-package: 1.0.1 + yargs: 16.2.0 dev: true /string-length/4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + resolution: { integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== } + engines: { node: '>=10' } dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 dev: true /string-width/4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } + engines: { node: '>=8' } dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 dev: true - /string_decoder/0.10.31: - resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} + /string.prototype.trimend/1.0.4: + resolution: { integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== } + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string.prototype.trimstart/1.0.4: + resolution: { integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== } + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 dev: true /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + resolution: { integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== } dependencies: safe-buffer: 5.1.2 dev: true /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + resolution: { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } dependencies: safe-buffer: 5.2.1 dev: true + /stringify-package/1.0.1: + resolution: { integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== } + dev: true + /strip-ansi/6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } + engines: { node: '>=8' } dependencies: ansi-regex: 5.0.1 dev: true + /strip-bom/3.0.0: + resolution: { integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= } + engines: { node: '>=4' } + dev: true + /strip-bom/4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} + resolution: { integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== } + engines: { node: '>=8' } dev: true /strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + resolution: { integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== } + engines: { node: '>=6' } + dev: true + + /strip-indent/3.0.0: + resolution: { integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== } + engines: { node: '>=8' } + dependencies: + min-indent: 1.0.1 dev: true /strip-json-comments/3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + resolution: { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== } + engines: { node: '>=8' } dev: true /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + resolution: { integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== } + engines: { node: '>=4' } dependencies: has-flag: 3.0.0 dev: true /supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } engines: {node: '>=8'} dependencies: has-flag: 4.0.0 @@ -4437,19 +4679,19 @@ packages: /supports-hyperlinks/2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: {node: '>=8'} + engines: { node: '>=8' } dependencies: has-flag: 4.0.0 supports-color: 7.2.0 dev: true /symbol-tree/3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + resolution: { integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== } dev: true /table/6.8.0: - resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==} - engines: {node: '>=10.0.0'} + resolution: { integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== } + engines: { node: '>=10.0.0' } dependencies: ajv: 8.6.3 lodash.truncate: 4.4.2 @@ -4458,19 +4700,8 @@ packages: strip-ansi: 6.0.1 dev: true - /tar-stream/2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + resolution: { integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== } engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 @@ -4478,32 +4709,51 @@ packages: dev: true /test-exclude/6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + resolution: { integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== } + engines: { node: '>=8' } dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.0 - minimatch: 3.0.4 + minimatch: 3.1.2 + dev: true + + /text-extensions/1.9.0: + resolution: { integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== } + engines: { node: '>=0.10' } + dev: true + + /text-table/0.2.0: + resolution: { integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= } dev: true /throat/6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + resolution: { integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== } + dev: true + + /through/2.3.8: + resolution: { integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= } + dev: true + + /through2/2.0.5: + resolution: { integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== } + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 dev: true - /timers-ext/0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + /through2/4.0.2: + resolution: { integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== } dependencies: - es5-ext: 0.10.53 - next-tick: 1.1.0 + readable-stream: 3.6.0 dev: true /tmpl/1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + resolution: { integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== } dev: true /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} + resolution: { integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= } + engines: { node: '>=4' } dev: true /to-regex-range/5.0.1: @@ -4513,11 +4763,6 @@ packages: is-number: 7.0.0 dev: true - /toidentifier/1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} - engines: {node: '>=0.6'} - dev: true - /tough-cookie/4.0.0: resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} engines: {node: '>=6'} @@ -4528,15 +4773,20 @@ packages: dev: true /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} + resolution: { integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== } + engines: { node: '>=8' } dependencies: punycode: 2.1.1 dev: true + /trim-newlines/3.0.1: + resolution: { integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== } + engines: { node: '>=8' } + dev: true + /ts-jest/27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb: - resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: { integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -4568,8 +4818,8 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.5.0_ad16171857a0edcfc445c7bfcf336eb6: - resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} + /ts-node/10.5.0_f3bd4037939c2ed2942ba074291f8ef2: + resolution: { integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw== } hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -4587,7 +4837,7 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.2 - '@types/node': 16.11.25 + '@types/node': 17.0.18 acorn: 8.5.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -4599,116 +4849,158 @@ packages: yn: 3.1.1 dev: true - /tslib/2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + /tsconfig-paths/3.12.0: + resolution: { integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== } + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: { integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== } + dev: true + + /tsutils/3.21.0_typescript@4.5.5: + resolution: { integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== } + engines: { node: '>= 6' } + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.5.5 dev: true /type-check/0.3.2: - resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=} - engines: {node: '>= 0.8.0'} + resolution: { integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= } + engines: { node: '>= 0.8.0' } dependencies: prelude-ls: 1.1.2 dev: true + /type-check/0.4.0: + resolution: { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } + engines: { node: '>= 0.8.0' } + dependencies: + prelude-ls: 1.2.1 + dev: true + /type-detect/4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + resolution: { integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== } + engines: { node: '>=4' } + dev: true + + /type-fest/0.18.1: + resolution: { integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== } + engines: { node: '>=10' } + dev: true + + /type-fest/0.20.2: + resolution: { integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== } + engines: { node: '>=10' } dev: true /type-fest/0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + resolution: { integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== } + engines: { node: '>=10' } dev: true - /type/1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + /type-fest/0.6.0: + resolution: { integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== } + engines: { node: '>=8' } dev: true - /type/2.5.0: - resolution: {integrity: sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==} + /type-fest/0.8.1: + resolution: { integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== } + engines: { node: '>=8' } dev: true /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + resolution: { integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== } dependencies: is-typedarray: 1.0.0 dev: true + /typedarray/0.0.6: + resolution: { integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= } + dev: true + /typescript/4.5.5: - resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} - engines: {node: '>=4.2.0'} + resolution: { integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== } + engines: { node: '>=4.2.0' } hasBin: true dev: true + /uglify-js/3.15.1: + resolution: { integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ== } + engines: { node: '>=0.8.0' } + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive/1.0.1: + resolution: { integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== } + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + dev: true + /universalify/0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} + resolution: { integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== } + engines: { node: '>= 4.0.0' } dev: true /universalify/2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - - /unpipe/1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} + resolution: { integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== } + engines: { node: '>= 10.0.0' } dev: true /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } dependencies: punycode: 2.1.1 dev: true - /url/0.10.3: - resolution: {integrity: sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=} - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: true - - /uuid/3.3.2: - resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true + resolution: { integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= } dev: true - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + /v8-compile-cache-lib/3.0.0: + resolution: { integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== } dev: true - /v8-compile-cache-lib/3.0.0: - resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} + /v8-compile-cache/2.3.0: + resolution: { integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== } dev: true /v8-to-istanbul/8.1.0: - resolution: {integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==} - engines: {node: '>=10.12.0'} + resolution: { integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== } + engines: { node: '>=10.12.0' } dependencies: '@types/istanbul-lib-coverage': 2.0.3 convert-source-map: 1.8.0 source-map: 0.7.3 dev: true - /vm2/3.9.5: - resolution: {integrity: sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng==} - engines: {node: '>=6.0'} - hasBin: true + /validate-npm-package-license/3.0.4: + resolution: { integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== } + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 dev: true /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + resolution: { integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== } dependencies: browser-process-hrtime: 1.0.0 dev: true /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + resolution: { integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== } engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 @@ -4741,17 +5033,27 @@ packages: dev: true /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} + resolution: { integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== } + engines: { node: '>=10' } dependencies: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 dev: true + /which-boxed-primitive/1.0.2: + resolution: { integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== } + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.6 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + /which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } + engines: { node: '>= 8' } hasBin: true dependencies: isexe: 2.0.0 @@ -4802,53 +5104,44 @@ packages: dev: true /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xml2js/0.4.19: - resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} - dependencies: - sax: 1.2.1 - xmlbuilder: 9.0.7 - dev: true - - /xmlbuilder/9.0.7: - resolution: {integrity: sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=} - engines: {node: '>=4.0'} + resolution: { integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== } dev: true /xmlchars/2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + resolution: { integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== } dev: true - /xregexp/2.0.0: - resolution: {integrity: sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=} + /xtend/4.0.2: + resolution: { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } + engines: { node: '>=0.4' } dev: true /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist/3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } + engines: { node: '>=10' } dev: true /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + resolution: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } + dev: true /yaml/1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + resolution: { integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== } + engines: { node: '>= 6' } /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + resolution: { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== } + engines: { node: '>=10' } + dev: true + + /yargs-parser/21.0.0: + resolution: { integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== } + engines: { node: '>=12' } dev: true /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + resolution: { integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== } + engines: { node: '>=10' } dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -4859,16 +5152,25 @@ packages: yargs-parser: 20.2.9 dev: true + /yargs/17.3.1: + resolution: { integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== } + engines: { node: '>=12' } + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.0.0 + dev: true + /yn/3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + resolution: { integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== } + engines: { node: '>=6' } dev: true - /zip-stream/4.1.0: - resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} - engines: {node: '>= 10'} - dependencies: - archiver-utils: 2.1.0 - compress-commons: 4.1.1 - readable-stream: 3.6.0 + /yocto-queue/0.1.0: + resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } + engines: { node: '>=10' } dev: true diff --git a/renovate.json b/renovate.json index f45d8f110..70dd15918 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,14 @@ { "extends": [ "config:base" - ] + ], + "baseBranches": ["develop"], + "dependencyDashboardAutoclose": true, + "packageRules": [ + { + "matchUpdateTypes": ["minor", "patch", "pin", "digest"], + "automerge": true + } + ], + "reviewers": ["AustinZhu"] } diff --git a/test/wasedatime-backend.test.ts b/test/wasedatime-backend.test.ts index 14175446f..38574aa6c 100644 --- a/test/wasedatime-backend.test.ts +++ b/test/wasedatime-backend.test.ts @@ -1,9 +1,9 @@ test('Empty Stack', () => { - // const app = new cdk.App(); - // // WHEN - // const stack = new WasedatimeBackend.WasedatimeWebApp(app, 'MyTestStack'); - // // THEN - // expectCDK(stack).to(matchTemplate({ - // "Resources": {} - // }, MatchStyle.EXACT)) + // const app = new cdk.App(); + // // WHEN + // const stack = new WasedatimeBackend.WasedatimeWebApp(app, 'MyTestStack'); + // // THEN + // expectCDK(stack).to(matchTemplate({ + // "Resources": {} + // }, MatchStyle.EXACT)) }); diff --git a/tsconfig.json b/tsconfig.json index a435a7462..8d6fe44e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,11 @@ { "compilerOptions": { + "charset": "utf8", + "noEmitOnError": true, + "resolveJsonModule": true, + "stripInternal": true, "target": "ES2018", + "incremental": true, "module": "commonjs", "lib": [ "es2018", From de1d3ac74c01cd0d6450d346099d78a56a410253 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Feb 2022 22:40:29 +0900 Subject: [PATCH 5/7] chore(deps): update dependency @types/jest to v27.4.1 (#136) Co-authored-by: Renovate Bot --- package.json | 2 +- pnpm-lock.yaml | 1887 +++++++++++++++++++++++------------------------- 2 files changed, 924 insertions(+), 965 deletions(-) diff --git a/package.json b/package.json index b419531af..2b26d7b26 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@aws-cdk/assert": "2.13.0", "@commitlint/cli": "16.2.1", "@commitlint/config-conventional": "16.2.1", - "@types/jest": "27.4.0", + "@types/jest": "27.4.1", "@types/node": "17.0.18", "@types/pluralize": "^0.0.29", "@typescript-eslint/eslint-plugin": "5.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e21593784..f52b03f17 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ specifiers: '@aws-cdk/aws-lambda-python-alpha': 2.13.0-alpha.0 '@commitlint/cli': 16.2.1 '@commitlint/config-conventional': 16.2.1 - '@types/jest': 27.4.0 + '@types/jest': 27.4.1 '@types/node': 17.0.18 '@types/pluralize': ^0.0.29 '@typescript-eslint/eslint-plugin': 5.10.2 @@ -46,7 +46,7 @@ devDependencies: '@aws-cdk/assert': 2.13.0_e899eddb210d099498d0df86b34847a7 '@commitlint/cli': 16.2.1 '@commitlint/config-conventional': 16.2.1 - '@types/jest': 27.4.0 + '@types/jest': 27.4.1 '@types/node': 17.0.18 '@types/pluralize': 0.0.29 '@typescript-eslint/eslint-plugin': 5.10.2_2595c2126aec4d4b6e944b931dabb4c2 @@ -60,15 +60,15 @@ devDependencies: husky: 7.0.4 jest: 27.5.1_ts-node@10.5.0 standard-version: 9.3.2 - ts-jest: 27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb + ts-jest: 27.1.3_8fa130d172bf7d71653f05507c50c5a3 ts-node: 10.5.0_f3bd4037939c2ed2942ba074291f8ef2 typescript: 4.5.5 packages: /@aws-cdk/assert/2.13.0_e899eddb210d099498d0df86b34847a7: - resolution: { integrity: sha512-Q4tRx/g/XWbqLd/L1YgJZTXWmNbNI161RYl0CmwkTRWm1rKQfgkwQ3VqmxjCxcT9gQxJBzKlSe6j5tAG1UpaNg== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-Q4tRx/g/XWbqLd/L1YgJZTXWmNbNI161RYl0CmwkTRWm1rKQfgkwQ3VqmxjCxcT9gQxJBzKlSe6j5tAG1UpaNg==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 @@ -81,8 +81,8 @@ packages: dev: true /@aws-cdk/aws-amplify-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: - resolution: { integrity: sha512-wDRc0dblM7onOUGk9CxMchBOGnieapmFNwWEIH5yZJ6KCufUR1RpjfVL0QVF/1XKGI/G3MtHNSt7ogzQljUHig== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-wDRc0dblM7onOUGk9CxMchBOGnieapmFNwWEIH5yZJ6KCufUR1RpjfVL0QVF/1XKGI/G3MtHNSt7ogzQljUHig==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 @@ -95,8 +95,8 @@ packages: - yaml /@aws-cdk/aws-apigatewayv2-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: - resolution: { integrity: sha512-IEMJzaoov/qxvWLCN+hLv+mowmGLlNxodSeApYJJdbvk9E6OkdWN9bDfmJWnqdBuuQAqjJCUl/377LLB9lHnvw== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-IEMJzaoov/qxvWLCN+hLv+mowmGLlNxodSeApYJJdbvk9E6OkdWN9bDfmJWnqdBuuQAqjJCUl/377LLB9lHnvw==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 @@ -106,8 +106,8 @@ packages: dev: false /@aws-cdk/aws-apigatewayv2-authorizers-alpha/2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e: - resolution: { integrity: sha512-7Ii1Ed0++eEIWKtzbm4DSh/yGKXMSjhzeywC6tCGsMKj9mns9hKqmHPr2RvLML4HywdtMUWwH7LP7a6nWWR8MQ== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-7Ii1Ed0++eEIWKtzbm4DSh/yGKXMSjhzeywC6tCGsMKj9mns9hKqmHPr2RvLML4HywdtMUWwH7LP7a6nWWR8MQ==} + engines: {node: '>= 14.15.0'} peerDependencies: '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0 aws-cdk-lib: ^2.13.0 @@ -119,8 +119,8 @@ packages: dev: false /@aws-cdk/aws-apigatewayv2-integrations-alpha/2.13.0-alpha.0_38e1d0ca288c29c3fe6c8441fa96321e: - resolution: { integrity: sha512-Tq38ftHdcZIFsuiSfUzhZKrq7mvGyDU5D1pSEZNwgfWEuYnAHGBRQELuyEHUWvXIQNoC11axV/7i2Wh/2y+USQ== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-Tq38ftHdcZIFsuiSfUzhZKrq7mvGyDU5D1pSEZNwgfWEuYnAHGBRQELuyEHUWvXIQNoC11axV/7i2Wh/2y+USQ==} + engines: {node: '>= 14.15.0'} peerDependencies: '@aws-cdk/aws-apigatewayv2-alpha': 2.13.0-alpha.0 aws-cdk-lib: ^2.13.0 @@ -132,8 +132,8 @@ packages: dev: false /@aws-cdk/aws-appsync-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: - resolution: { integrity: sha512-/wAT5azT6H867uczIqFIeJxS4GrtghkqN5J9QlNOHASDyBRkQOvH6EBjk6WHii4fqql1stbEA92ae07+jRKLJQ== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-/wAT5azT6H867uczIqFIeJxS4GrtghkqN5J9QlNOHASDyBRkQOvH6EBjk6WHii4fqql1stbEA92ae07+jRKLJQ==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 @@ -143,8 +143,8 @@ packages: dev: false /@aws-cdk/aws-lambda-python-alpha/2.13.0-alpha.0_eba106009bf600c17a3e87151e76f37a: - resolution: { integrity: sha512-V+aGUkmbpvSRb6ik8CEyRaE6VnVRfHxDDcBm1lkilgIMBWZtGxLBY6bjYVNBliHfMroeXbTYjObttj36hDz6/w== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-V+aGUkmbpvSRb6ik8CEyRaE6VnVRfHxDDcBm1lkilgIMBWZtGxLBY6bjYVNBliHfMroeXbTYjObttj36hDz6/w==} + engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.13.0 constructs: ^10.0.0 @@ -154,15 +154,15 @@ packages: dev: false /@aws-cdk/cfnspec/2.13.0: - resolution: { integrity: sha512-+ZV6egnKjLtuLxK0kOd+WRQ8lDiQF+Ll1UYTuf47WyF0xoAkuJxV2sFm36tGGLtEgV3bY452m1Aiik5i25pWJw== } + resolution: {integrity: sha512-+ZV6egnKjLtuLxK0kOd+WRQ8lDiQF+Ll1UYTuf47WyF0xoAkuJxV2sFm36tGGLtEgV3bY452m1Aiik5i25pWJw==} dependencies: fs-extra: 9.1.0 md5: 2.3.0 dev: true /@aws-cdk/cloudformation-diff/2.13.0: - resolution: { integrity: sha512-TMxM5h6eME30j0XTlnJPdXO8zobQJdSiFTHJfS/4MwV2ee/ILsJoGz53Pd/5l030hIct9H54R/UpXSW7DUBXUA== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-TMxM5h6eME30j0XTlnJPdXO8zobQJdSiFTHJfS/4MwV2ee/ILsJoGz53Pd/5l030hIct9H54R/UpXSW7DUBXUA==} + engines: {node: '>= 14.15.0'} dependencies: '@aws-cdk/cfnspec': 2.13.0 '@types/node': 10.17.60 @@ -511,16 +511,16 @@ packages: dev: true /@balena/dockerignore/1.0.2: - resolution: { integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== } + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true /@bcoe/v8-coverage/0.2.3: - resolution: { integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== } + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true /@commitlint/cli/16.2.1: - resolution: { integrity: sha512-zfKf+B9osuiDbxGMJ7bWFv7XFCW8wlQYPtCffNp7Ukdb7mdrep5R9e03vPUZysnwp8NX6hg05kPEvnD/wRIGWw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-zfKf+B9osuiDbxGMJ7bWFv7XFCW8wlQYPtCffNp7Ukdb7mdrep5R9e03vPUZysnwp8NX6hg05kPEvnD/wRIGWw==} + engines: {node: '>=v12'} hasBin: true dependencies: '@commitlint/format': 16.2.1 @@ -538,52 +538,52 @@ packages: dev: true /@commitlint/config-conventional/16.2.1: - resolution: { integrity: sha512-cP9gArx7gnaj4IqmtCIcHdRjTYdRUi6lmGE+lOzGGjGe45qGOS8nyQQNvkNy2Ey2VqoSWuXXkD8zCUh6EHf1Ww== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-cP9gArx7gnaj4IqmtCIcHdRjTYdRUi6lmGE+lOzGGjGe45qGOS8nyQQNvkNy2Ey2VqoSWuXXkD8zCUh6EHf1Ww==} + engines: {node: '>=v12'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true /@commitlint/config-validator/16.2.1: - resolution: { integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} + engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 ajv: 6.12.6 dev: true /@commitlint/ensure/16.2.1: - resolution: { integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} + engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 lodash: 4.17.21 dev: true /@commitlint/execute-rule/16.2.1: - resolution: { integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} + engines: {node: '>=v12'} dev: true /@commitlint/format/16.2.1: - resolution: { integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} + engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 chalk: 4.1.2 dev: true /@commitlint/is-ignored/16.2.1: - resolution: { integrity: sha512-exl8HRzTIfb1YvDJp2b2HU5z1BT+9tmgxR2XF0YEzkMiCIuEKh+XLeocPr1VcvAKXv3Cmv5X/OfNRp+i+/HIhQ== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-exl8HRzTIfb1YvDJp2b2HU5z1BT+9tmgxR2XF0YEzkMiCIuEKh+XLeocPr1VcvAKXv3Cmv5X/OfNRp+i+/HIhQ==} + engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 semver: 7.3.5 dev: true /@commitlint/lint/16.2.1: - resolution: { integrity: sha512-fNINQ3X2ZqsCkNB3Z0Z8ElmhewqrS3gy2wgBTx97BkcjOWiyPAGwDJ752hwrsUnWAVBRztgw826n37xPzxsOgg== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-fNINQ3X2ZqsCkNB3Z0Z8ElmhewqrS3gy2wgBTx97BkcjOWiyPAGwDJ752hwrsUnWAVBRztgw826n37xPzxsOgg==} + engines: {node: '>=v12'} dependencies: '@commitlint/is-ignored': 16.2.1 '@commitlint/parse': 16.2.1 @@ -592,8 +592,8 @@ packages: dev: true /@commitlint/load/16.2.1: - resolution: { integrity: sha512-oSpz0jTyVI/A1AIImxJINTLDOMB8YF7lWGm+Jg5wVWM0r7ucpuhyViVvpSRTgvL0z09oIxlctyFGWUQQpI42uw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-oSpz0jTyVI/A1AIImxJINTLDOMB8YF7lWGm+Jg5wVWM0r7ucpuhyViVvpSRTgvL0z09oIxlctyFGWUQQpI42uw==} + engines: {node: '>=v12'} dependencies: '@commitlint/config-validator': 16.2.1 '@commitlint/execute-rule': 16.2.1 @@ -612,13 +612,13 @@ packages: dev: true /@commitlint/message/16.2.1: - resolution: { integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} + engines: {node: '>=v12'} dev: true /@commitlint/parse/16.2.1: - resolution: { integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} + engines: {node: '>=v12'} dependencies: '@commitlint/types': 16.2.1 conventional-changelog-angular: 5.0.13 @@ -626,8 +626,8 @@ packages: dev: true /@commitlint/read/16.2.1: - resolution: { integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} + engines: {node: '>=v12'} dependencies: '@commitlint/top-level': 16.2.1 '@commitlint/types': 16.2.1 @@ -636,8 +636,8 @@ packages: dev: true /@commitlint/resolve-extends/16.2.1: - resolution: { integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} + engines: {node: '>=v12'} dependencies: '@commitlint/config-validator': 16.2.1 '@commitlint/types': 16.2.1 @@ -648,8 +648,8 @@ packages: dev: true /@commitlint/rules/16.2.1: - resolution: { integrity: sha512-ZFezJXQaBBso+BOTre/+1dGCuCzlWVaeLiVRGypI53qVgPMzQqZhkCcrxBFeqB87qeyzr4A4EoG++IvITwwpIw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-ZFezJXQaBBso+BOTre/+1dGCuCzlWVaeLiVRGypI53qVgPMzQqZhkCcrxBFeqB87qeyzr4A4EoG++IvITwwpIw==} + engines: {node: '>=v12'} dependencies: '@commitlint/ensure': 16.2.1 '@commitlint/message': 16.2.1 @@ -659,39 +659,39 @@ packages: dev: true /@commitlint/to-lines/16.2.1: - resolution: { integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} + engines: {node: '>=v12'} dev: true /@commitlint/top-level/16.2.1: - resolution: { integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} + engines: {node: '>=v12'} dependencies: find-up: 5.0.0 dev: true /@commitlint/types/16.2.1: - resolution: { integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA== } - engines: { node: '>=v12' } + resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} + engines: {node: '>=v12'} dependencies: chalk: 4.1.2 dev: true /@cspotcode/source-map-consumer/0.8.0: - resolution: { integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== } - engines: { node: '>= 12' } + resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} + engines: {node: '>= 12'} dev: true /@cspotcode/source-map-support/0.7.0: - resolution: { integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} + engines: {node: '>=12'} dependencies: '@cspotcode/source-map-consumer': 0.8.0 dev: true /@eslint/eslintrc/1.1.0: - resolution: { integrity: sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.2 @@ -707,8 +707,8 @@ packages: dev: true /@humanwhocodes/config-array/0.9.3: - resolution: { integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== } - engines: { node: '>=10.10.0' } + resolution: {integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==} + engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.2 @@ -718,17 +718,17 @@ packages: dev: true /@humanwhocodes/object-schema/1.2.1: - resolution: { integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== } + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@hutson/parse-repository-url/3.0.2: - resolution: { integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} + engines: {node: '>=6.9.0'} dev: true /@istanbuljs/load-nyc-config/1.1.0: - resolution: { integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 find-up: 4.1.0 @@ -738,13 +738,13 @@ packages: dev: true /@istanbuljs/schema/0.1.3: - resolution: { integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} dev: true /@jest/console/27.5.1: - resolution: { integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@types/node': 17.0.18 @@ -755,8 +755,8 @@ packages: dev: true /@jest/core/27.5.1_ts-node@10.5.0: - resolution: { integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -800,8 +800,8 @@ packages: dev: true /@jest/environment/27.5.1: - resolution: { integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 @@ -810,8 +810,8 @@ packages: dev: true /@jest/fake-timers/27.5.1: - resolution: { integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.0.1 @@ -822,8 +822,8 @@ packages: dev: true /@jest/globals/27.5.1: - resolution: { integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/types': 27.5.1 @@ -831,8 +831,8 @@ packages: dev: true /@jest/reporters/27.5.1: - resolution: { integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -869,8 +869,8 @@ packages: dev: true /@jest/source-map/27.5.1: - resolution: { integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: callsites: 3.1.0 graceful-fs: 4.2.9 @@ -878,8 +878,8 @@ packages: dev: true /@jest/test-result/27.5.1: - resolution: { integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/console': 27.5.1 '@jest/types': 27.5.1 @@ -888,8 +888,8 @@ packages: dev: true /@jest/test-sequencer/27.5.1: - resolution: { integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/test-result': 27.5.1 graceful-fs: 4.2.9 @@ -900,8 +900,8 @@ packages: dev: true /@jest/transform/27.5.1: - resolution: { integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/core': 7.15.5 '@jest/types': 27.5.1 @@ -922,20 +922,9 @@ packages: - supports-color dev: true - /@jest/types/27.4.2: - resolution: { integrity: sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dependencies: - '@types/istanbul-lib-coverage': 2.0.3 - '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.18 - '@types/yargs': 16.0.4 - chalk: 4.1.2 - dev: true - /@jest/types/27.5.1: - resolution: { integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 @@ -945,34 +934,34 @@ packages: dev: true /@nodelib/fs.scandir/2.1.5: - resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true /@nodelib/fs.stat/2.0.5: - resolution: { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} dev: true /@nodelib/fs.walk/1.2.8: - resolution: { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 dev: true /@sinonjs/commons/1.8.3: - resolution: { integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== } + resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: type-detect: 4.0.8 dev: true /@sinonjs/fake-timers/8.0.1: - resolution: { integrity: sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== } + resolution: {integrity: sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==} dependencies: '@sinonjs/commons': 1.8.3 dev: true @@ -1044,71 +1033,71 @@ packages: dev: true /@types/istanbul-reports/3.0.1: - resolution: { integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== } + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/27.4.0: - resolution: { integrity: sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== } + /@types/jest/27.4.1: + resolution: {integrity: sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==} dependencies: - jest-diff: 27.4.2 - pretty-format: 27.4.2 + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 dev: true /@types/json-schema/7.0.9: - resolution: { integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== } + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true /@types/json5/0.0.29: - resolution: { integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= } + resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} dev: true /@types/minimist/1.2.2: - resolution: { integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== } + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true /@types/node/10.17.60: - resolution: { integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== } + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true /@types/node/17.0.18: - resolution: { integrity: sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== } + resolution: {integrity: sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==} dev: true /@types/normalize-package-data/2.4.1: - resolution: { integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== } + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true /@types/parse-json/4.0.0: - resolution: { integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== } + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true /@types/pluralize/0.0.29: - resolution: { integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA== } + resolution: {integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==} dev: true /@types/prettier/2.3.2: - resolution: { integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== } + resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} dev: true /@types/stack-utils/2.0.1: - resolution: { integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== } + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true /@types/yargs-parser/20.2.1: - resolution: { integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== } + resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} dev: true /@types/yargs/16.0.4: - resolution: { integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== } + resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} dependencies: '@types/yargs-parser': 20.2.1 dev: true /@typescript-eslint/eslint-plugin/5.10.2_2595c2126aec4d4b6e944b931dabb4c2: - resolution: { integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1134,8 +1123,8 @@ packages: dev: true /@typescript-eslint/parser/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: { integrity: sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 typescript: '*' @@ -1154,16 +1143,16 @@ packages: dev: true /@typescript-eslint/scope-manager/5.10.2: - resolution: { integrity: sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.10.2 '@typescript-eslint/visitor-keys': 5.10.2 dev: true /@typescript-eslint/type-utils/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: { integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' typescript: '*' @@ -1181,13 +1170,13 @@ packages: dev: true /@typescript-eslint/types/5.10.2: - resolution: { integrity: sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /@typescript-eslint/typescript-estree/5.10.2_typescript@4.5.5: - resolution: { integrity: sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1207,8 +1196,8 @@ packages: dev: true /@typescript-eslint/utils/5.10.2_eslint@8.8.0+typescript@4.5.5: - resolution: { integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -1225,15 +1214,15 @@ packages: dev: true /@typescript-eslint/visitor-keys/5.10.2: - resolution: { integrity: sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.10.2 eslint-visitor-keys: 3.3.0 dev: true /JSONStream/1.3.5: - resolution: { integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== } + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true dependencies: jsonparse: 1.3.1 @@ -1241,18 +1230,18 @@ packages: dev: true /abab/2.0.5: - resolution: { integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== } + resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} dev: true /acorn-globals/6.0.0: - resolution: { integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== } + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 dev: true /acorn-jsx/5.3.2_acorn@8.7.0: - resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -1260,40 +1249,40 @@ packages: dev: true /acorn-walk/7.2.0: - resolution: { integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} dev: true /acorn-walk/8.2.0: - resolution: { integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} dev: true /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: { node: '>=0.4.0' } + engines: {node: '>=0.4.0'} hasBin: true dev: true /acorn/8.5.0: - resolution: { integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /acorn/8.7.0: - resolution: { integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} + engines: {node: '>=0.4.0'} hasBin: true dev: true /add-stream/1.0.0: - resolution: { integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= } + resolution: {integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=} dev: true /agent-base/6.0.2: - resolution: { integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== } - engines: { node: '>= 6.0.0' } + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} dependencies: debug: 4.3.2 transitivePeerDependencies: @@ -1301,7 +1290,7 @@ packages: dev: true /ajv/6.12.6: - resolution: { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -1310,7 +1299,7 @@ packages: dev: true /ajv/8.6.3: - resolution: { integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== } + resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1358,26 +1347,26 @@ packages: dev: true /arg/4.1.3: - resolution: { integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== } + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true /argparse/1.0.10: - resolution: { integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true /argparse/2.0.1: - resolution: { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true /array-ify/1.0.0: - resolution: { integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= } + resolution: {integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=} dev: true /array-includes/3.1.4: - resolution: { integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -1387,13 +1376,13 @@ packages: dev: true /array-union/2.1.0: - resolution: { integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} dev: true /array.prototype.flat/1.2.5: - resolution: { integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -1401,27 +1390,27 @@ packages: dev: true /arrify/1.0.1: - resolution: { integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} + engines: {node: '>=0.10.0'} dev: true /astral-regex/2.0.0: - resolution: { integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} dev: true /asynckit/0.4.0: - resolution: { integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= } + resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: true /at-least-node/1.0.0: - resolution: { integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} dev: true /aws-cdk-lib/2.13.0_constructs@10.0.66: - resolution: { integrity: sha512-nKpQk+9H7T128gpzl+7XTu+19Yzj6kmCMrvSwTXLa/qr4/soEpXI68/+19ymEAHOYEL4Dd3eyk490P+y0wzi6A== } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-nKpQk+9H7T128gpzl+7XTu+19Yzj6kmCMrvSwTXLa/qr4/soEpXI68/+19ymEAHOYEL4Dd3eyk490P+y0wzi6A==} + engines: {node: '>= 14.15.0'} peerDependencies: constructs: ^10.0.0 dependencies: @@ -1448,8 +1437,8 @@ packages: - yaml /babel-jest/27.5.1_@babel+core@7.15.5: - resolution: { integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: @@ -1467,8 +1456,8 @@ packages: dev: true /babel-plugin-istanbul/6.1.1: - resolution: { integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} dependencies: '@babel/helper-plugin-utils': 7.14.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -1480,8 +1469,8 @@ packages: dev: true /babel-plugin-jest-hoist/27.5.1: - resolution: { integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/template': 7.15.4 '@babel/types': 7.15.6 @@ -1490,7 +1479,7 @@ packages: dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.15.5: - resolution: { integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== } + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -1510,8 +1499,8 @@ packages: dev: true /babel-preset-jest/27.5.1_@babel+core@7.15.5: - resolution: { integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -1521,7 +1510,7 @@ packages: dev: true /balanced-match/1.0.2: - resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true /brace-expansion/1.1.11: @@ -1562,29 +1551,29 @@ packages: dev: true /bser/2.1.1: - resolution: { integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: true /buffer-from/1.1.2: - resolution: { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} /call-bind/1.0.2: - resolution: { integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== } + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.1 dev: true /callsites/3.1.0: - resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} dev: true /camelcase-keys/6.2.2: - resolution: { integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} dependencies: camelcase: 5.3.1 map-obj: 4.3.0 @@ -1592,27 +1581,27 @@ packages: dev: true /camelcase/5.3.1: - resolution: { integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} dev: true /camelcase/6.3.0: - resolution: { integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} dev: true /caniuse-lite/1.0.30001257: - resolution: { integrity: sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== } + resolution: {integrity: sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==} dev: true /case/1.6.3: - resolution: { integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} dev: true /chalk/2.4.2: - resolution: { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -1683,30 +1672,30 @@ packages: dev: true /colorette/1.4.0: - resolution: { integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== } + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} dev: true /combined-stream/1.0.8: - resolution: { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true /compare-func/2.0.0: - resolution: { integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== } + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 dev: true /concat-map/0.0.1: - resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true /concat-stream/2.0.0: - resolution: { integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== } - engines: { '0': node >= 6.0 } + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 @@ -1715,39 +1704,39 @@ packages: dev: true /constructs/10.0.66: - resolution: { integrity: sha512-luFprSllFDm8iEt/irxsWnm8PHNKNNnZ3pV+5PRXDUOnLaWCv6Vwm+7E0IX6pfgiSphOSsWqhA4ReJA+xe0YHg== } - engines: { node: '>= 12.7.0' } + resolution: {integrity: sha512-luFprSllFDm8iEt/irxsWnm8PHNKNNnZ3pV+5PRXDUOnLaWCv6Vwm+7E0IX6pfgiSphOSsWqhA4ReJA+xe0YHg==} + engines: {node: '>= 12.7.0'} dev: true /conventional-changelog-angular/5.0.13: - resolution: { integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} + engines: {node: '>=10'} dependencies: compare-func: 2.0.0 q: 1.5.1 dev: true /conventional-changelog-atom/2.0.8: - resolution: { integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-codemirror/2.0.8: - resolution: { integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-config-spec/2.1.0: - resolution: { integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== } + resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==} dev: true /conventional-changelog-conventionalcommits/4.6.1: - resolution: { integrity: sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==} + engines: {node: '>=10'} dependencies: compare-func: 2.0.0 lodash: 4.17.21 @@ -1755,8 +1744,8 @@ packages: dev: true /conventional-changelog-conventionalcommits/4.6.3: - resolution: { integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} + engines: {node: '>=10'} dependencies: compare-func: 2.0.0 lodash: 4.17.21 @@ -1764,8 +1753,8 @@ packages: dev: true /conventional-changelog-core/4.2.4: - resolution: { integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==} + engines: {node: '>=10'} dependencies: add-stream: 1.0.0 conventional-changelog-writer: 5.0.1 @@ -1784,49 +1773,49 @@ packages: dev: true /conventional-changelog-ember/2.0.9: - resolution: { integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-eslint/3.0.9: - resolution: { integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-express/2.0.6: - resolution: { integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-jquery/3.0.11: - resolution: { integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==} + engines: {node: '>=10'} dependencies: q: 1.5.1 dev: true /conventional-changelog-jshint/2.0.9: - resolution: { integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==} + engines: {node: '>=10'} dependencies: compare-func: 2.0.0 q: 1.5.1 dev: true /conventional-changelog-preset-loader/2.3.4: - resolution: { integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==} + engines: {node: '>=10'} dev: true /conventional-changelog-writer/5.0.1: - resolution: { integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==} + engines: {node: '>=10'} hasBin: true dependencies: conventional-commits-filter: 2.0.7 @@ -1841,8 +1830,8 @@ packages: dev: true /conventional-changelog/3.1.24: - resolution: { integrity: sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==} + engines: {node: '>=10'} dependencies: conventional-changelog-angular: 5.0.13 conventional-changelog-atom: 2.0.8 @@ -1858,16 +1847,16 @@ packages: dev: true /conventional-commits-filter/2.0.7: - resolution: { integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==} + engines: {node: '>=10'} dependencies: lodash.ismatch: 4.4.0 modify-values: 1.0.1 dev: true /conventional-commits-parser/3.2.4: - resolution: { integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} + engines: {node: '>=10'} hasBin: true dependencies: is-text-path: 1.0.1 @@ -1879,8 +1868,8 @@ packages: dev: true /conventional-recommended-bump/6.1.0: - resolution: { integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==} + engines: {node: '>=10'} hasBin: true dependencies: concat-stream: 2.0.0 @@ -1894,18 +1883,18 @@ packages: dev: true /convert-source-map/1.8.0: - resolution: { integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== } + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true /core-util-is/1.0.3: - resolution: { integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true /cosmiconfig-typescript-loader/1.0.5_f3bd4037939c2ed2942ba074291f8ef2: - resolution: { integrity: sha512-FL/YR1nb8hyN0bAcP3MBaIoZravfZtVsN/RuPnoo6UVjqIrDxSNIpXHCGgJe0ZWy5yImpyD6jq5wCJ5f1nUv8g== } - engines: { node: '>=12', npm: '>=6' } + resolution: {integrity: sha512-FL/YR1nb8hyN0bAcP3MBaIoZravfZtVsN/RuPnoo6UVjqIrDxSNIpXHCGgJe0ZWy5yImpyD6jq5wCJ5f1nUv8g==} + engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' typescript: '>=3' @@ -1920,8 +1909,8 @@ packages: dev: true /cosmiconfig/7.0.1: - resolution: { integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 import-fresh: 3.3.0 @@ -1931,7 +1920,7 @@ packages: dev: true /create-require/1.1.1: - resolution: { integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true /cross-spawn/7.0.3: @@ -1952,24 +1941,24 @@ packages: dev: true /cssom/0.4.4: - resolution: { integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== } + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} dev: true /cssstyle/2.3.0: - resolution: { integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true /dargs/7.0.0: - resolution: { integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} dev: true /data-urls/2.0.0: - resolution: { integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} dependencies: abab: 2.0.5 whatwg-mimetype: 2.3.0 @@ -1977,24 +1966,24 @@ packages: dev: true /dateformat/3.0.3: - resolution: { integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== } + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true /debug/2.6.9: - resolution: { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: ms: 2.0.0 dev: true /debug/3.2.7: - resolution: { integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} dependencies: ms: 2.1.2 dev: true /debug/4.3.2: - resolution: { integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -2005,142 +1994,137 @@ packages: dev: true /decamelize-keys/1.1.0: - resolution: { integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=} + engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 map-obj: 1.0.1 dev: true /decamelize/1.2.0: - resolution: { integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + engines: {node: '>=0.10.0'} dev: true /decimal.js/10.3.1: - resolution: { integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== } + resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} dev: true /dedent/0.7.0: - resolution: { integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= } + resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} dev: true /deep-is/0.1.4: - resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true /deepmerge/4.2.2: - resolution: { integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} dev: true /define-properties/1.1.3: - resolution: { integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + engines: {node: '>= 0.4'} dependencies: object-keys: 1.1.1 dev: true /delayed-stream/1.0.0: - resolution: { integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} + engines: {node: '>=0.4.0'} dev: true /detect-indent/6.1.0: - resolution: { integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} dev: true /detect-newline/3.1.0: - resolution: { integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== } - engines: { node: '>=8' } - dev: true - - /diff-sequences/27.4.0: - resolution: { integrity: sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} dev: true /diff-sequences/27.5.1: - resolution: { integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true /diff/4.0.2: - resolution: { integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} dev: true /diff/5.0.0: - resolution: { integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} dev: true /dir-glob/3.0.1: - resolution: { integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true /doctrine/2.1.0: - resolution: { integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true /doctrine/3.0.0: - resolution: { integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true /domexception/2.0.1: - resolution: { integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} dependencies: webidl-conversions: 5.0.0 dev: true /dot-prop/5.3.0: - resolution: { integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dependencies: is-obj: 2.0.0 dev: true /dotgitignore/2.1.0: - resolution: { integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==} + engines: {node: '>=6'} dependencies: find-up: 3.0.0 minimatch: 3.1.2 dev: true /electron-to-chromium/1.3.838: - resolution: { integrity: sha512-65O6UJiyohFAdX/nc6KJ0xG/4zOn7XCO03kQNNbCeMRGxlWTLzc6Uyi0tFNQuuGWqySZJi8CD2KXPXySVYmzMA== } + resolution: {integrity: sha512-65O6UJiyohFAdX/nc6KJ0xG/4zOn7XCO03kQNNbCeMRGxlWTLzc6Uyi0tFNQuuGWqySZJi8CD2KXPXySVYmzMA==} dev: true /emittery/0.8.1: - resolution: { integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} dev: true /emoji-regex/8.0.0: - resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true /error-ex/1.3.2: - resolution: { integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true /es-abstract/1.19.1: - resolution: { integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 es-to-primitive: 1.2.1 @@ -2165,8 +2149,8 @@ packages: dev: true /es-to-primitive/1.2.1: - resolution: { integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.4 is-date-object: 1.0.5 @@ -2174,28 +2158,28 @@ packages: dev: true /escalade/3.1.1: - resolution: { integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} dev: true /escape-string-regexp/1.0.5: - resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} dev: true /escape-string-regexp/2.0.0: - resolution: { integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} dev: true /escape-string-regexp/4.0.0: - resolution: { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true /escodegen/2.0.0: - resolution: { integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} hasBin: true dependencies: esprima: 4.0.1 @@ -2207,15 +2191,15 @@ packages: dev: true /eslint-import-resolver-node/0.3.6: - resolution: { integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== } + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} dependencies: debug: 3.2.7 resolve: 1.20.0 dev: true /eslint-import-resolver-typescript/2.5.0_392f898cec7735a5f7a99430cbc0b4f4: - resolution: { integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==} + engines: {node: '>=4'} peerDependencies: eslint: '*' eslint-plugin-import: '*' @@ -2232,16 +2216,16 @@ packages: dev: true /eslint-module-utils/2.7.3: - resolution: { integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== } - engines: { node: '>=4' } + resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} + engines: {node: '>=4'} dependencies: debug: 3.2.7 find-up: 2.1.0 dev: true /eslint-plugin-import/2.25.4_eslint@8.8.0: - resolution: { integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} + engines: {node: '>=4'} peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 dependencies: @@ -2262,24 +2246,24 @@ packages: dev: true /eslint-scope/5.1.1: - resolution: { integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 dev: true /eslint-scope/7.1.1: - resolution: { integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.2.0 dev: true /eslint-utils/3.0.0_eslint@8.8.0: - resolution: { integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== } - engines: { node: ^10.0.0 || ^12.0.0 || >= 14.0.0 } + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: @@ -2288,18 +2272,18 @@ packages: dev: true /eslint-visitor-keys/2.1.0: - resolution: { integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} dev: true /eslint-visitor-keys/3.3.0: - resolution: { integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true /eslint/8.8.0: - resolution: { integrity: sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint/eslintrc': 1.1.0 @@ -2342,8 +2326,8 @@ packages: dev: true /espree/9.3.1: - resolution: { integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.7.0 acorn-jsx: 5.3.2_acorn@8.7.0 @@ -2351,33 +2335,33 @@ packages: dev: true /esprima/4.0.1: - resolution: { integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== } - engines: { node: '>=4' } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true dev: true /esquery/1.4.0: - resolution: { integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.2.0 dev: true /esrecurse/4.3.0: - resolution: { integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.2.0 dev: true /estraverse/4.3.0: - resolution: { integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} dev: true /estraverse/5.2.0: - resolution: { integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} + engines: {node: '>=4.0'} dev: true /esutils/2.0.3: @@ -2401,13 +2385,13 @@ packages: dev: true /exit/0.1.2: - resolution: { integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} + engines: {node: '>= 0.8.0'} dev: true /expect/27.5.1: - resolution: { integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 jest-get-type: 27.5.1 @@ -2416,12 +2400,12 @@ packages: dev: true /fast-deep-equal/3.1.3: - resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true /fast-glob/3.2.11: - resolution: { integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -2431,90 +2415,90 @@ packages: dev: true /fast-json-stable-stringify/2.1.0: - resolution: { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true /fast-levenshtein/2.0.6: - resolution: { integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= } + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true /fastq/1.13.0: - resolution: { integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== } + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 dev: true /fb-watchman/2.0.1: - resolution: { integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== } + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} dependencies: bser: 2.1.1 dev: true /figures/3.2.0: - resolution: { integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 dev: true /file-entry-cache/6.0.1: - resolution: { integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true /fill-range/7.0.1: - resolution: { integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true /find-up/2.1.0: - resolution: { integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= } - engines: { node: '>=4' } + resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} + engines: {node: '>=4'} dependencies: locate-path: 2.0.0 dev: true /find-up/3.0.0: - resolution: { integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true /find-up/4.1.0: - resolution: { integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up/5.0.0: - resolution: { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 dev: true /flat-cache/3.0.4: - resolution: { integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.5 rimraf: 3.0.2 dev: true /flatted/3.2.5: - resolution: { integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== } + resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} /form-data/3.0.1: - resolution: { integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -2522,15 +2506,15 @@ packages: dev: true /fs-access/1.0.1: - resolution: { integrity: sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=} + engines: {node: '>=0.10.0'} dependencies: null-check: 1.0.0 dev: true /fs-extra/10.0.0: - resolution: { integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.9 jsonfile: 6.1.0 @@ -2538,8 +2522,8 @@ packages: dev: true /fs-extra/9.1.0: - resolution: { integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.9 @@ -2552,33 +2536,33 @@ packages: dev: true /fsevents/2.3.2: - resolution: { integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [ darwin ] + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] requiresBuild: true dev: true optional: true /function-bind/1.1.1: - resolution: { integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true /functional-red-black-tree/1.0.1: - resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true /gensync/1.0.0-beta.2: - resolution: { integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} dev: true /get-caller-file/2.0.5: - resolution: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} dev: true /get-intrinsic/1.1.1: - resolution: { integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== } + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -2586,13 +2570,13 @@ packages: dev: true /get-package-type/0.1.0: - resolution: { integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} dev: true /get-pkg-repo/4.2.1: - resolution: { integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} + engines: {node: '>=6.9.0'} hasBin: true dependencies: '@hutson/parse-repository-url': 3.0.2 @@ -2602,21 +2586,21 @@ packages: dev: true /get-stream/6.0.1: - resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} dev: true /get-symbol-description/1.0.0: - resolution: { integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 dev: true /git-raw-commits/2.0.11: - resolution: { integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== } - engines: { node: '>=10' } + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} hasBin: true dependencies: dargs: 7.0.0 @@ -2627,16 +2611,16 @@ packages: dev: true /git-remote-origin-url/2.0.0: - resolution: { integrity: sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= } - engines: { node: '>=4' } + resolution: {integrity: sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=} + engines: {node: '>=4'} dependencies: gitconfiglocal: 1.0.0 pify: 2.3.0 dev: true /git-semver-tags/4.1.1: - resolution: { integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==} + engines: {node: '>=10'} hasBin: true dependencies: meow: 8.1.2 @@ -2644,27 +2628,27 @@ packages: dev: true /gitconfiglocal/1.0.0: - resolution: { integrity: sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= } + resolution: {integrity: sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=} dependencies: ini: 1.3.8 dev: true /glob-parent/5.1.2: - resolution: { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true /glob-parent/6.0.2: - resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true /glob/7.2.0: - resolution: { integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== } + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2675,27 +2659,27 @@ packages: dev: true /global-dirs/0.1.1: - resolution: { integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= } - engines: { node: '>=4' } + resolution: {integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=} + engines: {node: '>=4'} dependencies: ini: 1.3.8 dev: true /globals/11.12.0: - resolution: { integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} dev: true /globals/13.12.1: - resolution: { integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true /globby/11.1.0: - resolution: { integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== } - engines: { node: '>=10' } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -2706,12 +2690,12 @@ packages: dev: true /graceful-fs/4.2.9: - resolution: { integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== } + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} dev: true /handlebars/4.7.7: - resolution: { integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== } - engines: { node: '>=0.4.7' } + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} hasBin: true dependencies: minimist: 1.2.5 @@ -2723,57 +2707,57 @@ packages: dev: true /hard-rejection/2.1.0: - resolution: { integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} dev: true /has-bigints/1.0.1: - resolution: { integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== } + resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} dev: true /has-flag/3.0.0: - resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } - engines: { node: '>=4' } + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} dev: true /has-flag/4.0.0: - resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} dev: true /has-symbols/1.0.2: - resolution: { integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} dev: true /has-tostringtag/1.0.0: - resolution: { integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.2 dev: true /has/1.0.3: - resolution: { integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: true /hosted-git-info/2.8.9: - resolution: { integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== } + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true /hosted-git-info/4.1.0: - resolution: { integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true /html-encoding-sniffer/2.0.1: - resolution: { integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 dev: true @@ -2804,44 +2788,44 @@ packages: dev: true /human-signals/2.1.0: - resolution: { integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== } - engines: { node: '>=10.17.0' } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} dev: true /husky/7.0.4: - resolution: { integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== } - engines: { node: '>=12' } + resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} + engines: {node: '>=12'} hasBin: true dev: true /iconv-lite/0.4.24: - resolution: { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true /ignore/4.0.6: - resolution: { integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} dev: true /ignore/5.2.0: - resolution: { integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== } - engines: { node: '>= 4' } + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} dev: true /import-fresh/3.3.0: - resolution: { integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 dev: true /import-local/3.0.2: - resolution: { integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} + engines: {node: '>=8'} hasBin: true dependencies: pkg-dir: 4.2.0 @@ -2849,33 +2833,33 @@ packages: dev: true /imurmurhash/0.1.4: - resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} dev: true /indent-string/4.0.0: - resolution: { integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} dev: true /inflight/1.0.6: - resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true /inherits/2.0.4: - resolution: { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true /ini/1.3.8: - resolution: { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true /internal-slot/1.0.3: - resolution: { integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.1.1 has: 1.0.3 @@ -2883,167 +2867,167 @@ packages: dev: true /is-arrayish/0.2.1: - resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} dev: true /is-bigint/1.0.4: - resolution: { integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== } + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.1 dev: true /is-boolean-object/1.1.2: - resolution: { integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 dev: true /is-buffer/1.1.6: - resolution: { integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== } + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true /is-callable/1.2.4: - resolution: { integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + engines: {node: '>= 0.4'} dev: true /is-core-module/2.8.1: - resolution: { integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== } + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} dependencies: has: 1.0.3 dev: true /is-date-object/1.0.5: - resolution: { integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-extglob/2.1.1: - resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} dev: true /is-fullwidth-code-point/3.0.0: - resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} dev: true /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: { node: '>=6' } + engines: {node: '>=6'} dev: true /is-glob/4.0.3: - resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true /is-negative-zero/2.0.2: - resolution: { integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} dev: true /is-number-object/1.0.6: - resolution: { integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-number/7.0.0: - resolution: { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} dev: true /is-obj/2.0.0: - resolution: { integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} dev: true /is-plain-obj/1.1.0: - resolution: { integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=} + engines: {node: '>=0.10.0'} dev: true /is-potential-custom-element-name/1.0.1: - resolution: { integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== } + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true /is-regex/1.1.4: - resolution: { integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 dev: true /is-shared-array-buffer/1.0.1: - resolution: { integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== } + resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} dev: true /is-stream/2.0.1: - resolution: { integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} dev: true /is-string/1.0.7: - resolution: { integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true /is-symbol/1.0.4: - resolution: { integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.2 dev: true /is-text-path/1.0.1: - resolution: { integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=} + engines: {node: '>=0.10.0'} dependencies: text-extensions: 1.9.0 dev: true /is-typedarray/1.0.0: - resolution: { integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= } + resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} dev: true /is-weakref/1.0.2: - resolution: { integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== } + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true /isarray/1.0.0: - resolution: { integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= } + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} dev: true /isexe/2.0.0: - resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true /istanbul-lib-coverage/3.0.0: - resolution: { integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} + engines: {node: '>=8'} dev: true /istanbul-lib-coverage/3.2.0: - resolution: { integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} dev: true /istanbul-lib-instrument/5.1.0: - resolution: { integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} + engines: {node: '>=8'} dependencies: '@babel/core': 7.15.5 '@babel/parser': 7.15.6 @@ -3064,8 +3048,8 @@ packages: dev: true /istanbul-lib-source-maps/4.0.0: - resolution: { integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} + engines: {node: '>=8'} dependencies: debug: 4.3.2 istanbul-lib-coverage: 3.0.0 @@ -3075,16 +3059,16 @@ packages: dev: true /istanbul-reports/3.1.4: - resolution: { integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true /jest-changed-files/27.5.1: - resolution: { integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 execa: 5.1.1 @@ -3092,8 +3076,8 @@ packages: dev: true /jest-circus/27.5.1: - resolution: { integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 @@ -3119,8 +3103,8 @@ packages: dev: true /jest-cli/27.5.1_ts-node@10.5.0: - resolution: { integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3149,8 +3133,8 @@ packages: dev: true /jest-config/27.5.1_ts-node@10.5.0: - resolution: { integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: ts-node: '>=9.0.0' peerDependenciesMeta: @@ -3189,19 +3173,9 @@ packages: - utf-8-validate dev: true - /jest-diff/27.4.2: - resolution: { integrity: sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dependencies: - chalk: 4.1.2 - diff-sequences: 27.4.0 - jest-get-type: 27.4.0 - pretty-format: 27.4.2 - dev: true - /jest-diff/27.5.1: - resolution: { integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 diff-sequences: 27.5.1 @@ -3210,15 +3184,15 @@ packages: dev: true /jest-docblock/27.5.1: - resolution: { integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: detect-newline: 3.1.0 dev: true /jest-each/27.5.1: - resolution: { integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 @@ -3228,8 +3202,8 @@ packages: dev: true /jest-environment-jsdom/27.5.1: - resolution: { integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 @@ -3246,8 +3220,8 @@ packages: dev: true /jest-environment-node/27.5.1: - resolution: { integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 @@ -3257,19 +3231,14 @@ packages: jest-util: 27.5.1 dev: true - /jest-get-type/27.4.0: - resolution: { integrity: sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dev: true - /jest-get-type/27.5.1: - resolution: { integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true /jest-haste-map/27.5.1: - resolution: { integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.5 @@ -3288,8 +3257,8 @@ packages: dev: true /jest-jasmine2/27.5.1: - resolution: { integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/source-map': 27.5.1 @@ -3313,16 +3282,16 @@ packages: dev: true /jest-leak-detector/27.5.1: - resolution: { integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: jest-get-type: 27.5.1 pretty-format: 27.5.1 dev: true /jest-matcher-utils/27.5.1: - resolution: { integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.2 jest-diff: 27.5.1 @@ -3331,8 +3300,8 @@ packages: dev: true /jest-message-util/27.5.1: - resolution: { integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/code-frame': 7.14.5 '@jest/types': 27.5.1 @@ -3346,16 +3315,16 @@ packages: dev: true /jest-mock/27.5.1: - resolution: { integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@types/node': 17.0.18 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: - resolution: { integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -3366,13 +3335,13 @@ packages: dev: true /jest-regex-util/27.5.1: - resolution: { integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true /jest-resolve-dependencies/27.5.1: - resolution: { integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 jest-regex-util: 27.5.1 @@ -3382,8 +3351,8 @@ packages: dev: true /jest-resolve/27.5.1: - resolution: { integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 chalk: 4.1.2 @@ -3398,8 +3367,8 @@ packages: dev: true /jest-runner/27.5.1: - resolution: { integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/console': 27.5.1 '@jest/environment': 27.5.1 @@ -3430,8 +3399,8 @@ packages: dev: true /jest-runtime/27.5.1: - resolution: { integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 @@ -3460,16 +3429,16 @@ packages: dev: true /jest-serializer/27.5.1: - resolution: { integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/node': 17.0.18 graceful-fs: 4.2.9 dev: true /jest-snapshot/27.5.1: - resolution: { integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/core': 7.15.5 '@babel/generator': 7.15.4 @@ -3499,7 +3468,7 @@ packages: /jest-util/27.4.2: resolution: {integrity: sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==} - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@types/node': 17.0.18 @@ -3510,8 +3479,8 @@ packages: dev: true /jest-util/27.5.1: - resolution: { integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 '@types/node': 17.0.18 @@ -3522,8 +3491,8 @@ packages: dev: true /jest-validate/27.5.1: - resolution: { integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 camelcase: 6.3.0 @@ -3534,8 +3503,8 @@ packages: dev: true /jest-watcher/27.5.1: - resolution: { integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 @@ -3547,8 +3516,8 @@ packages: dev: true /jest-worker/27.5.1: - resolution: { integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} dependencies: '@types/node': 17.0.18 merge-stream: 2.0.0 @@ -3556,8 +3525,8 @@ packages: dev: true /jest/27.5.1_ts-node@10.5.0: - resolution: { integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -3581,7 +3550,7 @@ packages: dev: true /js-yaml/3.14.1: - resolution: { integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 @@ -3589,15 +3558,15 @@ packages: dev: true /js-yaml/4.1.0: - resolution: { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true /jsdom/16.7.0: - resolution: { integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -3638,52 +3607,52 @@ packages: dev: true /jsesc/2.5.2: - resolution: { integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true dev: true /json-parse-better-errors/1.0.2: - resolution: { integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== } + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true /json-parse-even-better-errors/2.3.1: - resolution: { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true /json-schema-traverse/0.4.1: - resolution: { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse/1.0.0: - resolution: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true /json-stable-stringify-without-jsonify/1.0.1: - resolution: { integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= } + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true /json-stringify-safe/5.0.1: - resolution: { integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= } + resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=} dev: true /json5/1.0.1: - resolution: { integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== } + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} hasBin: true dependencies: minimist: 1.2.5 dev: true /json5/2.2.0: - resolution: { integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} hasBin: true dependencies: minimist: 1.2.5 dev: true /jsonfile/6.1.0: - resolution: { integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: @@ -3691,52 +3660,52 @@ packages: dev: true /jsonparse/1.3.1: - resolution: { integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= } - engines: { '0': node >= 0.2.0 } + resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=} + engines: {'0': node >= 0.2.0} dev: true /jsonschema/1.4.0: - resolution: { integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== } + resolution: {integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==} dev: true /kind-of/6.0.3: - resolution: { integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} dev: true /kleur/3.0.3: - resolution: { integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} dev: true /leven/3.1.0: - resolution: { integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} dev: true /levn/0.3.0: - resolution: { integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 dev: true /levn/0.4.1: - resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 dev: true /lines-and-columns/1.2.4: - resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true /load-json-file/4.0.0: - resolution: { integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs= } - engines: { node: '>=4' } + resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} + engines: {node: '>=4'} dependencies: graceful-fs: 4.2.9 parse-json: 4.0.0 @@ -3745,53 +3714,53 @@ packages: dev: true /locate-path/2.0.0: - resolution: { integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= } - engines: { node: '>=4' } + resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} + engines: {node: '>=4'} dependencies: p-locate: 2.0.0 path-exists: 3.0.0 dev: true /locate-path/3.0.0: - resolution: { integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 dev: true /locate-path/5.0.0: - resolution: { integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true /locate-path/6.0.0: - resolution: { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true /lodash.ismatch/4.4.0: - resolution: { integrity: sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= } + resolution: {integrity: sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=} dev: true /lodash.memoize/4.1.2: - resolution: { integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= } + resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} dev: true /lodash.merge/4.6.2: - resolution: { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true /lodash.truncate/4.4.2: - resolution: { integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= } + resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} dev: true /lodash/4.17.21: - resolution: { integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true /lru-cache/6.0.0: @@ -3809,27 +3778,27 @@ packages: dev: true /make-error/1.3.6: - resolution: { integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== } + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true /makeerror/1.0.11: - resolution: { integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= } + resolution: {integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=} dependencies: tmpl: 1.0.5 dev: true /map-obj/1.0.1: - resolution: { integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=} + engines: {node: '>=0.10.0'} dev: true /map-obj/4.3.0: - resolution: { integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} dev: true /md5/2.3.0: - resolution: { integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== } + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} dependencies: charenc: 0.0.2 crypt: 0.0.2 @@ -3837,8 +3806,8 @@ packages: dev: true /meow/8.1.2: - resolution: { integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 @@ -3854,17 +3823,17 @@ packages: dev: true /merge-stream/2.0.0: - resolution: { integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true /merge2/1.4.1: - resolution: { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} dev: true /micromatch/4.0.4: - resolution: { integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.0 @@ -3876,37 +3845,37 @@ packages: dev: true /mime-types/2.1.32: - resolution: { integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.49.0 dev: true /mimic-fn/2.1.0: - resolution: { integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} dev: true /min-indent/1.0.1: - resolution: { integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} dev: true /minimatch/3.0.4: - resolution: { integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== } + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 dev: true /minimatch/3.1.2: - resolution: { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true /minimist-options/4.1.0: - resolution: { integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 @@ -3914,40 +3883,40 @@ packages: dev: true /minimist/1.2.5: - resolution: { integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== } + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true /modify-values/1.0.1: - resolution: { integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} + engines: {node: '>=0.10.0'} dev: true /ms/2.0.0: - resolution: { integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= } + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} dev: true /ms/2.1.2: - resolution: { integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true /natural-compare/1.4.0: - resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } + resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true /neo-async/2.6.2: - resolution: { integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true /node-int64/0.4.0: - resolution: { integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= } + resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} dev: true /node-releases/1.1.75: - resolution: { integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== } + resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} dev: true /normalize-package-data/2.5.0: - resolution: { integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== } + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.20.0 @@ -3956,8 +3925,8 @@ packages: dev: true /normalize-package-data/3.0.3: - resolution: { integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 is-core-module: 2.8.1 @@ -3966,38 +3935,38 @@ packages: dev: true /normalize-path/3.0.0: - resolution: { integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} dev: true /npm-run-path/4.0.1: - resolution: { integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: true /null-check/1.0.0: - resolution: { integrity: sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=} + engines: {node: '>=0.10.0'} dev: true /nwsapi/2.2.0: - resolution: { integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== } + resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} dev: true /object-inspect/1.12.0: - resolution: { integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== } + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} dev: true /object-keys/1.1.1: - resolution: { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} dev: true /object.assign/4.1.2: - resolution: { integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -4006,8 +3975,8 @@ packages: dev: true /object.values/1.1.5: - resolution: { integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 @@ -4015,21 +3984,21 @@ packages: dev: true /once/1.4.0: - resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 dev: true /onetime/5.1.2: - resolution: { integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== } - engines: { node: '>=6' } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: { node: '>= 0.8.0' } + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -4040,8 +4009,8 @@ packages: dev: true /optionator/0.9.1: - resolution: { integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -4052,82 +4021,82 @@ packages: dev: true /p-limit/1.3.0: - resolution: { integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== } - engines: { node: '>=4' } + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} dependencies: p-try: 1.0.0 dev: true /p-limit/2.3.0: - resolution: { integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== } - engines: { node: '>=6' } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true /p-limit/3.1.0: - resolution: { integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true /p-locate/2.0.0: - resolution: { integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= } - engines: { node: '>=4' } + resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} + engines: {node: '>=4'} dependencies: p-limit: 1.3.0 dev: true /p-locate/3.0.0: - resolution: { integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true /p-locate/4.1.0: - resolution: { integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true /p-locate/5.0.0: - resolution: { integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true /p-try/1.0.0: - resolution: { integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= } - engines: { node: '>=4' } + resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} + engines: {node: '>=4'} dev: true /p-try/2.2.0: - resolution: { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== } - engines: { node: '>=6' } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true /parent-module/1.0.1: - resolution: { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true /parse-json/4.0.0: - resolution: { integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= } - engines: { node: '>=4' } + resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} + engines: {node: '>=4'} dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 dev: true /parse-json/5.2.0: - resolution: { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: '@babel/code-frame': 7.14.5 error-ex: 1.3.2 @@ -4136,100 +4105,90 @@ packages: dev: true /parse5/6.0.1: - resolution: { integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== } + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true /path-exists/3.0.0: - resolution: { integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= } - engines: { node: '>=4' } + resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} + engines: {node: '>=4'} dev: true /path-exists/4.0.0: - resolution: { integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true /path-is-absolute/1.0.1: - resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} dev: true /path-key/3.1.1: - resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true /path-parse/1.0.7: - resolution: { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type/3.0.0: - resolution: { integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== } - engines: { node: '>=4' } + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} dependencies: pify: 3.0.0 dev: true /path-type/4.0.0: - resolution: { integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} dev: true /picomatch/2.3.0: - resolution: { integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} + engines: {node: '>=8.6'} dev: true /pify/2.3.0: - resolution: { integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} + engines: {node: '>=0.10.0'} dev: true /pify/3.0.0: - resolution: { integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= } - engines: { node: '>=4' } + resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} + engines: {node: '>=4'} dev: true /pirates/4.0.5: - resolution: { integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} dev: true /pkg-dir/4.2.0: - resolution: { integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: true /pluralize/8.0.0: - resolution: { integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== } - engines: { node: '>=4' } + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} dev: false /prelude-ls/1.1.2: - resolution: { integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} + engines: {node: '>= 0.8.0'} dev: true /prelude-ls/1.2.1: - resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } - engines: { node: '>= 0.8.0' } - dev: true - - /pretty-format/27.4.2: - resolution: { integrity: sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dependencies: - '@jest/types': 27.4.2 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} dev: true /pretty-format/27.5.1: - resolution: { integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 @@ -4237,7 +4196,7 @@ packages: dev: true /process-nextick-args/2.0.1: - resolution: { integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true /prompts/2.4.1: @@ -4249,43 +4208,43 @@ packages: dev: true /psl/1.8.0: - resolution: { integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== } + resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} dev: true /punycode/2.1.1: - resolution: { integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== } - engines: { node: '>=6' } + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} dev: true /q/1.5.1: - resolution: { integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= } - engines: { node: '>=0.6.0', teleport: '>=0.2.0' } + resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true /queue-microtask/1.2.3: - resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true /quick-lru/4.0.1: - resolution: { integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} dev: true /react-is/17.0.2: - resolution: { integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== } + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true /read-pkg-up/3.0.0: - resolution: { integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= } - engines: { node: '>=4' } + resolution: {integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=} + engines: {node: '>=4'} dependencies: find-up: 2.1.0 read-pkg: 3.0.0 dev: true /read-pkg-up/7.0.1: - resolution: { integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 @@ -4293,8 +4252,8 @@ packages: dev: true /read-pkg/3.0.0: - resolution: { integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= } - engines: { node: '>=4' } + resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=} + engines: {node: '>=4'} dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 @@ -4302,8 +4261,8 @@ packages: dev: true /read-pkg/5.2.0: - resolution: { integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 @@ -4312,7 +4271,7 @@ packages: dev: true /readable-stream/2.3.7: - resolution: { integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== } + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -4324,8 +4283,8 @@ packages: dev: true /readable-stream/3.6.0: - resolution: { integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 @@ -4333,133 +4292,133 @@ packages: dev: true /redent/3.0.0: - resolution: { integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 dev: true /regexpp/3.2.0: - resolution: { integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} dev: true /require-directory/2.1.1: - resolution: { integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} dev: true /require-from-string/2.0.2: - resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} dev: true /resolve-cwd/3.0.0: - resolution: { integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: true /resolve-from/4.0.0: - resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} dev: true /resolve-from/5.0.0: - resolution: { integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} dev: true /resolve-global/1.0.0: - resolution: { integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} dependencies: global-dirs: 0.1.1 dev: true /resolve.exports/1.1.0: - resolution: { integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + engines: {node: '>=10'} dev: true /resolve/1.20.0: - resolution: { integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== } + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: is-core-module: 2.8.1 path-parse: 1.0.7 dev: true /reusify/1.0.4: - resolution: { integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true /rimraf/3.0.2: - resolution: { integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.0 dev: true /run-parallel/1.2.0: - resolution: { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true /safe-buffer/5.1.2: - resolution: { integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true /safe-buffer/5.2.1: - resolution: { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true /safer-buffer/2.1.2: - resolution: { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true /saxes/5.0.1: - resolution: { integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 dev: true /semver/5.7.1: - resolution: { integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== } + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true /semver/6.3.0: - resolution: { integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== } + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true dev: true /semver/7.3.5: - resolution: { integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: true /shebang-command/2.0.0: - resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true /shebang-regex/3.0.0: - resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true /side-channel/1.0.4: - resolution: { integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 @@ -4467,11 +4426,11 @@ packages: dev: true /signal-exit/3.0.3: - resolution: { integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== } + resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} dev: true /sisteransi/1.0.5: - resolution: { integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: true /slash/3.0.0: @@ -4500,62 +4459,62 @@ packages: dev: true /source-map/0.6.1: - resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} /source-map/0.7.3: - resolution: { integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} dev: true /spdx-correct/3.1.1: - resolution: { integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== } + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.11 dev: true /spdx-exceptions/2.3.0: - resolution: { integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== } + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true /spdx-expression-parse/3.0.1: - resolution: { integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== } + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.11 dev: true /spdx-license-ids/3.0.11: - resolution: { integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== } + resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} dev: true /split/1.0.1: - resolution: { integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== } + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} dependencies: through: 2.3.8 dev: true /split2/3.2.2: - resolution: { integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== } + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.0 dev: true /sprintf-js/1.0.3: - resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= } + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true /stack-utils/2.0.3: - resolution: { integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: true /standard-version/9.3.2: - resolution: { integrity: sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==} + engines: {node: '>=10'} hasBin: true dependencies: chalk: 2.4.2 @@ -4576,16 +4535,16 @@ packages: dev: true /string-length/4.0.2: - resolution: { integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 dev: true /string-width/4.2.3: - resolution: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } - engines: { node: '>=8' } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 @@ -4593,78 +4552,78 @@ packages: dev: true /string.prototype.trimend/1.0.4: - resolution: { integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== } + resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true /string.prototype.trimstart/1.0.4: - resolution: { integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== } + resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 dev: true /string_decoder/1.1.1: - resolution: { integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true /string_decoder/1.3.0: - resolution: { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true /stringify-package/1.0.1: - resolution: { integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== } + resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==} dev: true /strip-ansi/6.0.1: - resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true /strip-bom/3.0.0: - resolution: { integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= } - engines: { node: '>=4' } + resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} + engines: {node: '>=4'} dev: true /strip-bom/4.0.0: - resolution: { integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} dev: true /strip-final-newline/2.0.0: - resolution: { integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== } - engines: { node: '>=6' } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} dev: true /strip-indent/3.0.0: - resolution: { integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true /strip-json-comments/3.1.1: - resolution: { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} dev: true /supports-color/5.5.0: - resolution: { integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true /supports-color/7.2.0: - resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 @@ -4679,19 +4638,19 @@ packages: /supports-hyperlinks/2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: { node: '>=8' } + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 dev: true /symbol-tree/3.2.4: - resolution: { integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== } + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true /table/6.8.0: - resolution: { integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==} + engines: {node: '>=10.0.0'} dependencies: ajv: 8.6.3 lodash.truncate: 4.4.2 @@ -4701,7 +4660,7 @@ packages: dev: true /terminal-link/2.1.1: - resolution: { integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== } + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 @@ -4709,8 +4668,8 @@ packages: dev: true /test-exclude/6.0.0: - resolution: { integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== } - engines: { node: '>=8' } + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.0 @@ -4718,42 +4677,42 @@ packages: dev: true /text-extensions/1.9.0: - resolution: { integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} dev: true /text-table/0.2.0: - resolution: { integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= } + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true /throat/6.0.1: - resolution: { integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== } + resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} dev: true /through/2.3.8: - resolution: { integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= } + resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} dev: true /through2/2.0.5: - resolution: { integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== } + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.7 xtend: 4.0.2 dev: true /through2/4.0.2: - resolution: { integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== } + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: readable-stream: 3.6.0 dev: true /tmpl/1.0.5: - resolution: { integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== } + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true /to-fast-properties/2.0.0: - resolution: { integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= } - engines: { node: '>=4' } + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} dev: true /to-regex-range/5.0.1: @@ -4773,20 +4732,20 @@ packages: dev: true /tr46/2.1.0: - resolution: { integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} dependencies: punycode: 2.1.1 dev: true /trim-newlines/3.0.1: - resolution: { integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== } - engines: { node: '>=8' } + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} dev: true - /ts-jest/27.1.3_1e2406a8ca2ae3dc934d01f9ee2aebbb: - resolution: { integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + /ts-jest/27.1.3_8fa130d172bf7d71653f05507c50c5a3: + resolution: {integrity: sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -4805,7 +4764,7 @@ packages: esbuild: optional: true dependencies: - '@types/jest': 27.4.0 + '@types/jest': 27.4.1 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 27.5.1_ts-node@10.5.0 @@ -4819,7 +4778,7 @@ packages: dev: true /ts-node/10.5.0_f3bd4037939c2ed2942ba074291f8ef2: - resolution: { integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw== } + resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -4850,7 +4809,7 @@ packages: dev: true /tsconfig-paths/3.12.0: - resolution: { integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== } + resolution: {integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.1 @@ -4859,12 +4818,12 @@ packages: dev: true /tslib/1.14.1: - resolution: { integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true /tsutils/3.21.0_typescript@4.5.5: - resolution: { integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: @@ -4873,75 +4832,75 @@ packages: dev: true /type-check/0.3.2: - resolution: { integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true /type-check/0.4.0: - resolution: { integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true /type-detect/4.0.8: - resolution: { integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== } - engines: { node: '>=4' } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} dev: true /type-fest/0.18.1: - resolution: { integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} dev: true /type-fest/0.20.2: - resolution: { integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} dev: true /type-fest/0.21.3: - resolution: { integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} dev: true /type-fest/0.6.0: - resolution: { integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== } - engines: { node: '>=8' } + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} dev: true /type-fest/0.8.1: - resolution: { integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== } - engines: { node: '>=8' } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} dev: true /typedarray-to-buffer/3.1.5: - resolution: { integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== } + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true /typedarray/0.0.6: - resolution: { integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= } + resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=} dev: true /typescript/4.5.5: - resolution: { integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== } - engines: { node: '>=4.2.0' } + resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} + engines: {node: '>=4.2.0'} hasBin: true dev: true /uglify-js/3.15.1: - resolution: { integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ== } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==} + engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true dev: true optional: true /unbox-primitive/1.0.1: - resolution: { integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== } + resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} dependencies: function-bind: 1.1.1 has-bigints: 1.0.1 @@ -4950,36 +4909,36 @@ packages: dev: true /universalify/0.1.2: - resolution: { integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} dev: true /universalify/2.0.0: - resolution: { integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} dev: true /uri-js/4.4.1: - resolution: { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true /util-deprecate/1.0.2: - resolution: { integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= } + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} dev: true /v8-compile-cache-lib/3.0.0: - resolution: { integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== } + resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} dev: true /v8-compile-cache/2.3.0: - resolution: { integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== } + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true /v8-to-istanbul/8.1.0: - resolution: { integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==} + engines: {node: '>=10.12.0'} dependencies: '@types/istanbul-lib-coverage': 2.0.3 convert-source-map: 1.8.0 @@ -4987,20 +4946,20 @@ packages: dev: true /validate-npm-package-license/3.0.4: - resolution: { integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== } + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true /w3c-hr-time/1.0.2: - resolution: { integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== } + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} dependencies: browser-process-hrtime: 1.0.0 dev: true /w3c-xmlserializer/2.0.0: - resolution: { integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== } + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 @@ -5033,8 +4992,8 @@ packages: dev: true /whatwg-url/8.7.0: - resolution: { integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== } - engines: { node: '>=10' } + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} dependencies: lodash: 4.17.21 tr46: 2.1.0 @@ -5042,7 +5001,7 @@ packages: dev: true /which-boxed-primitive/1.0.2: - resolution: { integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== } + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -5052,8 +5011,8 @@ packages: dev: true /which/2.0.2: - resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 @@ -5104,44 +5063,44 @@ packages: dev: true /xml-name-validator/3.0.0: - resolution: { integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== } + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true /xmlchars/2.2.0: - resolution: { integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== } + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true /xtend/4.0.2: - resolution: { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } - engines: { node: '>=0.4' } + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} dev: true /y18n/5.0.8: - resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } - engines: { node: '>=10' } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} dev: true /yallist/4.0.0: - resolution: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yaml/1.10.2: - resolution: { integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} /yargs-parser/20.2.9: - resolution: { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== } - engines: { node: '>=10' } + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} dev: true /yargs-parser/21.0.0: - resolution: { integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==} + engines: {node: '>=12'} dev: true /yargs/16.2.0: - resolution: { integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== } - engines: { node: '>=10' } + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -5153,8 +5112,8 @@ packages: dev: true /yargs/17.3.1: - resolution: { integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== } - engines: { node: '>=12' } + resolution: {integrity: sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==} + engines: {node: '>=12'} dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -5166,11 +5125,11 @@ packages: dev: true /yn/3.1.1: - resolution: { integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== } - engines: { node: '>=6' } + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} dev: true /yocto-queue/0.1.0: - resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} dev: true From 4bb70d6fe5542a0fd232bf44019a078bca1467b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 23 Feb 2022 13:41:55 +0000 Subject: [PATCH 6/7] chore(deps): pin dependency @types/pluralize to 0.0.29 --- package.json | 2 +- pnpm-lock.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2b26d7b26..a6569093c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@commitlint/config-conventional": "16.2.1", "@types/jest": "27.4.1", "@types/node": "17.0.18", - "@types/pluralize": "^0.0.29", + "@types/pluralize": "0.0.29", "@typescript-eslint/eslint-plugin": "5.10.2", "@typescript-eslint/parser": "5.10.2", "aws-cdk-lib": "2.13.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f52b03f17..1d480e578 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: '@commitlint/config-conventional': 16.2.1 '@types/jest': 27.4.1 '@types/node': 17.0.18 - '@types/pluralize': ^0.0.29 + '@types/pluralize': 0.0.29 '@typescript-eslint/eslint-plugin': 5.10.2 '@typescript-eslint/parser': 5.10.2 aws-cdk-lib: 2.13.0 From b7644f8f835d42c3582e7f70c7cfe1d70ee1d981 Mon Sep 17 00:00:00 2001 From: AustinZhu <42071208+AustinZhu@users.noreply.github.com> Date: Thu, 24 Feb 2022 00:12:42 +0900 Subject: [PATCH 7/7] chore(release): 2.0.0 --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e53d37434..d7beb1ad7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.0.0](https://github.com/wasedatime/wasedatime-backend/compare/v1.3.3...v2.0.0) (2022-02-23) + + +### Bug Fixes + +* **deps:** update dependency flatted to v3.2.5 ([#126](https://github.com/wasedatime/wasedatime-backend/issues/126)) ([21497ac](https://github.com/wasedatime/wasedatime-backend/commit/21497ac7a0b09c0474db4e46b15e490cf5909faa)) +* renew auth cert ([#127](https://github.com/wasedatime/wasedatime-backend/issues/127)) ([a661f2b](https://github.com/wasedatime/wasedatime-backend/commit/a661f2bace720641c15c57ec83f1b28745851f62)) + ## [2.0.0-alpha.1](https://github.com/wasedatime/wasedatime-backend/compare/v2.0.0-alpha.0...v2.0.0-alpha.1) (2022-02-23) diff --git a/package.json b/package.json index a6569093c..dc90a253e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wasedatime-backend", - "version": "2.0.0-alpha.1", + "version": "2.0.0", "bin": { "wasedatime-backend": "bin/index.js" },