From 95cb6192b881b48bf674e80c9a76628170fd590e Mon Sep 17 00:00:00 2001 From: John Conley <8932043+jfrconley@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:35:48 -0700 Subject: [PATCH 1/5] inprogress completeness work --- .gitignore | 1 + package.json | 9 +- pnpm-lock.yaml | 7902 +++++++++-------- src/__tests__/helpers.ts | 9 +- .../__snapshots__/apigateway.spec.ts.snap | 536 +- .../__snapshots__/appsync.spec.ts.snap | 620 +- .../certificate-manager.spec.ts.snap | 92 +- .../__snapshots__/cloudfront.spec.ts.snap | 522 +- .../__snapshots__/cognito.spec.ts.snap | 461 +- .../__snapshots__/dynamodb.spec.ts.snap | 166 +- .../__snapshots__/ec2-vpc.spec.ts.snap | 551 +- .../__snapshots__/events.spec.ts.snap | 157 - .../mappings/__snapshots__/iam.spec.ts.snap | 200 +- .../__snapshots__/lambda.spec.ts.snap | 387 +- .../mappings/__snapshots__/logs.spec.ts.snap | 90 +- .../__snapshots__/route53.spec.ts.snap | 104 +- .../mappings/__snapshots__/s3.spec.ts.snap | 42 +- .../mappings/__snapshots__/sns.spec.ts.snap | 126 - .../mappings/__snapshots__/sqs.spec.ts.snap | 88 - .../__snapshots__/stepfunctions.spec.ts.snap | 259 +- src/__tests__/mappings/apigateway.spec.ts | 3 +- src/__tests__/mappings/cognito.spec.ts | 18 +- src/__tests__/mappings/dynamodb.spec.ts | 4 +- src/__tests__/mappings/ec2-vpc.spec.ts | 4 + src/__tests__/mappings/eks.spec.ts | 38 + src/__tests__/mappings/iam.spec.ts | 1 + src/__tests__/mappings/rds.spec.ts | 136 + src/__tests__/mappings/s3.spec.ts | 5 + src/__tests__/utils.spec.ts | 148 + src/lib/core/awscc/supported-types.ts | 1751 ++-- src/lib/core/cdk-adaptor-stack.ts | 28 +- src/lib/core/type-utils.ts | 2 +- src/mappings/helper.ts | 2 + src/mappings/index.ts | 2 + src/mappings/services/apigateway.ts | 4 + src/mappings/services/appsync.ts | 31 +- src/mappings/services/cloudfront.ts | 5 +- src/mappings/services/cognito.ts | 11 +- src/mappings/services/dynamodb.ts | 8 +- src/mappings/services/ec2-vpc.ts | 7 +- src/mappings/services/eks.ts | 58 + src/mappings/services/iam.ts | 8 +- src/mappings/services/logs.ts | 2 +- src/mappings/services/rds.ts | 82 + src/mappings/services/s3.ts | 3 +- src/mappings/utils.ts | 182 +- vitest.config.js | 3 +- 47 files changed, 7952 insertions(+), 6916 deletions(-) delete mode 100644 src/__tests__/mappings/__snapshots__/events.spec.ts.snap delete mode 100644 src/__tests__/mappings/__snapshots__/sns.spec.ts.snap delete mode 100644 src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap create mode 100644 src/__tests__/mappings/eks.spec.ts create mode 100644 src/__tests__/mappings/rds.spec.ts create mode 100644 src/__tests__/utils.spec.ts create mode 100644 src/mappings/services/eks.ts create mode 100644 src/mappings/services/rds.ts diff --git a/.gitignore b/.gitignore index 4a6e31c..ec8a292 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ coverage reports cdktf.out .eslintcache +.vscode diff --git a/package.json b/package.json index d1882a1..2c0dd3e 100644 --- a/package.json +++ b/package.json @@ -54,15 +54,15 @@ "license": "MIT", "devDependencies": { "@aws-sdk/client-cloudformation": "^3.515.0", - "@cdktf/provider-aws": "^19.28.0", + "@cdktf/provider-aws": "^19.33.0", "@changesets/cli": "^2.27.1", "@eslint/js": "^8.56.0", "@types/debug": "^4.1.12", "@types/node": "^18.19.17", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", - "@vitest/coverage-v8": "^0.34.6", - "aws-cdk-lib": "^2.150.0", + "@vitest/coverage-v8": "^2.1.0", + "aws-cdk-lib": "^2.158.0", "cdktf": "^0.20.8", "cdktf-cli": "^0.18.2", "constructs": "^10.3.0", @@ -71,7 +71,7 @@ "husky": "^8.0.3", "type-fest": "^4.10.2", "typescript": "^5.3.3", - "vitest": "^0.34.6" + "vitest": "^2.1.0" }, "peerDependencies": { "@cdktf/provider-aws": ">=19.28.0", @@ -83,6 +83,7 @@ "camel-case": "^4.1.2", "codemaker": "^1.94.0", "debug": "^4.3.4", + "minimatch": "^10.0.1", "yargs": "^17.7.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0177810..5fa888e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,125 +1,3450 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - camel-case: - specifier: ^4.1.2 - version: 4.1.2 - codemaker: - specifier: ^1.94.0 - version: 1.94.0 - debug: - specifier: ^4.3.4 - version: 4.3.4 - yargs: - specifier: ^17.7.2 - version: 17.7.2 - -devDependencies: - '@aws-sdk/client-cloudformation': - specifier: ^3.515.0 - version: 3.515.0 - '@cdktf/provider-aws': - specifier: ^19.28.0 - version: 19.28.0(cdktf@0.20.8)(constructs@10.3.0) - '@changesets/cli': - specifier: ^2.27.1 - version: 2.27.1 - '@eslint/js': - specifier: ^8.56.0 - version: 8.56.0 - '@types/debug': - specifier: ^4.1.12 - version: 4.1.12 - '@types/node': - specifier: ^18.19.17 - version: 18.19.17 - '@typescript-eslint/eslint-plugin': - specifier: ^6.21.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: ^6.21.0 - version: 6.21.0(eslint@8.56.0)(typescript@5.3.3) - '@vitest/coverage-v8': - specifier: ^0.34.6 - version: 0.34.6(vitest@0.34.6) - aws-cdk-lib: - specifier: ^2.150.0 - version: 2.150.0(constructs@10.3.0) - cdktf: - specifier: ^0.20.8 - version: 0.20.8(constructs@10.3.0) - cdktf-cli: - specifier: ^0.18.2 - version: 0.18.2(debug@4.3.4)(ink@3.2.0)(react@17.0.2) - constructs: - specifier: ^10.3.0 - version: 10.3.0 - dprint: - specifier: ^0.35.4 - version: 0.35.4 - eslint: - specifier: ^8.56.0 - version: 8.56.0 - husky: - specifier: ^8.0.3 - version: 8.0.3 - type-fest: - specifier: ^4.10.2 - version: 4.10.2 - typescript: - specifier: ^5.3.3 - version: 5.3.3 - vitest: - specifier: ^0.34.6 - version: 0.34.6 +importers: + + .: + dependencies: + camel-case: + specifier: ^4.1.2 + version: 4.1.2 + codemaker: + specifier: ^1.94.0 + version: 1.94.0 + debug: + specifier: ^4.3.4 + version: 4.3.4 + minimatch: + specifier: ^10.0.1 + version: 10.0.1 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + devDependencies: + '@aws-sdk/client-cloudformation': + specifier: ^3.515.0 + version: 3.515.0 + '@cdktf/provider-aws': + specifier: ^19.33.0 + version: 19.33.0(cdktf@0.20.8(constructs@10.3.0))(constructs@10.3.0) + '@changesets/cli': + specifier: ^2.27.1 + version: 2.27.1 + '@eslint/js': + specifier: ^8.56.0 + version: 8.56.0 + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/node': + specifier: ^18.19.17 + version: 18.19.17 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^6.21.0 + version: 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@vitest/coverage-v8': + specifier: ^2.1.0 + version: 2.1.0(vitest@2.1.0(@types/node@18.19.17)) + aws-cdk-lib: + specifier: ^2.158.0 + version: 2.158.0(constructs@10.3.0) + cdktf: + specifier: ^0.20.8 + version: 0.20.8(constructs@10.3.0) + cdktf-cli: + specifier: ^0.18.2 + version: 0.18.2(debug@4.3.4)(ink@3.2.0(react@17.0.2))(react@17.0.2) + constructs: + specifier: ^10.3.0 + version: 10.3.0 + dprint: + specifier: ^0.35.4 + version: 0.35.4 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + husky: + specifier: ^8.0.3 + version: 8.0.3 + type-fest: + specifier: ^4.10.2 + version: 4.10.2 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + vitest: + specifier: ^2.1.0 + version: 2.1.0(@types/node@18.19.17) packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@aws-cdk/asset-awscli-v1@2.2.202': + resolution: {integrity: sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==} + + '@aws-cdk/asset-kubectl-v20@2.1.2': + resolution: {integrity: sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==} + + '@aws-cdk/asset-node-proxy-agent-v6@2.1.0': + resolution: {integrity: sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==} + + '@aws-cdk/cloud-assembly-schema@36.0.25': + resolution: {integrity: sha512-AK86v4IMV4zcWfp392e3wlaVJPT72/dk39Lo2SDDFxQR+sikMOyY2IGrULyhK1TwQmPiyxM7QB/0MkTbMDAPrw==} + engines: {node: '>= 18.18.0'} + bundledDependencies: + - jsonschema + - semver + + '@aws-crypto/crc32@3.0.0': + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + + '@aws-crypto/ie11-detection@3.0.0': + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + + '@aws-crypto/sha256-browser@3.0.0': + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + + '@aws-crypto/sha256-js@3.0.0': + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + + '@aws-crypto/supports-web-crypto@3.0.0': + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + + '@aws-sdk/client-cloudformation@3.515.0': + resolution: {integrity: sha512-wRZTIGfKeuSlPPPb5aj3PahdDKNfLfz27VS8rAcICzRgryLg7HmTKwhxXLb6jG+AFylODedxWtpq+QflM2RghA==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/client-sso-oidc@3.515.0': + resolution: {integrity: sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.515.0 + + '@aws-sdk/client-sso@3.515.0': + resolution: {integrity: sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/client-sts@3.515.0': + resolution: {integrity: sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.515.0 + + '@aws-sdk/core@3.513.0': + resolution: {integrity: sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-env@3.515.0': + resolution: {integrity: sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-http@3.515.0': + resolution: {integrity: sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-ini@3.515.0': + resolution: {integrity: sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-node@3.515.0': + resolution: {integrity: sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-process@3.515.0': + resolution: {integrity: sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-sso@3.515.0': + resolution: {integrity: sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.515.0': + resolution: {integrity: sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/middleware-host-header@3.515.0': + resolution: {integrity: sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/middleware-logger@3.515.0': + resolution: {integrity: sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.515.0': + resolution: {integrity: sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/middleware-user-agent@3.515.0': + resolution: {integrity: sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/region-config-resolver@3.515.0': + resolution: {integrity: sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/token-providers@3.515.0': + resolution: {integrity: sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/types@3.515.0': + resolution: {integrity: sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/util-endpoints@3.515.0': + resolution: {integrity: sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/util-locate-window@3.495.0': + resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/util-user-agent-browser@3.515.0': + resolution: {integrity: sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==} + + '@aws-sdk/util-user-agent-node@3.515.0': + resolution: {integrity: sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + + '@babel/code-frame@7.23.5': + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.23.6': + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.23.4': + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.23.4': + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.23.9': + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.23.9': + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.23.9': + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.23.9': + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@cdktf/cli-core@0.18.2': + resolution: {integrity: sha512-deJzuZIJ829tzx0X1t1E1n6jeSCal2SoR1v9r9F6EFTlfAhU3uccj6z6e8RalnLKh4SMJWRtN8PsWzuGaBEN2Q==} + + '@cdktf/commons@0.18.2': + resolution: {integrity: sha512-9jLT7K6bkGWdy8wRbpZfmAnzDPczV9NBpGIS3vsKJCZwoipccmG2LD12DlbM3610IHISksya2AQLlLmJMsTnmA==} + + '@cdktf/hcl2cdk@0.18.2': + resolution: {integrity: sha512-/AdUWmg1EC++HrS2I/C8H3JV1m/JfK3ONGBY1efNlc3LO7TBKJssKWVBMtYp45IJD86m7rNBOeL1TD0AZ1KjrQ==} + + '@cdktf/hcl2json@0.18.2': + resolution: {integrity: sha512-TSuIMet9RSuXUWPz40ed/W4WMu92aHVnJ44lB5nap9E1PE8brr7FhnW32dFOy9m2H8WU4GAfSQ0k3GW6JitSig==} + + '@cdktf/node-pty-prebuilt-multiarch@0.10.1-pre.10': + resolution: {integrity: sha512-5ysQrHJvqYLYg407KvaDNu+xx68ZGaqeF0SohXe5e4yNqJhPFPUQ536rkReQcPc2yZiF5PDmmvf5T9MOacHpSQ==} + + '@cdktf/provider-aws@19.33.0': + resolution: {integrity: sha512-21dhJPSMwTL/lLJacj7R+qnW7NrRFIWcvbSblKrAdNduMf24Th+9fcd8kTHoXv1jPGN9eC6kK/XOPxna6YHdrw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + cdktf: ^0.20.0 + constructs: ^10.3.0 + + '@cdktf/provider-generator@0.18.2': + resolution: {integrity: sha512-Qqfmwlz1t9Ie84CLkefxDR8a2bsacxbaEncO6NqzwYWaCu/K5TDDOqHjLKl1kv3mKjdZtJ0YLMJsMP0C49hKPg==} + + '@cdktf/provider-schema@0.18.2': + resolution: {integrity: sha512-UB3oxmh0GJ/NeubDKjF+gT8bsh7kcT+lCbG0OZwXPlTKBuaDRuS2InkvcUAlvhC7ML1+DqpTl5PsAaowuW46uA==} + + '@changesets/apply-release-plan@7.0.0': + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + + '@changesets/assemble-release-plan@6.0.0': + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/cli@2.27.1': + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + hasBin: true + + '@changesets/config@3.0.0': + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.0.0': + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + + '@changesets/get-release-plan@4.0.0': + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.0': + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.56.0': + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.2': + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + + '@inquirer/checkbox@1.5.2': + resolution: {integrity: sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==} + engines: {node: '>=14.18.0'} + + '@inquirer/confirm@2.0.17': + resolution: {integrity: sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA==} + engines: {node: '>=14.18.0'} + + '@inquirer/core@2.3.1': + resolution: {integrity: sha512-faYAYnIfdEuns3jGKykaog5oUqFiEVbCx9nXGZfUhyEEpKcHt5bpJfZTb3eOBQKo8I/v4sJkZeBHmFlSZQuBCw==} + engines: {node: '>=14.18.0'} + + '@inquirer/core@6.0.0': + resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} + engines: {node: '>=14.18.0'} + + '@inquirer/editor@1.2.15': + resolution: {integrity: sha512-gQ77Ls09x5vKLVNMH9q/7xvYPT6sIs5f7URksw+a2iJZ0j48tVS6crLqm2ugG33tgXHIwiEqkytY60Zyh5GkJQ==} + engines: {node: '>=14.18.0'} + + '@inquirer/expand@1.1.16': + resolution: {integrity: sha512-TGLU9egcuo+s7PxphKUCnJnpCIVY32/EwPCLLuu+gTvYiD8hZgx8Z2niNQD36sa6xcfpdLY6xXDBiL/+g1r2XQ==} + engines: {node: '>=14.18.0'} + + '@inquirer/input@1.2.16': + resolution: {integrity: sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g==} + engines: {node: '>=14.18.0'} + + '@inquirer/password@1.1.16': + resolution: {integrity: sha512-aZYZVHLUXZ2gbBot+i+zOJrks1WaiI95lvZCn1sKfcw6MtSSlYC8uDX8sTzQvAsQ8epHoP84UNvAIT0KVGOGqw==} + engines: {node: '>=14.18.0'} + + '@inquirer/prompts@2.3.1': + resolution: {integrity: sha512-YQeBFzIE+6fcec5N/U2mSz+IcKEG4wtGDwF7MBLIDgITWzB3o723JpKJ1rxWqdCvTXkYE+gDXK/seSN6omo3DQ==} + engines: {node: '>=14.18.0'} + + '@inquirer/rawlist@1.2.16': + resolution: {integrity: sha512-pZ6TRg2qMwZAOZAV6TvghCtkr53dGnK29GMNQ3vMZXSNguvGqtOVc4j/h1T8kqGJFagjyfBZhUPGwNS55O5qPQ==} + engines: {node: '>=14.18.0'} + + '@inquirer/select@1.3.3': + resolution: {integrity: sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg==} + engines: {node: '>=14.18.0'} + + '@inquirer/type@1.2.0': + resolution: {integrity: sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA==} + engines: {node: '>=18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.22': + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsii/check-node@1.94.0': + resolution: {integrity: sha512-46W+V1oTFvF9ZpKpPYy//1WUmhZ8AD8O0ElmQtv9mundLHccZm+q7EmCYhozr7rlK5uSjU9/WHfbIx2DwynuJw==} + engines: {node: '>= 14.17.0'} + + '@jsii/spec@1.94.0': + resolution: {integrity: sha512-ur1aUMPsdZgflUIZC4feyJzrkGYzvtiIJxRowkSxr7Ip/sLCKvi61dvImWtJY9ZhEAl7Kiq7I/R32WVyxW0JrQ==} + engines: {node: '>= 14.17.0'} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/rollup-android-arm-eabi@4.12.0': + resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.12.0': + resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.12.0': + resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.12.0': + resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.12.0': + resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.12.0': + resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.12.0': + resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.12.0': + resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.12.0': + resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.12.0': + resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.12.0': + resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.12.0': + resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.12.0': + resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} + cpu: [x64] + os: [win32] + + '@sentry-internal/tracing@7.101.1': + resolution: {integrity: sha512-ihjWG8x4x0ozx6t+EHoXLKbsPrgzYLCpeBLWyS+M6n3hn6cmHM76c8nZw3ldhUQi5UYL3LFC/JZ50b4oSxtlrg==} + engines: {node: '>=8'} + + '@sentry/core@7.101.1': + resolution: {integrity: sha512-XSmXXeYT1d4O14eDF3OXPJFUgaN2qYEeIGUztqPX9nBs9/ij8y/kZOayFqlIMnfGvjOUM+63sy/2xDBOpFn6ug==} + engines: {node: '>=8'} + + '@sentry/node@7.101.1': + resolution: {integrity: sha512-iXSxUT6Zbt/KUY0+fRcW5II6Tgp2zdTfhBW+fQuDt/UUZt7Ypvb+6n4U2oom3LJfttmD7mdjQuT4+vsNImDjTQ==} + engines: {node: '>=8'} + + '@sentry/types@7.101.1': + resolution: {integrity: sha512-bwtkQvrCZ6JGc7vqX7TEAKBgkbQFORt84FFS3JQQb8G3efTt9fZd2ReY4buteKQdlALl8h1QWVngTLmI+kyUuw==} + engines: {node: '>=8'} + + '@sentry/utils@7.101.1': + resolution: {integrity: sha512-Nrg0nrEI3nrOCd9SLJ/WGzxS5KMQE4cryLOvrDcHJRWpsSyGBF1hLLerk84Nsw/0myMsn7zTYU+xoq7idNsX5A==} + engines: {node: '>=8'} + + '@smithy/abort-controller@2.1.1': + resolution: {integrity: sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==} + engines: {node: '>=14.0.0'} + + '@smithy/config-resolver@2.1.1': + resolution: {integrity: sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==} + engines: {node: '>=14.0.0'} + + '@smithy/core@1.3.2': + resolution: {integrity: sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==} + engines: {node: '>=14.0.0'} + + '@smithy/credential-provider-imds@2.2.1': + resolution: {integrity: sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==} + engines: {node: '>=14.0.0'} + + '@smithy/eventstream-codec@2.1.1': + resolution: {integrity: sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==} + + '@smithy/fetch-http-handler@2.4.1': + resolution: {integrity: sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==} + + '@smithy/hash-node@2.1.1': + resolution: {integrity: sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==} + engines: {node: '>=14.0.0'} + + '@smithy/invalid-dependency@2.1.1': + resolution: {integrity: sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==} + + '@smithy/is-array-buffer@2.1.1': + resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} + engines: {node: '>=14.0.0'} + + '@smithy/middleware-content-length@2.1.1': + resolution: {integrity: sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==} + engines: {node: '>=14.0.0'} + + '@smithy/middleware-endpoint@2.4.1': + resolution: {integrity: sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==} + engines: {node: '>=14.0.0'} + + '@smithy/middleware-retry@2.1.1': + resolution: {integrity: sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==} + engines: {node: '>=14.0.0'} + + '@smithy/middleware-serde@2.1.1': + resolution: {integrity: sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==} + engines: {node: '>=14.0.0'} + + '@smithy/middleware-stack@2.1.1': + resolution: {integrity: sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==} + engines: {node: '>=14.0.0'} + + '@smithy/node-config-provider@2.2.1': + resolution: {integrity: sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==} + engines: {node: '>=14.0.0'} + + '@smithy/node-http-handler@2.3.1': + resolution: {integrity: sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==} + engines: {node: '>=14.0.0'} + + '@smithy/property-provider@2.1.1': + resolution: {integrity: sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==} + engines: {node: '>=14.0.0'} + + '@smithy/protocol-http@3.1.1': + resolution: {integrity: sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==} + engines: {node: '>=14.0.0'} + + '@smithy/querystring-builder@2.1.1': + resolution: {integrity: sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==} + engines: {node: '>=14.0.0'} + + '@smithy/querystring-parser@2.1.1': + resolution: {integrity: sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==} + engines: {node: '>=14.0.0'} + + '@smithy/service-error-classification@2.1.1': + resolution: {integrity: sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==} + engines: {node: '>=14.0.0'} + + '@smithy/shared-ini-file-loader@2.3.1': + resolution: {integrity: sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==} + engines: {node: '>=14.0.0'} + + '@smithy/signature-v4@2.1.1': + resolution: {integrity: sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==} + engines: {node: '>=14.0.0'} + + '@smithy/smithy-client@2.3.1': + resolution: {integrity: sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==} + engines: {node: '>=14.0.0'} + + '@smithy/types@2.9.1': + resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==} + engines: {node: '>=14.0.0'} + + '@smithy/url-parser@2.1.1': + resolution: {integrity: sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==} + + '@smithy/util-base64@2.1.1': + resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} + engines: {node: '>=14.0.0'} + + '@smithy/util-body-length-browser@2.1.1': + resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} + + '@smithy/util-body-length-node@2.2.1': + resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@2.1.1': + resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} + engines: {node: '>=14.0.0'} + + '@smithy/util-config-provider@2.2.1': + resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} + engines: {node: '>=14.0.0'} + + '@smithy/util-defaults-mode-browser@2.1.1': + resolution: {integrity: sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@2.2.0': + resolution: {integrity: sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@1.1.1': + resolution: {integrity: sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==} + engines: {node: '>= 14.0.0'} + + '@smithy/util-hex-encoding@2.1.1': + resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} + engines: {node: '>=14.0.0'} + + '@smithy/util-middleware@2.1.1': + resolution: {integrity: sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-retry@2.1.1': + resolution: {integrity: sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==} + engines: {node: '>= 14.0.0'} + + '@smithy/util-stream@2.1.1': + resolution: {integrity: sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==} + engines: {node: '>=14.0.0'} + + '@smithy/util-uri-escape@2.1.1': + resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@2.1.1': + resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-waiter@2.1.1': + resolution: {integrity: sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==} + engines: {node: '>=14.0.0'} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + + '@types/mute-stream@0.0.1': + resolution: {integrity: sha512-0yQLzYhCqGz7CQPE3iDmYjhb7KMBFOP+tBkyw+/Y2YyDI5wpS7itXXxneN1zSsUwWx3Ji6YiVYrhAnpQGS/vkw==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@16.18.23': + resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} + + '@types/node@18.19.17': + resolution: {integrity: sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==} + + '@types/node@20.11.19': + resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/semver@7.5.7': + resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@types/yoga-layout@1.9.2': + resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitest/coverage-v8@2.1.0': + resolution: {integrity: sha512-yqCkr2nrV4o58VcVMxTVkS6Ggxzy7pmSD8JbTbhbH5PsQfUIES1QT716VUzo33wf2lX9EcWYdT3Vl2MMmjR59g==} + peerDependencies: + '@vitest/browser': 2.1.0 + vitest: 2.1.0 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@2.1.0': + resolution: {integrity: sha512-N3/xR4fSu0+6sVZETEtPT1orUs2+Y477JOXTcU3xKuu3uBlsgbD7/7Mz2LZ1Jr1XjwilEWlrIgSCj4N1+5ZmsQ==} + + '@vitest/mocker@2.1.0': + resolution: {integrity: sha512-ZxENovUqhzl+QiOFpagiHUNUuZ1qPd5yYTCYHomGIZOFArzn4mgX2oxZmiAItJWAaXHG6bbpb/DpSPhlk5DgtA==} + peerDependencies: + '@vitest/spy': 2.1.0 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.0': + resolution: {integrity: sha512-7sxf2F3DNYatgmzXXcTh6cq+/fxwB47RIQqZJFoSH883wnVAoccSRT6g+dTKemUBo8Q5N4OYYj1EBXLuRKvp3Q==} + + '@vitest/runner@2.1.0': + resolution: {integrity: sha512-D9+ZiB8MbMt7qWDRJc4CRNNUlne/8E1X7dcKhZVAbcOKG58MGGYVDqAq19xlhNfMFZsW0bpVKgztBwks38Ko0w==} + + '@vitest/snapshot@2.1.0': + resolution: {integrity: sha512-x69CygGMzt9VCO283K2/FYQ+nBrOj66OTKpsPykjCR4Ac3lLV+m85hj9reaIGmjBSsKzVvbxWmjWE3kF5ha3uQ==} + + '@vitest/spy@2.1.0': + resolution: {integrity: sha512-IXX5NkbdgTYTog3F14i2LgnBc+20YmkXMx0IWai84mcxySUDRgm0ihbOfR4L0EVRBDFG85GjmQQEZNNKVVpkZw==} + + '@vitest/utils@2.1.0': + resolution: {integrity: sha512-rreyfVe0PuNqJfKYUwfPDfi6rrp0VSu0Wgvp5WBqJonP+4NvXHk48X6oBam1Lj47Hy6jbJtnMj3OcRdrkTP0tA==} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arr-rotate@1.0.0: + resolution: {integrity: sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==} + engines: {node: '>=4'} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + + available-typed-arrays@1.0.6: + resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + engines: {node: '>= 0.4'} + + aws-cdk-lib@2.158.0: + resolution: {integrity: sha512-Pl9CCLM+XRTy6nyyRJM1INEMtwIlZOib0FWyq9i9E388vurw7sNVJ6tAsfLpGIOLHsFQCbF4f6OZ0KSVxmMaiA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + constructs: ^10.0.0 + bundledDependencies: + - '@balena/dockerignore' + - case + - fs-extra + - ignore + - jsonschema + - minimatch + - punycode + - semver + - table + - yaml + - mime-types + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + + cdktf-cli@0.18.2: + resolution: {integrity: sha512-Href8hApBsCuvLz1bOiV5t13gkTbl4O457CeiBQmEjfFLg5myluA2nSMBSgCo0JGd/89sCbQXt1MdQU577qM2Q==} + hasBin: true + + cdktf@0.18.2: + resolution: {integrity: sha512-ohCsfFwEjXbF4bGbzkx/YB/aq6spceAPtKBXfdF/kNjUx1hVH28lQDS5ykJbnxAAnvrUA8FWz034buun7uPrdQ==} + peerDependencies: + constructs: ^10.0.25 + bundledDependencies: + - archiver + - json-stable-stringify + - semver + + cdktf@0.20.8: + resolution: {integrity: sha512-O4O5h0b1E6scc/tqq9EUIQGDbPmdrCQpdkPdbDtUHHzhZGtmFpIMc5MgP1SgB+EzAutnG2oUDefjCqWMnhDe9A==} + peerDependencies: + constructs: ^10.3.0 + bundledDependencies: + - archiver + - json-stable-stringify + - semver + + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.7.0: + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + engines: {node: '>=6'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + code-excerpt@3.0.0: + resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} + engines: {node: '>=10'} + + codemaker@1.94.0: + resolution: {integrity: sha512-V+896C7RojQVfG0UlOXaFfVVxmFb08rPtJvzcxhdJfowc2o6xGwGG0OpWSLHy6fQrmt4BxLXnKZ6Xeuqt4aKjw==} + engines: {node: '>= 14.17.0'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commonmark@0.30.0: + resolution: {integrity: sha512-j1yoUo4gxPND1JWV9xj5ELih0yMv1iCWDG6eEQIPLSWLxzCXiFoyS7kvB+WwU+tZMf4snwJMMtaubV0laFpiBA==} + hasBin: true + + commonmark@0.31.0: + resolution: {integrity: sha512-nuDsQ34gjmgAqjyIz6mbRWBW/XPE9wsBempAMBk2V/AA88ekztjTM46oi07J6c6Y/2Y8TdYCZi9L0pIBt/oMZw==} + hasBin: true + + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + constructs@10.3.0: + resolution: {integrity: sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==} + engines: {node: '>= 16.14.0'} + + convert-to-spaces@1.0.2: + resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==} + engines: {node: '>= 4'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + + csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + + csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + + csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-indent@5.0.0: + resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} + engines: {node: '>=4'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + + detect-newline@2.1.0: + resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==} + engines: {node: '>=0.10.0'} + + detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + downlevel-dts@0.11.0: + resolution: {integrity: sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==} + hasBin: true + + dprint@0.35.4: + resolution: {integrity: sha512-bCfS1kjmNgCWZ6/TQzcyz30jQpQ8/yHe7cN04cL9VRnC3AgtAyfXPMafYuR5ALNbndwkK/mEJ+Nh+Ec4lFjszA==} + hasBin: true + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@2.0.3: + resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} + + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.22.4: + resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphology-types@0.24.7: + resolution: {integrity: sha512-tdcqOOpwArNjEr0gNQKCXwaNCWnQJrog14nJNQPeemcLnXQUUGrsCWpWkVKt46zLjcS6/KGoayeJfHHyPDlvwA==} + + graphology@0.25.4: + resolution: {integrity: sha512-33g0Ol9nkWdD6ulw687viS8YJQBxqG5LWII6FI6nul0pq6iM2t5EKquOTFDbyTblRB3O9I+7KX4xI8u5ffekAQ==} + peerDependencies: + graphology-types: '>=0.24.0' + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ink-select-input@4.2.2: + resolution: {integrity: sha512-E5AS2Vnd4CSzEa7Rm+hG47wxRQo1ASfh4msKxO7FHmn/ym+GKSSsFIfR+FonqjKNDPXYJClw8lM47RdN3Pi+nw==} + engines: {node: '>=10'} + peerDependencies: + ink: ^3.0.5 + react: ^16.5.2 || ^17.0.0 + + ink-spinner@4.0.3: + resolution: {integrity: sha512-uJ4nbH00MM9fjTJ5xdw0zzvtXMkeGb0WV6dzSWvFv2/+ks6FIhpkt+Ge/eLdh0Ah6Vjw5pLMyNfoHQpRDRVFbQ==} + engines: {node: '>=10'} + peerDependencies: + ink: '>=3.0.5' + react: '>=16.8.2' + + ink-table@3.1.0: + resolution: {integrity: sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==} + peerDependencies: + ink: '>=3.0.0' + react: '>=16.8.0' + + ink-testing-library@2.1.0: + resolution: {integrity: sha512-7TNlOjJlJXB33vG7yVa+MMO7hCjaC1bCn+zdpSjknWoLbOWMaFdKc7LJvqVkZ0rZv2+akhjXPrcR/dbxissjUw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + ink-use-stdout-dimensions@1.0.5: + resolution: {integrity: sha512-rVsqnw4tQEAJUoknU09+zHdDf30GJdkumkHr0iz/TOYMYEZJkYqziQSGJAM+Z+M603EDfO89+Nxyn/Ko2Zknfw==} + peerDependencies: + ink: '>=2.0.0' + react: '>=16.0.0' + + ink@3.2.0: + resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '>=16.8.0' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-valid-domain@0.1.6: + resolution: {integrity: sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==} + + is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsii-pacmak@1.94.0: + resolution: {integrity: sha512-L5s3RZ0AOx1XfAhXsEjyeCteVrw6nwJLynL+t93eXVDcw7NFT7S0fCFXzQ4lpYQ23P/yVpSIy32J3zpUOf4uDQ==} + engines: {node: '>= 14.17.0'} + hasBin: true + + jsii-reflect@1.94.0: + resolution: {integrity: sha512-Oupkl5iFFeq3GJ2a/fQNMnsXRMISmEKklPHksYs/l6MqrNFUQ5kg9oj1qxjSyaCpvvXBI8Eh7y73dqNE8w4cVw==} + engines: {node: '>= 14.17.0'} + hasBin: true + + jsii-rosetta@1.94.0: + resolution: {integrity: sha512-FLQAxdZJsH0sg87S9u/e4+HDGr6Pth+UZ4ool3//MFMsw+C0iwagAlNVhZuyohMdlvumpQeg9Gr+FvoBZFoBrA==} + engines: {node: '>= 14.17.0'} + hasBin: true + + jsii-rosetta@5.3.15: + resolution: {integrity: sha512-RP0jCHdp3M1FbInr1dVB3Q/WKLTupR7KHTNlmWuVURcURK6LKgRrXIwwo/k+fEmB+9WoQs/WUvNpq9bKUrsu8A==} + engines: {node: '>= 18.12.0'} + hasBin: true + + jsii-srcmak@0.1.1038: + resolution: {integrity: sha512-aJ2tZcc81z4iDJLIKDfT5icLwZTgz4OC+iPn6REeWRqgV9eH+cCjV/rhazSYdgnk+ZKjT5IRfF7D6/3Usq4BJw==} + hasBin: true + + jsii@1.94.0: + resolution: {integrity: sha512-20KlKsBZlo7Ti6vfqTpKfZXnT2MKRGfh5bIPrwDODoCQmHNATfPFt1fs5+Wqd7xdrEj+A+sLAtjfHTw6i+sxCw==} + engines: {node: '>= 14.17.0'} + hasBin: true + + jsii@5.3.18: + resolution: {integrity: sha512-1BQT5rMDNiyZp7u5461EQQuEOnPJv0UEFlTHgDZJqqCeh1OquTpB0fYFfpJnsvl4C1aleBYo3f0QMzvV7wLVjw==} + engines: {node: '>= 18.12.0'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mixme@0.5.10: + resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} + engines: {node: '>= 8.0.0'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + ncp@2.0.0: + resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-abi@3.54.0: + resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} + engines: {node: '>=10'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oo-ascii-tree@1.94.0: + resolution: {integrity: sha512-i6UllReifEW2InBJHVFJNxrledRp3yr/yKVbpDmgWTguRe8/7BtBK3njzjvZNcPLEAtiWWxr0o9SpwYjapmTOw==} + engines: {node: '>= 14.17.0'} + + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-gitignore@1.0.1: + resolution: {integrity: sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + patch-console@1.0.0: + resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} + engines: {node: '>=10'} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pidusage@3.0.2: + resolution: {integrity: sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==} + engines: {node: '>=10'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} + + prebuild-install@7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + + preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + engines: {node: '>=10'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-devtools-core@4.28.5: + resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} + + react-reconciler@0.26.2: + resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^17.0.2 + + react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + reserved-words@0.1.2: + resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@4.12.0: + resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + + scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + + semver-intersect@1.5.0: + resolution: {integrity: sha512-BDjWX7yCC0haX4W/zrnV2JaMpVirwaEkGOBmgRQtH++F1N3xl9v7k9H44xfTqwl+yLNNSbMKosoVSTIiJVQ2Pw==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel@1.0.5: + resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + + sort-json@2.0.1: + resolution: {integrity: sha512-s8cs2bcsQCzo/P2T/uoU6Js4dS/jnX8+4xunziNoq9qmSpZNCrRIAIvp4avsz0ST18HycV4z/7myJ7jsHWB2XQ==} + hasBin: true + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + + spdx-license-list@6.8.0: + resolution: {integrity: sha512-5UdM7r9yJ1EvsPQZWfa41AZjLQngl9iMMysm9XBW7Lqhq7aF8cllfqjS+rFCHB8FFMGSM0yFWue2LUV9mR0QzQ==} + engines: {node: '>=8'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sscaff@1.2.274: + resolution: {integrity: sha512-sztRa50SL1LVxZnF1au6QT1SC2z0S1oEOyi2Kpnlg6urDns93aL32YxiJcNkLcY+VHFtVqm/SRv4cb+6LeoBQA==} + engines: {node: '>= 12.13.0'} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + stream-buffers@3.0.2: + resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==} + engines: {node: '>= 0.10.0'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.8.0: + resolution: {integrity: sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==} + + stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.repeat@0.2.0: + resolution: {integrity: sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA==} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + + string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + ts-api-utils@1.2.1: + resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tty-table@4.2.3: + resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} + engines: {node: '>=8.0.0'} + hasBin: true + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.12.0: + resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} + engines: {node: '>=10'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@4.10.2: + resolution: {integrity: sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.1: + resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typescript@3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.7.0-dev.20240912: + resolution: {integrity: sha512-mDTEqq6tLag5w75BeGd1g9t64z7dlhTl/3x0CP1bG/638MXiBbvCoI5sbkcEY0UoYUxP7EeIi7ZI6HBd9lDPFw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vite-node@2.1.0: + resolution: {integrity: sha512-+ybYqBVUjYyIscoLzMWodus2enQDZOpGhcU6HdOVD6n8WZdk12w1GFL3mbnxLs7hPtRtqs1Wo5YF6/Tsr6fmhg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.1.3: + resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.0: + resolution: {integrity: sha512-XuuEeyNkqbfr0FtAvd9vFbInSSNY1ykCQTYQ0sj9wPy4hx+1gR7gqVNdW0AX2wrrM1wWlN5fnJDjF9xG6mYRSQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.0 + '@vitest/ui': 2.1.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + + which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xstate@4.38.3: + resolution: {integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoga-layout-prebuilt@1.10.0: + resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} + engines: {node: '>=8'} + + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + + zod@1.11.17: + resolution: {integrity: sha512-UzIwO92D0dSFwIRyyqAfRXICITLjF0IP8tRbEK/un7adirMssWZx8xF/1hZNE7t61knWZ+lhEuUvxlu2MO8qqA==} + + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - dev: true + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - /@aws-cdk/asset-awscli-v1@2.2.202: - resolution: {integrity: sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==} - dev: true + '@aws-cdk/asset-awscli-v1@2.2.202': {} - /@aws-cdk/asset-kubectl-v20@2.1.2: - resolution: {integrity: sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==} - dev: true + '@aws-cdk/asset-kubectl-v20@2.1.2': {} - /@aws-cdk/asset-node-proxy-agent-v6@2.0.3: - resolution: {integrity: sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg==} - dev: true + '@aws-cdk/asset-node-proxy-agent-v6@2.1.0': {} - /@aws-crypto/crc32@3.0.0: - resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + '@aws-cdk/cloud-assembly-schema@36.0.25': {} + + '@aws-crypto/crc32@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 '@aws-sdk/types': 3.515.0 tslib: 1.14.1 - dev: true - /@aws-crypto/ie11-detection@3.0.0: - resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + '@aws-crypto/ie11-detection@3.0.0': dependencies: tslib: 1.14.1 - dev: true - /@aws-crypto/sha256-browser@3.0.0: - resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + '@aws-crypto/sha256-browser@3.0.0': dependencies: '@aws-crypto/ie11-detection': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -129,33 +3454,24 @@ packages: '@aws-sdk/util-locate-window': 3.495.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - dev: true - /@aws-crypto/sha256-js@3.0.0: - resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + '@aws-crypto/sha256-js@3.0.0': dependencies: '@aws-crypto/util': 3.0.0 '@aws-sdk/types': 3.515.0 tslib: 1.14.1 - dev: true - /@aws-crypto/supports-web-crypto@3.0.0: - resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + '@aws-crypto/supports-web-crypto@3.0.0': dependencies: tslib: 1.14.1 - dev: true - /@aws-crypto/util@3.0.0: - resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + '@aws-crypto/util@3.0.0': dependencies: '@aws-sdk/types': 3.515.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 - dev: true - /@aws-sdk/client-cloudformation@3.515.0: - resolution: {integrity: sha512-wRZTIGfKeuSlPPPb5aj3PahdDKNfLfz27VS8rAcICzRgryLg7HmTKwhxXLb6jG+AFylODedxWtpq+QflM2RghA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/client-cloudformation@3.515.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -202,13 +3518,8 @@ packages: uuid: 9.0.1 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/client-sso-oidc@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-zACa8LNlPUdlNUBqQRf5a3MfouLNtcBfm84v2c8M976DwJrMGONPe1QjyLLsD38uESQiXiVQRruj/b000iMXNw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.515.0 + '@aws-sdk/client-sso-oidc@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -252,11 +3563,8 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/client-sso@3.515.0: - resolution: {integrity: sha512-4oGBLW476zmkdN98lAns3bObRNO+DLOfg4MDUSR6l6GYBV/zGAtoy2O/FhwYKgA2L5h2ZtElGopLlk/1Q0ePLw==} - engines: {node: '>=14.0.0'} + '@aws-sdk/client-sso@3.515.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -298,13 +3606,8 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/client-sts@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-ScYuvaIDgip3atOJIA1FU2n0gJkEdveu1KrrCPathoUCV5zpK8qQmO/n+Fj/7hKFxeKdFbB+4W4CsJWYH94nlg==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@aws-sdk/credential-provider-node': ^3.515.0 + '@aws-sdk/client-sts@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -348,11 +3651,8 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/core@3.513.0: - resolution: {integrity: sha512-L+9DL4apWuqNKVOMJ8siAuWoRM9rZf9w1iPv8S2o83WO2jVK7E/m+rNW1dFo9HsA5V1ccDl2H2qLXx24HiHmOw==} - engines: {node: '>=14.0.0'} + '@aws-sdk/core@3.513.0': dependencies: '@smithy/core': 1.3.2 '@smithy/protocol-http': 3.1.1 @@ -360,21 +3660,15 @@ packages: '@smithy/smithy-client': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/credential-provider-env@3.515.0: - resolution: {integrity: sha512-45vxdyqhTAaUMERYVWOziG3K8L2TV9G4ryQS/KZ84o7NAybE9GMdoZRVmGHAO7mJJ1wQiYCM/E+i5b3NW9JfNA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-env@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/property-provider': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/credential-provider-http@3.515.0: - resolution: {integrity: sha512-Ba6FXK77vU4WyheiamNjEuTFmir0eAXuJGPO27lBaA8g+V/seXGHScsbOG14aQGDOr2P02OPwKGZrWWA7BFpfQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-http@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/fetch-http-handler': 2.4.1 @@ -385,11 +3679,8 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-stream': 2.1.1 tslib: 2.6.2 - dev: true - /@aws-sdk/credential-provider-ini@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-ouDlNZdv2TKeVEA/YZk2+XklTXyAAGdbWnl4IgN9ItaodWI+lZjdIoNC8BAooVH+atIV/cZgoGTGQL7j2TxJ9A==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-ini@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) '@aws-sdk/credential-provider-env': 3.515.0 @@ -405,11 +3696,8 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true - /@aws-sdk/credential-provider-node@3.515.0: - resolution: {integrity: sha512-Y4kHSpbxksiCZZNcvsiKUd8Fb2XlyUuONEwqWFNL82ZH6TCCjBGS31wJQCSxBHqYcOL3tiORUEJkoO7uS30uQA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-node@3.515.0': dependencies: '@aws-sdk/credential-provider-env': 3.515.0 '@aws-sdk/credential-provider-http': 3.515.0 @@ -425,22 +3713,16 @@ packages: tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true - /@aws-sdk/credential-provider-process@3.515.0: - resolution: {integrity: sha512-pSjiOA2FM63LHRKNDvEpBRp80FVGT0Mw/gzgbqFXP+sewk0WVonYbEcMDTJptH3VsLPGzqH/DQ1YL/aEIBuXFQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-process@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/property-provider': 2.1.1 '@smithy/shared-ini-file-loader': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/credential-provider-sso@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-j7vUkiSmuhpBvZYoPTRTI4ePnQbiZMFl6TNhg9b9DprC1zHkucsZnhRhqjOVlrw/H6J4jmcPGcHHTZ5WQNI5xQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-sso@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-sdk/client-sso': 3.515.0 '@aws-sdk/token-providers': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) @@ -452,11 +3734,8 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true - /@aws-sdk/credential-provider-web-identity@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-66+2g4z3fWwdoGReY8aUHvm6JrKZMTRxjuizljVmMyOBttKPeBYXvUTop/g3ZGUx1f8j+C5qsGK52viYBvtjuQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/credential-provider-web-identity@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-sdk/client-sts': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) '@aws-sdk/types': 3.515.0 @@ -466,51 +3745,36 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true - /@aws-sdk/middleware-host-header@3.515.0: - resolution: {integrity: sha512-I1MwWPzdRKM1luvdDdjdGsDjNVPhj9zaIytEchjTY40NcKOg+p2evLD2y69ozzg8pyXK63r8DdvDGOo9QPuh0A==} - engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-host-header@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/middleware-logger@3.515.0: - resolution: {integrity: sha512-qXomJzg2m/5seQOxHi/yOXOKfSjwrrJSmEmfwJKJyQgdMbBcjz3Cz0H/1LyC6c5hHm6a/SZgSTzDAbAoUmyL+Q==} - engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-logger@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/middleware-recursion-detection@3.515.0: - resolution: {integrity: sha512-dokHLbTV3IHRIBrw9mGoxcNTnQsjlm7TpkJhPdGT9T4Mq399EyQo51u6IsVMm07RXLl2Zw7u+u9p+qWBFzmFRA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-recursion-detection@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/middleware-user-agent@3.515.0: - resolution: {integrity: sha512-nOqZjGA/GkjuJ5fUshec9Fv6HFd7ovOTxMJbw3MfAhqXuVZ6dKF41lpVJ4imNsgyFt3shUg9WDY8zGFjlYMB3g==} - engines: {node: '>=14.0.0'} + '@aws-sdk/middleware-user-agent@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@aws-sdk/util-endpoints': 3.515.0 '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/region-config-resolver@3.515.0: - resolution: {integrity: sha512-RIRx9loxMgEAc/r1wPfnfShOuzn4RBi8pPPv6/jhhITEeMnJe6enAh2k5y9DdiVDDgCWZgVFSv0YkAIfzAFsnQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/region-config-resolver@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/node-config-provider': 2.2.1 @@ -518,11 +3782,8 @@ packages: '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true - /@aws-sdk/token-providers@3.515.0(@aws-sdk/credential-provider-node@3.515.0): - resolution: {integrity: sha512-MQuf04rIcTXqwDzmyHSpFPF1fKEzRl64oXtCRUF3ddxTdK6wxXkePfK6wNCuL+GEbEcJAoCtIGIRpzGPJvQjHA==} - engines: {node: '>=14.0.0'} + '@aws-sdk/token-providers@3.515.0(@aws-sdk/credential-provider-node@3.515.0)': dependencies: '@aws-sdk/client-sso-oidc': 3.515.0(@aws-sdk/credential-provider-node@3.515.0) '@aws-sdk/types': 3.515.0 @@ -533,139 +3794,100 @@ packages: transitivePeerDependencies: - '@aws-sdk/credential-provider-node' - aws-crt - dev: true - /@aws-sdk/types@3.515.0: - resolution: {integrity: sha512-B3gUpiMlpT6ERaLvZZ61D0RyrQPsFYDkCncLPVkZOKkCOoFU46zi1o6T5JcYiz8vkx1q9RGloQ5exh79s5pU/w==} - engines: {node: '>=14.0.0'} + '@aws-sdk/types@3.515.0': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/util-endpoints@3.515.0: - resolution: {integrity: sha512-UJi+jdwcGFV/F7d3+e2aQn5yZOVpDiAgfgNhPnEtgV0WozJ5/ZUeZBgWvSc/K415N4A4D/9cbBc7+I+35qzcDQ==} - engines: {node: '>=14.0.0'} + '@aws-sdk/util-endpoints@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/types': 2.9.1 '@smithy/util-endpoints': 1.1.1 tslib: 2.6.2 - dev: true - /@aws-sdk/util-locate-window@3.495.0: - resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} - engines: {node: '>=14.0.0'} + '@aws-sdk/util-locate-window@3.495.0': dependencies: tslib: 2.6.2 - dev: true - /@aws-sdk/util-user-agent-browser@3.515.0: - resolution: {integrity: sha512-pTWQb0JCafTmLHLDv3Qqs/nAAJghcPdGQIBpsCStb0YEzg3At/dOi2AIQ683yYnXmeOxLXJDzmlsovfVObJScw==} + '@aws-sdk/util-user-agent-browser@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/types': 2.9.1 bowser: 2.11.0 tslib: 2.6.2 - dev: true - /@aws-sdk/util-user-agent-node@3.515.0: - resolution: {integrity: sha512-A/KJ+/HTohHyVXLH+t/bO0Z2mPrQgELbQO8tX+B2nElo8uklj70r5cT7F8ETsI9oOy+HDVpiL5/v45ZgpUOiPg==} - engines: {node: '>=14.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true + '@aws-sdk/util-user-agent-node@3.515.0': dependencies: '@aws-sdk/types': 3.515.0 '@smithy/node-config-provider': 2.2.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@aws-sdk/util-utf8-browser@3.259.0: - resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + '@aws-sdk/util-utf8-browser@3.259.0': dependencies: tslib: 2.6.2 - dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.23.5': dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.23.6': dependencies: '@babel/types': 7.23.9 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 - dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.23.4': {} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.24.8': {} - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.23.9': dependencies: '@babel/types': 7.23.9 - dev: true - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} - engines: {node: '>=6.9.0'} + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/runtime@7.23.9': dependencies: regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} - engines: {node: '>=6.9.0'} + '@babel/template@7.23.9': dependencies: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - dev: true - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} - engines: {node: '>=6.9.0'} + '@babel/types@7.23.9': dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 - /@cdktf/cli-core@0.18.2(debug@4.3.4)(react@17.0.2): - resolution: {integrity: sha512-deJzuZIJ829tzx0X1t1E1n6jeSCal2SoR1v9r9F6EFTlfAhU3uccj6z6e8RalnLKh4SMJWRtN8PsWzuGaBEN2Q==} + '@bcoe/v8-coverage@0.2.3': {} + + '@cdktf/cli-core@0.18.2(debug@4.3.4)(react@17.0.2)': dependencies: '@cdktf/commons': 0.18.2(debug@4.3.4) '@cdktf/hcl2cdk': 0.18.2(debug@4.3.4) @@ -690,10 +3912,10 @@ packages: https-proxy-agent: 5.0.1 indent-string: 4.0.0 ink: 3.2.0(react@17.0.2) - ink-select-input: 4.2.2(ink@3.2.0)(react@17.0.2) - ink-spinner: 4.0.3(ink@3.2.0)(react@17.0.2) + ink-select-input: 4.2.2(ink@3.2.0(react@17.0.2))(react@17.0.2) + ink-spinner: 4.0.3(ink@3.2.0(react@17.0.2))(react@17.0.2) ink-testing-library: 2.1.0 - ink-use-stdout-dimensions: 1.0.5(ink@3.2.0)(react@17.0.2) + ink-use-stdout-dimensions: 1.0.5(ink@3.2.0(react@17.0.2))(react@17.0.2) jsii: 5.3.18 jsii-pacmak: 1.94.0 jsii-srcmak: 0.1.1038 @@ -723,10 +3945,8 @@ packages: - react - supports-color - utf-8-validate - dev: true - /@cdktf/commons@0.18.2(debug@4.3.4): - resolution: {integrity: sha512-9jLT7K6bkGWdy8wRbpZfmAnzDPczV9NBpGIS3vsKJCZwoipccmG2LD12DlbM3610IHISksya2AQLlLmJMsTnmA==} + '@cdktf/commons@0.18.2(debug@4.3.4)': dependencies: '@sentry/node': 7.101.1 cdktf: 0.18.2(constructs@10.3.0) @@ -742,10 +3962,8 @@ packages: transitivePeerDependencies: - debug - supports-color - dev: true - /@cdktf/hcl2cdk@0.18.2(debug@4.3.4): - resolution: {integrity: sha512-/AdUWmg1EC++HrS2I/C8H3JV1m/JfK3ONGBY1efNlc3LO7TBKJssKWVBMtYp45IJD86m7rNBOeL1TD0AZ1KjrQ==} + '@cdktf/hcl2cdk@0.18.2(debug@4.3.4)': dependencies: '@babel/generator': 7.23.6 '@babel/template': 7.23.9 @@ -766,35 +3984,22 @@ packages: transitivePeerDependencies: - debug - supports-color - dev: true - /@cdktf/hcl2json@0.18.2: - resolution: {integrity: sha512-TSuIMet9RSuXUWPz40ed/W4WMu92aHVnJ44lB5nap9E1PE8brr7FhnW32dFOy9m2H8WU4GAfSQ0k3GW6JitSig==} + '@cdktf/hcl2json@0.18.2': dependencies: fs-extra: 11.2.0 - dev: true - /@cdktf/node-pty-prebuilt-multiarch@0.10.1-pre.10: - resolution: {integrity: sha512-5ysQrHJvqYLYg407KvaDNu+xx68ZGaqeF0SohXe5e4yNqJhPFPUQ536rkReQcPc2yZiF5PDmmvf5T9MOacHpSQ==} - requiresBuild: true + '@cdktf/node-pty-prebuilt-multiarch@0.10.1-pre.10': dependencies: nan: 2.18.0 prebuild-install: 7.1.1 - dev: true - /@cdktf/provider-aws@19.28.0(cdktf@0.20.8)(constructs@10.3.0): - resolution: {integrity: sha512-7VNR/KOUtRySdDw/pIT1ZAHI+fdWZvmHO5XI5GmejmKR3UAt+kvQIFzsKcBkyYzmJUkmwoyVnG/RykUS99nqUg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - cdktf: ^0.20.0 - constructs: ^10.3.0 + '@cdktf/provider-aws@19.33.0(cdktf@0.20.8(constructs@10.3.0))(constructs@10.3.0)': dependencies: cdktf: 0.20.8(constructs@10.3.0) constructs: 10.3.0 - dev: true - /@cdktf/provider-generator@0.18.2(debug@4.3.4): - resolution: {integrity: sha512-Qqfmwlz1t9Ie84CLkefxDR8a2bsacxbaEncO6NqzwYWaCu/K5TDDOqHjLKl1kv3mKjdZtJ0YLMJsMP0C49hKPg==} + '@cdktf/provider-generator@0.18.2(debug@4.3.4)': dependencies: '@cdktf/commons': 0.18.2(debug@4.3.4) '@cdktf/hcl2json': 0.18.2 @@ -807,20 +4012,16 @@ packages: transitivePeerDependencies: - debug - supports-color - dev: true - /@cdktf/provider-schema@0.18.2(debug@4.3.4): - resolution: {integrity: sha512-UB3oxmh0GJ/NeubDKjF+gT8bsh7kcT+lCbG0OZwXPlTKBuaDRuS2InkvcUAlvhC7ML1+DqpTl5PsAaowuW46uA==} + '@cdktf/provider-schema@0.18.2(debug@4.3.4)': dependencies: '@cdktf/commons': 0.18.2(debug@4.3.4) fs-extra: 11.2.0 transitivePeerDependencies: - debug - supports-color - dev: true - /@changesets/apply-release-plan@7.0.0: - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + '@changesets/apply-release-plan@7.0.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/config': 3.0.0 @@ -835,10 +4036,8 @@ packages: prettier: 2.8.8 resolve-from: 5.0.0 semver: 7.6.0 - dev: true - /@changesets/assemble-release-plan@6.0.0: - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + '@changesets/assemble-release-plan@6.0.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/errors': 0.2.0 @@ -846,17 +4045,12 @@ packages: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.0 - dev: true - /@changesets/changelog-git@0.2.0: - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-git@0.2.0': dependencies: '@changesets/types': 6.0.0 - dev: true - /@changesets/cli@2.27.1: - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} - hasBin: true + '@changesets/cli@2.27.1': dependencies: '@babel/runtime': 7.23.9 '@changesets/apply-release-plan': 7.0.0 @@ -890,10 +4084,8 @@ packages: spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.3 - dev: true - /@changesets/config@3.0.0: - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + '@changesets/config@3.0.0': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 @@ -902,26 +4094,20 @@ packages: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - dev: true - /@changesets/errors@0.2.0: - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@2.0.0: - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + '@changesets/get-dependents-graph@2.0.0': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 semver: 7.6.0 - dev: true - /@changesets/get-release-plan@4.0.0: - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + '@changesets/get-release-plan@4.0.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/assemble-release-plan': 6.0.0 @@ -930,14 +4116,10 @@ packages: '@changesets/read': 0.6.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - dev: true - /@changesets/get-version-range-type@0.4.0: - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: true + '@changesets/get-version-range-type@0.4.0': {} - /@changesets/git@3.0.0: - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@changesets/git@3.0.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/errors': 0.2.0 @@ -946,33 +4128,25 @@ packages: is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 - dev: true - /@changesets/logger@0.1.0: - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@changesets/logger@0.1.0': dependencies: chalk: 2.4.2 - dev: true - /@changesets/parse@0.4.0: - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@changesets/parse@0.4.0': dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - dev: true - /@changesets/pre@2.0.0: - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@changesets/pre@2.0.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: true - /@changesets/read@0.6.0: - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@changesets/read@0.6.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/git': 3.0.0 @@ -982,251 +4156,96 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: true - /@changesets/types@4.1.0: - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true + '@changesets/types@4.1.0': {} - /@changesets/types@6.0.0: - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: true + '@changesets/types@6.0.0': {} - /@changesets/write@0.3.0: - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + '@changesets/write@0.3.0': dependencies: '@babel/runtime': 7.23.9 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 - dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true + '@esbuild/aix-ppc64@0.19.12': optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm64@0.19.12': optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-arm@0.19.12': optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + '@esbuild/android-x64@0.19.12': optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-arm64@0.19.12': optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@esbuild/darwin-x64@0.19.12': optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + '@esbuild/freebsd-arm64@0.19.12': optional: true - - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + + '@esbuild/freebsd-x64@0.19.12': optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm64@0.19.12': optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-arm@0.19.12': optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ia32@0.19.12': optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-loong64@0.19.12': optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-mips64el@0.19.12': optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-ppc64@0.19.12': optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-riscv64@0.19.12': optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-s390x@0.19.12': optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@esbuild/linux-x64@0.19.12': optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + '@esbuild/netbsd-x64@0.19.12': optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + '@esbuild/openbsd-x64@0.19.12': optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + '@esbuild/sunos-x64@0.19.12': optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.19.12': optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.19.12': optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-x64@0.19.12': optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': dependencies: eslint: 8.56.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.10.0': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -1239,56 +4258,36 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.56.0': {} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true + '@humanwhocodes/object-schema@2.0.2': {} - /@inquirer/checkbox@1.5.2: - resolution: {integrity: sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==} - engines: {node: '>=14.18.0'} + '@inquirer/checkbox@1.5.2': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 figures: 3.2.0 - dev: true - /@inquirer/confirm@2.0.17: - resolution: {integrity: sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA==} - engines: {node: '>=14.18.0'} + '@inquirer/confirm@2.0.17': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 chalk: 4.1.2 - dev: true - /@inquirer/core@2.3.1: - resolution: {integrity: sha512-faYAYnIfdEuns3jGKykaog5oUqFiEVbCx9nXGZfUhyEEpKcHt5bpJfZTb3eOBQKo8I/v4sJkZeBHmFlSZQuBCw==} - engines: {node: '>=14.18.0'} + '@inquirer/core@2.3.1': dependencies: '@inquirer/type': 1.2.0 '@types/mute-stream': 0.0.1 @@ -1304,11 +4303,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /@inquirer/core@6.0.0: - resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} - engines: {node: '>=14.18.0'} + '@inquirer/core@6.0.0': dependencies: '@inquirer/type': 1.2.0 '@types/mute-stream': 0.0.4 @@ -1324,50 +4320,35 @@ packages: signal-exit: 4.1.0 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /@inquirer/editor@1.2.15: - resolution: {integrity: sha512-gQ77Ls09x5vKLVNMH9q/7xvYPT6sIs5f7URksw+a2iJZ0j48tVS6crLqm2ugG33tgXHIwiEqkytY60Zyh5GkJQ==} - engines: {node: '>=14.18.0'} + '@inquirer/editor@1.2.15': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 chalk: 4.1.2 external-editor: 3.1.0 - dev: true - /@inquirer/expand@1.1.16: - resolution: {integrity: sha512-TGLU9egcuo+s7PxphKUCnJnpCIVY32/EwPCLLuu+gTvYiD8hZgx8Z2niNQD36sa6xcfpdLY6xXDBiL/+g1r2XQ==} - engines: {node: '>=14.18.0'} + '@inquirer/expand@1.1.16': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 chalk: 4.1.2 figures: 3.2.0 - dev: true - /@inquirer/input@1.2.16: - resolution: {integrity: sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g==} - engines: {node: '>=14.18.0'} + '@inquirer/input@1.2.16': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 chalk: 4.1.2 - dev: true - /@inquirer/password@1.1.16: - resolution: {integrity: sha512-aZYZVHLUXZ2gbBot+i+zOJrks1WaiI95lvZCn1sKfcw6MtSSlYC8uDX8sTzQvAsQ8epHoP84UNvAIT0KVGOGqw==} - engines: {node: '>=14.18.0'} + '@inquirer/password@1.1.16': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - dev: true - /@inquirer/prompts@2.3.1: - resolution: {integrity: sha512-YQeBFzIE+6fcec5N/U2mSz+IcKEG4wtGDwF7MBLIDgITWzB3o723JpKJ1rxWqdCvTXkYE+gDXK/seSN6omo3DQ==} - engines: {node: '>=14.18.0'} + '@inquirer/prompts@2.3.1': dependencies: '@inquirer/checkbox': 1.5.2 '@inquirer/confirm': 2.0.17 @@ -1378,113 +4359,83 @@ packages: '@inquirer/password': 1.1.16 '@inquirer/rawlist': 1.2.16 '@inquirer/select': 1.3.3 - dev: true - /@inquirer/rawlist@1.2.16: - resolution: {integrity: sha512-pZ6TRg2qMwZAOZAV6TvghCtkr53dGnK29GMNQ3vMZXSNguvGqtOVc4j/h1T8kqGJFagjyfBZhUPGwNS55O5qPQ==} - engines: {node: '>=14.18.0'} + '@inquirer/rawlist@1.2.16': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 chalk: 4.1.2 - dev: true - /@inquirer/select@1.3.3: - resolution: {integrity: sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg==} - engines: {node: '>=14.18.0'} + '@inquirer/select@1.3.3': dependencies: '@inquirer/core': 6.0.0 '@inquirer/type': 1.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 figures: 3.2.0 - dev: true - /@inquirer/type@1.2.0: - resolution: {integrity: sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA==} - engines: {node: '>=18'} - dev: true + '@inquirer/type@1.2.0': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.22 - dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@jridgewell/set-array@1.1.2': {} - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.22': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jsii/check-node@1.94.0: - resolution: {integrity: sha512-46W+V1oTFvF9ZpKpPYy//1WUmhZ8AD8O0ElmQtv9mundLHccZm+q7EmCYhozr7rlK5uSjU9/WHfbIx2DwynuJw==} - engines: {node: '>= 14.17.0'} + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jsii/check-node@1.94.0': dependencies: chalk: 4.1.2 semver: 7.6.0 - dev: true - /@jsii/spec@1.94.0: - resolution: {integrity: sha512-ur1aUMPsdZgflUIZC4feyJzrkGYzvtiIJxRowkSxr7Ip/sLCKvi61dvImWtJY9ZhEAl7Kiq7I/R32WVyxW0JrQ==} - engines: {node: '>= 14.17.0'} + '@jsii/spec@1.94.0': dependencies: ajv: 8.12.0 - dev: true - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.23.9 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: '@babel/runtime': 7.23.9 '@changesets/types': 4.1.0 @@ -1492,205 +4443,99 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': 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'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@rollup/rollup-android-arm-eabi@4.12.0: - resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm-eabi@4.12.0': optional: true - /@rollup/rollup-android-arm64@4.12.0: - resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + '@rollup/rollup-android-arm64@4.12.0': optional: true - /@rollup/rollup-darwin-arm64@4.12.0: - resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-arm64@4.12.0': optional: true - /@rollup/rollup-darwin-x64@4.12.0: - resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + '@rollup/rollup-darwin-x64@4.12.0': optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.12.0: - resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm-gnueabihf@4.12.0': optional: true - /@rollup/rollup-linux-arm64-gnu@4.12.0: - resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-gnu@4.12.0': optional: true - /@rollup/rollup-linux-arm64-musl@4.12.0: - resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-arm64-musl@4.12.0': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.12.0: - resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.12.0': optional: true - /@rollup/rollup-linux-x64-gnu@4.12.0: - resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-gnu@4.12.0': optional: true - /@rollup/rollup-linux-x64-musl@4.12.0: - resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + '@rollup/rollup-linux-x64-musl@4.12.0': optional: true - /@rollup/rollup-win32-arm64-msvc@4.12.0: - resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-arm64-msvc@4.12.0': optional: true - /@rollup/rollup-win32-ia32-msvc@4.12.0: - resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-ia32-msvc@4.12.0': optional: true - /@rollup/rollup-win32-x64-msvc@4.12.0: - resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@rollup/rollup-win32-x64-msvc@4.12.0': optional: true - /@sentry-internal/tracing@7.101.1: - resolution: {integrity: sha512-ihjWG8x4x0ozx6t+EHoXLKbsPrgzYLCpeBLWyS+M6n3hn6cmHM76c8nZw3ldhUQi5UYL3LFC/JZ50b4oSxtlrg==} - engines: {node: '>=8'} + '@sentry-internal/tracing@7.101.1': dependencies: '@sentry/core': 7.101.1 '@sentry/types': 7.101.1 '@sentry/utils': 7.101.1 - dev: true - /@sentry/core@7.101.1: - resolution: {integrity: sha512-XSmXXeYT1d4O14eDF3OXPJFUgaN2qYEeIGUztqPX9nBs9/ij8y/kZOayFqlIMnfGvjOUM+63sy/2xDBOpFn6ug==} - engines: {node: '>=8'} + '@sentry/core@7.101.1': dependencies: '@sentry/types': 7.101.1 '@sentry/utils': 7.101.1 - dev: true - /@sentry/node@7.101.1: - resolution: {integrity: sha512-iXSxUT6Zbt/KUY0+fRcW5II6Tgp2zdTfhBW+fQuDt/UUZt7Ypvb+6n4U2oom3LJfttmD7mdjQuT4+vsNImDjTQ==} - engines: {node: '>=8'} + '@sentry/node@7.101.1': dependencies: '@sentry-internal/tracing': 7.101.1 '@sentry/core': 7.101.1 '@sentry/types': 7.101.1 '@sentry/utils': 7.101.1 - dev: true - /@sentry/types@7.101.1: - resolution: {integrity: sha512-bwtkQvrCZ6JGc7vqX7TEAKBgkbQFORt84FFS3JQQb8G3efTt9fZd2ReY4buteKQdlALl8h1QWVngTLmI+kyUuw==} - engines: {node: '>=8'} - dev: true + '@sentry/types@7.101.1': {} - /@sentry/utils@7.101.1: - resolution: {integrity: sha512-Nrg0nrEI3nrOCd9SLJ/WGzxS5KMQE4cryLOvrDcHJRWpsSyGBF1hLLerk84Nsw/0myMsn7zTYU+xoq7idNsX5A==} - engines: {node: '>=8'} + '@sentry/utils@7.101.1': dependencies: '@sentry/types': 7.101.1 - dev: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true - - /@smithy/abort-controller@2.1.1: - resolution: {integrity: sha512-1+qdrUqLhaALYL0iOcN43EP6yAXXQ2wWZ6taf4S2pNGowmOc5gx+iMQv+E42JizNJjB0+gEadOXeV1Bf7JWL1Q==} - engines: {node: '>=14.0.0'} + '@smithy/abort-controller@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/config-resolver@2.1.1: - resolution: {integrity: sha512-lxfLDpZm+AWAHPFZps5JfDoO9Ux1764fOgvRUBpHIO8HWHcSN1dkgsago1qLRVgm1BZ8RCm8cgv99QvtaOWIhw==} - engines: {node: '>=14.0.0'} + '@smithy/config-resolver@2.1.1': dependencies: '@smithy/node-config-provider': 2.2.1 '@smithy/types': 2.9.1 '@smithy/util-config-provider': 2.2.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/core@1.3.2: - resolution: {integrity: sha512-tYDmTp0f2TZVE18jAOH1PnmkngLQ+dOGUlMd1u67s87ieueNeyqhja6z/Z4MxhybEiXKOWFOmGjfTZWFxljwJw==} - engines: {node: '>=14.0.0'} + '@smithy/core@1.3.2': dependencies: '@smithy/middleware-endpoint': 2.4.1 '@smithy/middleware-retry': 2.1.1 @@ -1700,74 +4545,53 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/credential-provider-imds@2.2.1: - resolution: {integrity: sha512-7XHjZUxmZYnONheVQL7j5zvZXga+EWNgwEAP6OPZTi7l8J4JTeNh9aIOfE5fKHZ/ee2IeNOh54ZrSna+Vc6TFA==} - engines: {node: '>=14.0.0'} + '@smithy/credential-provider-imds@2.2.1': dependencies: '@smithy/node-config-provider': 2.2.1 '@smithy/property-provider': 2.1.1 '@smithy/types': 2.9.1 '@smithy/url-parser': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/eventstream-codec@2.1.1: - resolution: {integrity: sha512-E8KYBxBIuU4c+zrpR22VsVrOPoEDzk35bQR3E+xm4k6Pa6JqzkDOdMyf9Atac5GPNKHJBdVaQ4JtjdWX2rl/nw==} + '@smithy/eventstream-codec@2.1.1': dependencies: '@aws-crypto/crc32': 3.0.0 '@smithy/types': 2.9.1 '@smithy/util-hex-encoding': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/fetch-http-handler@2.4.1: - resolution: {integrity: sha512-VYGLinPsFqH68lxfRhjQaSkjXM7JysUOJDTNjHBuN/ykyRb2f1gyavN9+VhhPTWCy32L4yZ2fdhpCs/nStEicg==} + '@smithy/fetch-http-handler@2.4.1': dependencies: '@smithy/protocol-http': 3.1.1 '@smithy/querystring-builder': 2.1.1 '@smithy/types': 2.9.1 '@smithy/util-base64': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/hash-node@2.1.1: - resolution: {integrity: sha512-Qhoq0N8f2OtCnvUpCf+g1vSyhYQrZjhSwvJ9qvR8BUGOtTXiyv2x1OD2e6jVGmlpC4E4ax1USHoyGfV9JFsACg==} - engines: {node: '>=14.0.0'} + '@smithy/hash-node@2.1.1': dependencies: '@smithy/types': 2.9.1 '@smithy/util-buffer-from': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/invalid-dependency@2.1.1: - resolution: {integrity: sha512-7WTgnKw+VPg8fxu2v9AlNOQ5yaz6RA54zOVB4f6vQuR0xFKd+RzlCpt0WidYTsye7F+FYDIaS/RnJW4pxjNInw==} + '@smithy/invalid-dependency@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/is-array-buffer@2.1.1: - resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} - engines: {node: '>=14.0.0'} + '@smithy/is-array-buffer@2.1.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/middleware-content-length@2.1.1: - resolution: {integrity: sha512-rSr9ezUl9qMgiJR0UVtVOGEZElMdGFyl8FzWEF5iEKTlcWxGr2wTqGfDwtH3LAB7h+FPkxqv4ZU4cpuCN9Kf/g==} - engines: {node: '>=14.0.0'} + '@smithy/middleware-content-length@2.1.1': dependencies: '@smithy/protocol-http': 3.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/middleware-endpoint@2.4.1: - resolution: {integrity: sha512-XPZTb1E2Oav60Ven3n2PFx+rX9EDsU/jSTA8VDamt7FXks67ekjPY/XrmmPDQaFJOTUHJNKjd8+kZxVO5Ael4Q==} - engines: {node: '>=14.0.0'} + '@smithy/middleware-endpoint@2.4.1': dependencies: '@smithy/middleware-serde': 2.1.1 '@smithy/node-config-provider': 2.2.1 @@ -1776,11 +4600,8 @@ packages: '@smithy/url-parser': 2.1.1 '@smithy/util-middleware': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/middleware-retry@2.1.1: - resolution: {integrity: sha512-eMIHOBTXro6JZ+WWzZWd/8fS8ht5nS5KDQjzhNMHNRcG5FkNTqcKpYhw7TETMYzbLfhO5FYghHy1vqDWM4FLDA==} - engines: {node: '>=14.0.0'} + '@smithy/middleware-retry@2.1.1': dependencies: '@smithy/node-config-provider': 2.2.1 '@smithy/protocol-http': 3.1.1 @@ -1791,96 +4612,63 @@ packages: '@smithy/util-retry': 2.1.1 tslib: 2.6.2 uuid: 8.3.2 - dev: true - /@smithy/middleware-serde@2.1.1: - resolution: {integrity: sha512-D8Gq0aQBeE1pxf3cjWVkRr2W54t+cdM2zx78tNrVhqrDykRA7asq8yVJij1u5NDtKzKqzBSPYh7iW0svUKg76g==} - engines: {node: '>=14.0.0'} + '@smithy/middleware-serde@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/middleware-stack@2.1.1: - resolution: {integrity: sha512-KPJhRlhsl8CjgGXK/DoDcrFGfAqoqvuwlbxy+uOO4g2Azn1dhH+GVfC3RAp+6PoL5PWPb+vt6Z23FP+Mr6qeCw==} - engines: {node: '>=14.0.0'} + '@smithy/middleware-stack@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/node-config-provider@2.2.1: - resolution: {integrity: sha512-epzK3x1xNxA9oJgHQ5nz+2j6DsJKdHfieb+YgJ7ATWxzNcB7Hc+Uya2TUck5MicOPhDV8HZImND7ZOecVr+OWg==} - engines: {node: '>=14.0.0'} + '@smithy/node-config-provider@2.2.1': dependencies: '@smithy/property-provider': 2.1.1 '@smithy/shared-ini-file-loader': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/node-http-handler@2.3.1: - resolution: {integrity: sha512-gLA8qK2nL9J0Rk/WEZSvgin4AppvuCYRYg61dcUo/uKxvMZsMInL5I5ZdJTogOvdfVug3N2dgI5ffcUfS4S9PA==} - engines: {node: '>=14.0.0'} + '@smithy/node-http-handler@2.3.1': dependencies: '@smithy/abort-controller': 2.1.1 '@smithy/protocol-http': 3.1.1 '@smithy/querystring-builder': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/property-provider@2.1.1: - resolution: {integrity: sha512-FX7JhhD/o5HwSwg6GLK9zxrMUrGnb3PzNBrcthqHKBc3dH0UfgEAU24xnJ8F0uow5mj17UeBEOI6o3CF2k7Mhw==} - engines: {node: '>=14.0.0'} + '@smithy/property-provider@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/protocol-http@3.1.1: - resolution: {integrity: sha512-6ZRTSsaXuSL9++qEwH851hJjUA0OgXdQFCs+VDw4tGH256jQ3TjYY/i34N4vd24RV3nrjNsgd1yhb57uMoKbzQ==} - engines: {node: '>=14.0.0'} + '@smithy/protocol-http@3.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/querystring-builder@2.1.1: - resolution: {integrity: sha512-C/ko/CeEa8jdYE4gt6nHO5XDrlSJ3vdCG0ZAc6nD5ZIE7LBp0jCx4qoqp7eoutBu7VrGMXERSRoPqwi1WjCPbg==} - engines: {node: '>=14.0.0'} + '@smithy/querystring-builder@2.1.1': dependencies: '@smithy/types': 2.9.1 '@smithy/util-uri-escape': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/querystring-parser@2.1.1: - resolution: {integrity: sha512-H4+6jKGVhG1W4CIxfBaSsbm98lOO88tpDWmZLgkJpt8Zkk/+uG0FmmqMuCAc3HNM2ZDV+JbErxr0l5BcuIf/XQ==} - engines: {node: '>=14.0.0'} + '@smithy/querystring-parser@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/service-error-classification@2.1.1: - resolution: {integrity: sha512-txEdZxPUgM1PwGvDvHzqhXisrc5LlRWYCf2yyHfvITWioAKat7srQvpjMAvgzf0t6t7j8yHrryXU9xt7RZqFpw==} - engines: {node: '>=14.0.0'} + '@smithy/service-error-classification@2.1.1': dependencies: '@smithy/types': 2.9.1 - dev: true - /@smithy/shared-ini-file-loader@2.3.1: - resolution: {integrity: sha512-2E2kh24igmIznHLB6H05Na4OgIEilRu0oQpYXo3LCNRrawHAcfDKq9004zJs+sAMt2X5AbY87CUCJ7IpqpSgdw==} - engines: {node: '>=14.0.0'} + '@smithy/shared-ini-file-loader@2.3.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/signature-v4@2.1.1: - resolution: {integrity: sha512-Hb7xub0NHuvvQD3YwDSdanBmYukoEkhqBjqoxo+bSdC0ryV9cTfgmNjuAQhTPYB6yeU7hTR+sPRiFMlxqv6kmg==} - engines: {node: '>=14.0.0'} + '@smithy/signature-v4@2.1.1': dependencies: '@smithy/eventstream-codec': 2.1.1 '@smithy/is-array-buffer': 2.1.1 @@ -1890,11 +4678,8 @@ packages: '@smithy/util-uri-escape': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/smithy-client@2.3.1: - resolution: {integrity: sha512-YsTdU8xVD64r2pLEwmltrNvZV6XIAC50LN6ivDopdt+YiF/jGH6PY9zUOu0CXD/d8GMB8gbhnpPsdrjAXHS9QA==} - engines: {node: '>=14.0.0'} + '@smithy/smithy-client@2.3.1': dependencies: '@smithy/middleware-endpoint': 2.4.1 '@smithy/middleware-stack': 2.1.1 @@ -1902,73 +4687,48 @@ packages: '@smithy/types': 2.9.1 '@smithy/util-stream': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/types@2.9.1: - resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==} - engines: {node: '>=14.0.0'} + '@smithy/types@2.9.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/url-parser@2.1.1: - resolution: {integrity: sha512-qC9Bv8f/vvFIEkHsiNrUKYNl8uKQnn4BdhXl7VzQRP774AwIjiSMMwkbT+L7Fk8W8rzYVifzJNYxv1HwvfBo3Q==} + '@smithy/url-parser@2.1.1': dependencies: '@smithy/querystring-parser': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/util-base64@2.1.1: - resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} - engines: {node: '>=14.0.0'} + '@smithy/util-base64@2.1.1': dependencies: '@smithy/util-buffer-from': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/util-body-length-browser@2.1.1: - resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} + '@smithy/util-body-length-browser@2.1.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-body-length-node@2.2.1: - resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} - engines: {node: '>=14.0.0'} + '@smithy/util-body-length-node@2.2.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-buffer-from@2.1.1: - resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} - engines: {node: '>=14.0.0'} + '@smithy/util-buffer-from@2.1.1': dependencies: '@smithy/is-array-buffer': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/util-config-provider@2.2.1: - resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} - engines: {node: '>=14.0.0'} + '@smithy/util-config-provider@2.2.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-defaults-mode-browser@2.1.1: - resolution: {integrity: sha512-lqLz/9aWRO6mosnXkArtRuQqqZBhNpgI65YDpww4rVQBuUT7qzKbDLG5AmnQTCiU4rOquaZO/Kt0J7q9Uic7MA==} - engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-browser@2.1.1': dependencies: '@smithy/property-provider': 2.1.1 '@smithy/smithy-client': 2.3.1 '@smithy/types': 2.9.1 bowser: 2.11.0 tslib: 2.6.2 - dev: true - /@smithy/util-defaults-mode-node@2.2.0: - resolution: {integrity: sha512-iFJp/N4EtkanFpBUtSrrIbtOIBf69KNuve03ic1afhJ9/korDxdM0c6cCH4Ehj/smI9pDCfVv+bqT3xZjF2WaA==} - engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@2.2.0': dependencies: '@smithy/config-resolver': 2.1.1 '@smithy/credential-provider-imds': 2.2.1 @@ -1977,44 +4737,29 @@ packages: '@smithy/smithy-client': 2.3.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/util-endpoints@1.1.1: - resolution: {integrity: sha512-sI4d9rjoaekSGEtq3xSb2nMjHMx8QXcz2cexnVyRWsy4yQ9z3kbDpX+7fN0jnbdOp0b3KSTZJZ2Yb92JWSanLw==} - engines: {node: '>= 14.0.0'} + '@smithy/util-endpoints@1.1.1': dependencies: '@smithy/node-config-provider': 2.2.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/util-hex-encoding@2.1.1: - resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} - engines: {node: '>=14.0.0'} + '@smithy/util-hex-encoding@2.1.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-middleware@2.1.1: - resolution: {integrity: sha512-mKNrk8oz5zqkNcbcgAAepeJbmfUW6ogrT2Z2gDbIUzVzNAHKJQTYmH9jcy0jbWb+m7ubrvXKb6uMjkSgAqqsFA==} - engines: {node: '>=14.0.0'} + '@smithy/util-middleware@2.1.1': dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/util-retry@2.1.1: - resolution: {integrity: sha512-Mg+xxWPTeSPrthpC5WAamJ6PW4Kbo01Fm7lWM1jmGRvmrRdsd3192Gz2fBXAMURyXpaNxyZf6Hr/nQ4q70oVEA==} - engines: {node: '>= 14.0.0'} + '@smithy/util-retry@2.1.1': dependencies: '@smithy/service-error-classification': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@smithy/util-stream@2.1.1: - resolution: {integrity: sha512-J7SMIpUYvU4DQN55KmBtvaMc7NM3CZ2iWICdcgaovtLzseVhAqFRYqloT3mh0esrFw+3VEK6nQFteFsTqZSECQ==} - engines: {node: '>=14.0.0'} + '@smithy/util-stream@2.1.1': dependencies: '@smithy/fetch-http-handler': 2.4.1 '@smithy/node-http-handler': 2.3.1 @@ -2024,134 +4769,68 @@ packages: '@smithy/util-hex-encoding': 2.1.1 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/util-uri-escape@2.1.1: - resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} - engines: {node: '>=14.0.0'} + '@smithy/util-uri-escape@2.1.1': dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-utf8@2.1.1: - resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} - engines: {node: '>=14.0.0'} + '@smithy/util-utf8@2.1.1': dependencies: '@smithy/util-buffer-from': 2.1.1 tslib: 2.6.2 - dev: true - /@smithy/util-waiter@2.1.1: - resolution: {integrity: sha512-kYy6BLJJNif+uqNENtJqWdXcpqo1LS+nj1AfXcDhOpqpSHJSAkVySLyZV9fkmuVO21lzGoxjvd1imGGJHph/IA==} - engines: {node: '>=14.0.0'} + '@smithy/util-waiter@2.1.1': dependencies: '@smithy/abort-controller': 2.1.1 '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true - /@types/chai-subset@1.3.5: - resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} - dependencies: - '@types/chai': 4.3.11 - dev: true - - /@types/chai@4.3.11: - resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} - dev: true - - /@types/debug@4.1.12: - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + '@types/estree@1.0.5': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/minimist@1.2.5': {} - /@types/ms@0.7.34: - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - dev: true + '@types/ms@0.7.34': {} - /@types/mute-stream@0.0.1: - resolution: {integrity: sha512-0yQLzYhCqGz7CQPE3iDmYjhb7KMBFOP+tBkyw+/Y2YyDI5wpS7itXXxneN1zSsUwWx3Ji6YiVYrhAnpQGS/vkw==} + '@types/mute-stream@0.0.1': dependencies: '@types/node': 18.19.17 - dev: true - /@types/mute-stream@0.0.4: - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/mute-stream@0.0.4': dependencies: '@types/node': 18.19.17 - dev: true - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/node@12.20.55': {} - /@types/node@16.18.23: - resolution: {integrity: sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g==} - dev: true + '@types/node@16.18.23': {} - /@types/node@18.19.17: - resolution: {integrity: sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==} + '@types/node@18.19.17': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.11.19: - resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + '@types/node@20.11.19': dependencies: undici-types: 5.26.5 - dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/semver@7.5.7: - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} - dev: true + '@types/semver@7.5.7': {} - /@types/wrap-ansi@3.0.0: - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - dev: true + '@types/wrap-ansi@3.0.0': {} - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true + '@types/yauzl@2.10.3': dependencies: '@types/node': 18.19.17 - dev: true optional: true - /@types/yoga-layout@1.9.2: - resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} - dev: true + '@types/yoga-layout@1.9.2': {} - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) @@ -2166,20 +4845,12 @@ packages: natural-compare: 1.4.0 semver: 7.6.0 ts-api-utils: 1.2.1(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 @@ -2187,52 +4858,31 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.56.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.2.1(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.21.0': {} - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -2242,16 +4892,12 @@ packages: minimatch: 9.0.3 semver: 7.6.0 ts-api-utils: 1.2.1(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 @@ -2264,190 +4910,128 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@vitest/coverage-v8@0.34.6(vitest@0.34.6): - resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} - peerDependencies: - vitest: '>=0.32.0 <1' + '@vitest/coverage-v8@2.1.0(vitest@2.1.0(@types/node@18.19.17))': dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - magic-string: 0.30.7 - picocolors: 1.0.0 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.11 + magicast: 0.3.5 std-env: 3.7.0 - test-exclude: 6.0.0 - v8-to-istanbul: 9.2.0 - vitest: 0.34.6 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.0(@types/node@18.19.17) transitivePeerDependencies: - supports-color - dev: true - /@vitest/expect@0.34.6: - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + '@vitest/expect@2.1.0': + dependencies: + '@vitest/spy': 2.1.0 + '@vitest/utils': 2.1.0 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.0(@vitest/spy@2.1.0)(vite@5.1.3(@types/node@18.19.17))': + dependencies: + '@vitest/spy': 2.1.0 + estree-walker: 3.0.3 + magic-string: 0.30.11 + optionalDependencies: + vite: 5.1.3(@types/node@18.19.17) + + '@vitest/pretty-format@2.1.0': dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - chai: 4.4.1 - dev: true + tinyrainbow: 1.2.0 - /@vitest/runner@0.34.6: - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + '@vitest/runner@2.1.0': dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 + '@vitest/utils': 2.1.0 pathe: 1.1.2 - dev: true - /@vitest/snapshot@0.34.6: - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + '@vitest/snapshot@2.1.0': dependencies: - magic-string: 0.30.7 + '@vitest/pretty-format': 2.1.0 + magic-string: 0.30.11 pathe: 1.1.2 - pretty-format: 29.7.0 - dev: true - /@vitest/spy@0.34.6: - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + '@vitest/spy@2.1.0': dependencies: - tinyspy: 2.2.1 - dev: true + tinyspy: 3.0.2 - /@vitest/utils@0.34.6: - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + '@vitest/utils@2.1.0': dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: true + '@vitest/pretty-format': 2.1.0 + loupe: 3.1.1 + tinyrainbow: 1.2.0 - /@xmldom/xmldom@0.8.10: - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} - dev: true + '@xmldom/xmldom@0.8.10': {} - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 - dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.3: {} - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true + address@1.2.2: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: 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.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /archiver-utils@2.1.0: - resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} - engines: {node: '>= 6'} + archiver-utils@2.1.0: dependencies: glob: 7.2.3 graceful-fs: 4.2.11 @@ -2459,11 +5043,8 @@ packages: lodash.union: 4.6.0 normalize-path: 3.0.0 readable-stream: 2.3.8 - dev: true - /archiver-utils@3.0.4: - resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} - engines: {node: '>= 10'} + archiver-utils@3.0.4: dependencies: glob: 7.2.3 graceful-fs: 4.2.11 @@ -2475,11 +5056,8 @@ packages: lodash.union: 4.6.0 normalize-path: 3.0.0 readable-stream: 3.6.2 - dev: true - /archiver@5.3.2: - resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} - engines: {node: '>= 10'} + archiver@5.3.2: dependencies: archiver-utils: 2.1.0 async: 3.2.5 @@ -2488,49 +5066,30 @@ packages: readdir-glob: 1.1.3 tar-stream: 2.2.0 zip-stream: 4.1.1 - dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /arr-rotate@1.0.0: - resolution: {integrity: sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==} - engines: {node: '>=4'} - dev: true + arr-rotate@1.0.0: {} - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.4 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -2540,188 +5099,101 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.2 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@2.0.1: {} - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true + async@3.2.5: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + at-least-node@1.0.0: {} - /auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} - dev: true + auto-bind@4.0.0: {} - /available-typed-arrays@1.0.6: - resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.6: {} - /aws-cdk-lib@2.150.0(constructs@10.3.0): - resolution: {integrity: sha512-A5dJ6iIAXlkSgUIKhhSd5slEjvDBiREv6/xw8CgrXU+puoFULu5bC0SOQARjTzcsAgAVtxdlaZ7qy7u9It7nHQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - constructs: ^10.0.0 + aws-cdk-lib@2.158.0(constructs@10.3.0): dependencies: '@aws-cdk/asset-awscli-v1': 2.2.202 '@aws-cdk/asset-kubectl-v20': 2.1.2 - '@aws-cdk/asset-node-proxy-agent-v6': 2.0.3 + '@aws-cdk/asset-node-proxy-agent-v6': 2.1.0 + '@aws-cdk/cloud-assembly-schema': 36.0.25 constructs: 10.3.0 - dev: true - bundledDependencies: - - '@balena/dockerignore' - - case - - fs-extra - - ignore - - jsonschema - - minimatch - - punycode - - semver - - table - - yaml - - mime-types - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - dev: true + bowser@2.11.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + breakword@1.0.6: dependencies: wcwidth: 1.0.1 - dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true + buffer-crc32@0.2.13: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.1 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camel-case@4.1.2: dependencies: pascal-case: 3.1.2 tslib: 2.6.2 - dev: false - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@6.2.2: 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'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + camelcase@6.3.0: {} - /case@1.6.3: - resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} - engines: {node: '>= 0.8.0'} - dev: true + case@1.6.3: {} - /cdktf-cli@0.18.2(debug@4.3.4)(ink@3.2.0)(react@17.0.2): - resolution: {integrity: sha512-Href8hApBsCuvLz1bOiV5t13gkTbl4O457CeiBQmEjfFLg5myluA2nSMBSgCo0JGd/89sCbQXt1MdQU577qM2Q==} - hasBin: true + cdktf-cli@0.18.2(debug@4.3.4)(ink@3.2.0(react@17.0.2))(react@17.0.2): dependencies: '@cdktf/cli-core': 0.18.2(debug@4.3.4)(react@17.0.2) '@cdktf/commons': 0.18.2(debug@4.3.4) @@ -2735,8 +5207,8 @@ packages: constructs: 10.3.0 cross-spawn: 7.0.3 https-proxy-agent: 5.0.1 - ink-select-input: 4.2.2(ink@3.2.0)(react@17.0.2) - ink-table: 3.1.0(ink@3.2.0)(react@17.0.2) + ink-select-input: 4.2.2(ink@3.2.0(react@17.0.2))(react@17.0.2) + ink-table: 3.1.0(ink@3.2.0(react@17.0.2))(react@17.0.2) jsii: 5.3.18 jsii-pacmak: 1.94.0 minimatch: 5.1.6 @@ -2757,75 +5229,39 @@ packages: - react - supports-color - utf-8-validate - dev: true - /cdktf@0.18.2(constructs@10.3.0): - resolution: {integrity: sha512-ohCsfFwEjXbF4bGbzkx/YB/aq6spceAPtKBXfdF/kNjUx1hVH28lQDS5ykJbnxAAnvrUA8FWz034buun7uPrdQ==} - peerDependencies: - constructs: ^10.0.25 + cdktf@0.18.2(constructs@10.3.0): dependencies: constructs: 10.3.0 - dev: true - bundledDependencies: - - archiver - - json-stable-stringify - - semver - /cdktf@0.20.8(constructs@10.3.0): - resolution: {integrity: sha512-O4O5h0b1E6scc/tqq9EUIQGDbPmdrCQpdkPdbDtUHHzhZGtmFpIMc5MgP1SgB+EzAutnG2oUDefjCqWMnhDe9A==} - peerDependencies: - constructs: ^10.3.0 + cdktf@0.20.8(constructs@10.3.0): dependencies: constructs: 10.3.0 - dev: true - bundledDependencies: - - archiver - - json-stable-stringify - - semver - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@5.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true + check-error@2.1.1: {} - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -2836,287 +5272,167 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true + chownr@1.1.4: {} - /ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true + ci-info@2.0.0: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true + cli-boxes@2.2.1: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.7.0: {} - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - dev: true - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true + clone@2.1.2: {} - /code-excerpt@3.0.0: - resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} - engines: {node: '>=10'} + code-excerpt@3.0.0: dependencies: convert-to-spaces: 1.0.2 - dev: true - /codemaker@1.94.0: - resolution: {integrity: sha512-V+896C7RojQVfG0UlOXaFfVVxmFb08rPtJvzcxhdJfowc2o6xGwGG0OpWSLHy6fQrmt4BxLXnKZ6Xeuqt4aKjw==} - engines: {node: '>= 14.17.0'} + codemaker@1.94.0: dependencies: camelcase: 6.3.0 decamelize: 5.0.1 fs-extra: 10.1.0 - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /commonmark@0.30.0: - resolution: {integrity: sha512-j1yoUo4gxPND1JWV9xj5ELih0yMv1iCWDG6eEQIPLSWLxzCXiFoyS7kvB+WwU+tZMf4snwJMMtaubV0laFpiBA==} - hasBin: true + commonmark@0.30.0: dependencies: entities: 2.0.3 mdurl: 1.0.1 minimist: 1.2.8 string.prototype.repeat: 0.2.0 - dev: true - - /commonmark@0.31.0: - resolution: {integrity: sha512-nuDsQ34gjmgAqjyIz6mbRWBW/XPE9wsBempAMBk2V/AA88ekztjTM46oi07J6c6Y/2Y8TdYCZi9L0pIBt/oMZw==} - hasBin: true + + commonmark@0.31.0: dependencies: entities: 3.0.1 mdurl: 1.0.1 minimist: 1.2.8 string.prototype.repeat: 1.0.0 - dev: true - /compress-commons@4.1.2: - resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} - engines: {node: '>= 10'} + compress-commons@4.1.2: dependencies: buffer-crc32: 0.2.13 crc32-stream: 4.0.3 normalize-path: 3.0.0 readable-stream: 3.6.2 - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - /constructs@10.3.0: - resolution: {integrity: sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==} - engines: {node: '>= 16.14.0'} - dev: true + concat-map@0.0.1: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + constructs@10.3.0: {} - /convert-to-spaces@1.0.2: - resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==} - engines: {node: '>= 4'} - dev: true + convert-to-spaces@1.0.2: {} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - dev: true + crc-32@1.2.2: {} - /crc32-stream@4.0.3: - resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} - engines: {node: '>= 10'} + crc32-stream@4.0.3: dependencies: crc-32: 1.2.2 readable-stream: 3.6.2 - dev: true - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-fetch@3.1.8: dependencies: node-fetch: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true + csv-generate@3.4.3: {} - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true + csv-parse@4.16.3: {} - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true + csv-stringify@5.6.5: {} - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} + csv@5.5.3: dependencies: csv-generate: 3.4.3 csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 - dev: true - /date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - dev: true + date-format@4.0.14: {} - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decamelize@5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} + decamelize@5.0.1: {} - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: true - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true + deep-eql@5.0.2: {} - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -3136,158 +5452,89 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.14 - dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /detect-indent@5.0.0: - resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} - engines: {node: '>=4'} - dev: true + detect-indent@5.0.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - dev: true + detect-libc@2.0.2: {} - /detect-newline@2.1.0: - resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==} - engines: {node: '>=0.10.0'} - dev: true + detect-newline@2.1.0: {} - /detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true + detect-port@1.5.1: dependencies: address: 1.2.2 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /downlevel-dts@0.11.0: - resolution: {integrity: sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==} - hasBin: true + downlevel-dts@0.11.0: dependencies: semver: 7.6.0 shelljs: 0.8.5 - typescript: 5.6.0-dev.20240731 - dev: true + typescript: 5.7.0-dev.20240912 - /dprint@0.35.4: - resolution: {integrity: sha512-bCfS1kjmNgCWZ6/TQzcyz30jQpQ8/yHe7cN04cL9VRnC3AgtAyfXPMafYuR5ALNbndwkK/mEJ+Nh+Ec4lFjszA==} - hasBin: true - requiresBuild: true + dprint@0.35.4: dependencies: https-proxy-agent: 5.0.1 yauzl: 2.10.0 transitivePeerDependencies: - supports-color - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: true - /entities@2.0.3: - resolution: {integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==} - dev: true + entities@2.0.3: {} - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: true + entities@3.0.1: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} - engines: {node: '>= 0.4'} + es-abstract@1.22.4: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -3330,22 +5577,14 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.14 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-get-iterator@1.1.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -3356,37 +5595,24 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.2: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.1 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.1 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.19.12: optionalDependencies: '@esbuild/aix-ppc64': 0.19.12 '@esbuild/android-arm': 0.19.12 @@ -3411,44 +5637,23 @@ packages: '@esbuild/win32-arm64': 0.19.12 '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - dev: true - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} + escalade@3.1.2: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + escape-string-regexp@2.0.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.56.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 @@ -3490,55 +5695,34 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.5 - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + esutils@2.0.3: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + events@3.3.0: {} + + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -3549,30 +5733,18 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - dev: true + expand-template@2.0.3: {} - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + extendable-error@0.1.7: {} - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + extract-zip@2.0.1: dependencies: debug: 4.3.4 get-stream: 5.2.0 @@ -3581,291 +5753,186 @@ packages: '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: 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.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-xml-parser@4.2.5: - resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} - hasBin: true + fast-xml-parser@4.2.5: dependencies: strnum: 1.0.5 - dev: true - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: 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} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@3.0.0: dependencies: locate-path: 3.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: 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'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + find-yarn-workspace-root2@1.2.16: dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flatted@3.2.9: {} - /follow-redirects@1.15.5(debug@4.3.4): - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: + follow-redirects@1.15.5(debug@4.3.4): + optionalDependencies: debug: 4.3.4 - dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true + fs-constants@1.0.0: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.4 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + get-caller-file@2.0.5: {} - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true + get-func-name@2.0.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.1 - dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - dev: true + github-from-package@0.0.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: 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'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.10: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.5 minipass: 7.0.4 path-scurry: 1.10.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@10.4.5: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3873,25 +5940,16 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -3899,236 +5957,120 @@ packages: ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true + grapheme-splitter@1.0.4: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /graphology-types@0.24.7: - resolution: {integrity: sha512-tdcqOOpwArNjEr0gNQKCXwaNCWnQJrog14nJNQPeemcLnXQUUGrsCWpWkVKt46zLjcS6/KGoayeJfHHyPDlvwA==} - dev: true + graphology-types@0.24.7: {} - /graphology@0.25.4(graphology-types@0.24.7): - resolution: {integrity: sha512-33g0Ol9nkWdD6ulw687viS8YJQBxqG5LWII6FI6nul0pq6iM2t5EKquOTFDbyTblRB3O9I+7KX4xI8u5ffekAQ==} - peerDependencies: - graphology-types: '>=0.24.0' + graphology@0.25.4(graphology-types@0.24.7): dependencies: events: 3.3.0 graphology-types: 0.24.7 obliterator: 2.0.4 - dev: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} + hasown@2.0.1: dependencies: function-bind: 1.1.2 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@1.0.2: {} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /husky@8.0.3: - resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} - engines: {node: '>=14'} - hasBin: true - dev: true + husky@8.0.3: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.1: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /ink-select-input@4.2.2(ink@3.2.0)(react@17.0.2): - resolution: {integrity: sha512-E5AS2Vnd4CSzEa7Rm+hG47wxRQo1ASfh4msKxO7FHmn/ym+GKSSsFIfR+FonqjKNDPXYJClw8lM47RdN3Pi+nw==} - engines: {node: '>=10'} - peerDependencies: - ink: ^3.0.5 - react: ^16.5.2 || ^17.0.0 + ink-select-input@4.2.2(ink@3.2.0(react@17.0.2))(react@17.0.2): dependencies: arr-rotate: 1.0.0 figures: 3.2.0 ink: 3.2.0(react@17.0.2) lodash.isequal: 4.5.0 react: 17.0.2 - dev: true - /ink-spinner@4.0.3(ink@3.2.0)(react@17.0.2): - resolution: {integrity: sha512-uJ4nbH00MM9fjTJ5xdw0zzvtXMkeGb0WV6dzSWvFv2/+ks6FIhpkt+Ge/eLdh0Ah6Vjw5pLMyNfoHQpRDRVFbQ==} - engines: {node: '>=10'} - peerDependencies: - ink: '>=3.0.5' - react: '>=16.8.2' + ink-spinner@4.0.3(ink@3.2.0(react@17.0.2))(react@17.0.2): dependencies: cli-spinners: 2.7.0 ink: 3.2.0(react@17.0.2) react: 17.0.2 - dev: true - /ink-table@3.1.0(ink@3.2.0)(react@17.0.2): - resolution: {integrity: sha512-qxVb4DIaEaJryvF9uZGydnmP9Hkmas3DCKVpEcBYC0E4eJd3qNgNe+PZKuzgCERFe9LfAS1TNWxCr9+AU4v3YA==} - peerDependencies: - ink: '>=3.0.0' - react: '>=16.8.0' + ink-table@3.1.0(ink@3.2.0(react@17.0.2))(react@17.0.2): dependencies: ink: 3.2.0(react@17.0.2) object-hash: 2.2.0 react: 17.0.2 - dev: true - /ink-testing-library@2.1.0: - resolution: {integrity: sha512-7TNlOjJlJXB33vG7yVa+MMO7hCjaC1bCn+zdpSjknWoLbOWMaFdKc7LJvqVkZ0rZv2+akhjXPrcR/dbxissjUw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dev: true + ink-testing-library@2.1.0: {} - /ink-use-stdout-dimensions@1.0.5(ink@3.2.0)(react@17.0.2): - resolution: {integrity: sha512-rVsqnw4tQEAJUoknU09+zHdDf30GJdkumkHr0iz/TOYMYEZJkYqziQSGJAM+Z+M603EDfO89+Nxyn/Ko2Zknfw==} - peerDependencies: - ink: '>=2.0.0' - react: '>=16.0.0' + ink-use-stdout-dimensions@1.0.5(ink@3.2.0(react@17.0.2))(react@17.0.2): dependencies: ink: 3.2.0(react@17.0.2) react: 17.0.2 - dev: true - /ink@3.2.0(react@17.0.2): - resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '>=16.8.0' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true + ink@3.2.0(react@17.0.2): dependencies: ansi-escapes: 4.3.2 auto-bind: 4.0.0 @@ -4157,310 +6099,181 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.1 side-channel: 1.0.5 - dev: true - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true + interpret@1.4.0: {} - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true + is-ci@2.0.0: dependencies: ci-info: 2.0.0 - dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.1 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + is-map@2.0.2: {} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + is-set@2.0.2: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.14 - dev: true - /is-valid-domain@0.1.6: - resolution: {integrity: sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==} + is-valid-domain@0.1.6: dependencies: punycode: 2.3.1 - dev: true - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + is-weakmap@2.0.1: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: dependencies: - debug: 4.3.4 + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-tokens@4.0.0: {} + + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /jsii-pacmak@1.94.0: - resolution: {integrity: sha512-L5s3RZ0AOx1XfAhXsEjyeCteVrw6nwJLynL+t93eXVDcw7NFT7S0fCFXzQ4lpYQ23P/yVpSIy32J3zpUOf4uDQ==} - engines: {node: '>= 14.17.0'} - hasBin: true + jsii-pacmak@1.94.0: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4477,12 +6290,8 @@ packages: yargs: 16.2.0 transitivePeerDependencies: - supports-color - dev: true - /jsii-reflect@1.94.0: - resolution: {integrity: sha512-Oupkl5iFFeq3GJ2a/fQNMnsXRMISmEKklPHksYs/l6MqrNFUQ5kg9oj1qxjSyaCpvvXBI8Eh7y73dqNE8w4cVw==} - engines: {node: '>= 14.17.0'} - hasBin: true + jsii-reflect@1.94.0: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4490,12 +6299,8 @@ packages: fs-extra: 10.1.0 oo-ascii-tree: 1.94.0 yargs: 16.2.0 - dev: true - /jsii-rosetta@1.94.0: - resolution: {integrity: sha512-FLQAxdZJsH0sg87S9u/e4+HDGr6Pth+UZ4ool3//MFMsw+C0iwagAlNVhZuyohMdlvumpQeg9Gr+FvoBZFoBrA==} - engines: {node: '>= 14.17.0'} - hasBin: true + jsii-rosetta@1.94.0: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4511,12 +6316,8 @@ packages: yargs: 16.2.0 transitivePeerDependencies: - supports-color - dev: true - /jsii-rosetta@5.3.15: - resolution: {integrity: sha512-RP0jCHdp3M1FbInr1dVB3Q/WKLTupR7KHTNlmWuVURcURK6LKgRrXIwwo/k+fEmB+9WoQs/WUvNpq9bKUrsu8A==} - engines: {node: '>= 18.12.0'} - hasBin: true + jsii-rosetta@5.3.15: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4533,11 +6334,8 @@ packages: yargs: 17.7.2 transitivePeerDependencies: - supports-color - dev: true - /jsii-srcmak@0.1.1038: - resolution: {integrity: sha512-aJ2tZcc81z4iDJLIKDfT5icLwZTgz4OC+iPn6REeWRqgV9eH+cCjV/rhazSYdgnk+ZKjT5IRfF7D6/3Usq4BJw==} - hasBin: true + jsii-srcmak@0.1.1038: dependencies: fs-extra: 9.1.0 jsii: 5.3.18 @@ -4546,12 +6344,8 @@ packages: yargs: 15.4.1 transitivePeerDependencies: - supports-color - dev: true - /jsii@1.94.0: - resolution: {integrity: sha512-20KlKsBZlo7Ti6vfqTpKfZXnT2MKRGfh5bIPrwDODoCQmHNATfPFt1fs5+Wqd7xdrEj+A+sLAtjfHTw6i+sxCw==} - engines: {node: '>= 14.17.0'} - hasBin: true + jsii@1.94.0: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4568,12 +6362,8 @@ packages: yargs: 16.2.0 transitivePeerDependencies: - supports-color - dev: true - /jsii@5.3.18: - resolution: {integrity: sha512-1BQT5rMDNiyZp7u5461EQQuEOnPJv0UEFlTHgDZJqqCeh1OquTpB0fYFfpJnsvl4C1aleBYo3f0QMzvV7wLVjw==} - engines: {node: '>= 18.12.0'} - hasBin: true + jsii@5.3.18: dependencies: '@jsii/check-node': 1.94.0 '@jsii/spec': 1.94.0 @@ -4590,156 +6380,85 @@ packages: yargs: 17.7.2 transitivePeerDependencies: - supports-color - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-buffer@3.0.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-schema-traverse@1.0.0: {} - /jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} + lazystream@1.0.1: dependencies: readable-stream: 2.3.8 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: 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==} - dev: true + lines-and-columns@1.2.4: {} - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} + load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - dev: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@3.0.0: 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'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - dev: true + lodash.defaults@4.2.0: {} - /lodash.difference@4.5.0: - resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - dev: true + lodash.difference@4.5.0: {} - /lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: true + lodash.flatten@4.4.0: {} - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true + lodash.isequal@4.5.0: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.union@4.6.0: - resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - dev: true + lodash.union@4.6.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} + log4js@6.9.1: dependencies: date-format: 4.0.14 debug: 4.3.4 @@ -4748,77 +6467,51 @@ packages: streamroller: 3.1.5 transitivePeerDependencies: - supports-color - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.1: dependencies: get-func-name: 2.0.2 - dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: tslib: 2.6.2 - dev: false - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.2.0: {} - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} - engines: {node: '>=12'} + magic-string@0.30.11: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true + '@jridgewell/sourcemap-codec': 1.5.0 - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + magicast@0.3.5: + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + source-map-js: 1.2.1 + + make-dir@4.0.0: dependencies: semver: 7.6.0 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: true + mdurl@1.0.1: {} - /meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} + meow@6.1.1: dependencies: '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 @@ -4831,244 +6524,138 @@ packages: trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 - dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + mimic-response@3.1.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.0.4: {} - /mixme@0.5.10: - resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} - engines: {node: '>= 8.0.0'} - dev: true + minipass@7.1.2: {} - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true + mixme@0.5.10: {} - /mlly@1.5.0: - resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} - dependencies: - acorn: 8.11.3 - pathe: 1.1.2 - pkg-types: 1.0.3 - ufo: 1.4.0 - dev: true + mkdirp-classic@0.5.3: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.2: {} - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + ms@2.1.3: {} - /nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} - dev: true + mute-stream@1.0.0: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nan@2.18.0: {} - /napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - dev: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + napi-build-utils@1.0.2: {} - /ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - dev: true + natural-compare@1.4.0: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + ncp@2.0.0: {} + + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.6.2 - dev: false - /node-abi@3.54.0: - resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} - engines: {node: '>=10'} + node-abi@3.54.0: dependencies: semver: 7.6.0 - dev: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-hash@2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} - engines: {node: '>= 6'} - dev: true + object-hash@2.2.0: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.1: {} - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} + object-is@1.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /obliterator@2.0.4: - resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} - dev: true + obliterator@2.0.4: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /oo-ascii-tree@1.94.0: - resolution: {integrity: sha512-i6UllReifEW2InBJHVFJNxrledRp3yr/yKVbpDmgWTguRe8/7BtBK3njzjvZNcPLEAtiWWxr0o9SpwYjapmTOw==} - engines: {node: '>= 14.17.0'} - dev: true + oo-ascii-tree@1.94.0: {} - /open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} + open@7.4.2: dependencies: is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -5076,221 +6663,116 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + outdent@0.5.0: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-locate@3.0.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: 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'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-map@2.1.0: {} - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + package-json-from-dist@1.0.0: {} + + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-gitignore@1.0.1: - resolution: {integrity: sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==} - engines: {node: '>=6'} - dev: true + parse-gitignore@1.0.1: {} - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 tslib: 2.6.2 - dev: false - /patch-console@1.0.0: - resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} - engines: {node: '>=10'} - dev: true + patch-console@1.0.0: {} - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.1: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.0 + minipass: 7.1.2 - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true + path-type@4.0.0: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathe@1.1.2: {} - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true + pathval@2.0.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + pend@1.2.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picocolors@1.0.0: {} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + picomatch@2.3.1: {} - /pidusage@3.0.2: - resolution: {integrity: sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==} - engines: {node: '>=10'} + pidtree@0.6.0: {} + + pidusage@3.0.2: dependencies: safe-buffer: 5.2.1 - dev: true - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} - dependencies: - jsonc-parser: 3.2.1 - mlly: 1.5.0 - pathe: 1.1.2 - dev: true - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} + pkg-up@3.1.0: dependencies: find-up: 3.0.0 - dev: true - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.35: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true - /prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} - engines: {node: '>=10'} - hasBin: true + prebuild-install@7.1.1: dependencies: detect-libc: 2.0.2 expand-template: 2.0.3 @@ -5304,142 +6786,81 @@ packages: simple-get: 4.0.1 tar-fs: 2.1.1 tunnel-agent: 0.6.0 - dev: true - /preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} - engines: {node: '>=10'} + preferred-pm@3.1.2: dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prelude-ls@1.2.1: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true + prettier@2.8.8: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + pseudomap@1.0.2: {} - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + quick-lru@4.0.1: {} - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - dev: true - /react-devtools-core@4.28.5: - resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} + react-devtools-core@4.28.5: dependencies: shell-quote: 1.8.1 ws: 7.5.9 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - /react-reconciler@0.26.2(react@17.0.2): - resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^17.0.2 + react-reconciler@0.26.2(react@17.0.2): dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react: 17.0.2 scheduler: 0.20.2 - dev: true - /react@17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} + react@17.0.2: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - dev: true - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -5448,123 +6869,71 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdir-glob@1.1.3: dependencies: minimatch: 5.1.6 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} + rechoir@0.6.2: dependencies: resolve: 1.22.8 - dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.1 - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-main-filename@2.0.0: {} - /reserved-words@0.1.2: - resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} - dev: true + reserved-words@0.1.2: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.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 + reusify@1.0.4: {} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true + rfdc@1.3.1: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rollup@4.12.0: - resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.12.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: @@ -5582,92 +6951,54 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.12.0 '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 - dev: true - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: true + run-async@3.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.0: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - dev: true + sax@1.3.0: {} - /scheduler@0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + scheduler@0.20.2: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - dev: true - /semver-intersect@1.5.0: - resolution: {integrity: sha512-BDjWX7yCC0haX4W/zrnV2JaMpVirwaEkGOBmgRQtH++F1N3xl9v7k9H44xfTqwl+yLNNSbMKosoVSTIiJVQ2Pw==} + semver-intersect@1.5.0: dependencies: semver: 6.3.1 - dev: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true + semver@7.6.0: dependencies: lru-cache: 6.0.0 - dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + set-blocking@2.0.0: {} - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} - engines: {node: '>= 0.4'} + set-function-length@1.2.1: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -5675,108 +7006,63 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.4 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true + shelljs@0.8.5: dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 - dev: true - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} - engines: {node: '>= 0.4'} + side-channel@1.0.5: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: true + simple-concat@1.0.1: {} - /simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 - dev: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true + smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.2 breakword: 1.0.6 @@ -5784,358 +7070,209 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 - dev: true - /sort-json@2.0.1: - resolution: {integrity: sha512-s8cs2bcsQCzo/P2T/uoU6Js4dS/jnX8+4xunziNoq9qmSpZNCrRIAIvp4avsz0ST18HycV4z/7myJ7jsHWB2XQ==} - hasBin: true + sort-json@2.0.1: dependencies: detect-indent: 5.0.0 detect-newline: 2.1.0 minimist: 1.2.8 - dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.0.2: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.17 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.17 - dev: true - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - dev: true + spdx-license-ids@3.0.17: {} - /spdx-license-list@6.8.0: - resolution: {integrity: sha512-5UdM7r9yJ1EvsPQZWfa41AZjLQngl9iMMysm9XBW7Lqhq7aF8cllfqjS+rFCHB8FFMGSM0yFWue2LUV9mR0QzQ==} - engines: {node: '>=8'} - dev: true + spdx-license-list@6.8.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sscaff@1.2.274: - resolution: {integrity: sha512-sztRa50SL1LVxZnF1au6QT1SC2z0S1oEOyi2Kpnlg6urDns93aL32YxiJcNkLcY+VHFtVqm/SRv4cb+6LeoBQA==} - engines: {node: '>= 12.13.0'} - dev: true + sscaff@1.2.274: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - dev: true + std-env@3.7.0: {} - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 - dev: true - /stream-buffers@3.0.2: - resolution: {integrity: sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==} - engines: {node: '>= 0.10.0'} - dev: true + stream-buffers@3.0.2: {} - /stream-chain@2.2.5: - resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} - dev: true + stream-chain@2.2.5: {} - /stream-json@1.8.0: - resolution: {integrity: sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==} + stream-json@1.8.0: dependencies: stream-chain: 2.2.5 - dev: true - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + stream-transform@2.1.3: dependencies: mixme: 0.5.10 - dev: true - /streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} + streamroller@3.1.5: dependencies: date-format: 4.0.14 debug: 4.3.4 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.repeat@0.2.0: - resolution: {integrity: sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA==} - dev: true + string.prototype.repeat@0.2.0: {} - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.22.4 - dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.4 - dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.7: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.4 - dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.7: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.22.4 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@2.0.1: {} - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - dependencies: - acorn: 8.11.3 - dev: true + strip-json-comments@3.1.1: {} - /strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - dev: true + strnum@1.0.5: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 2.2.0 - dev: true - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-stream@2.2.0: dependencies: bl: 4.1.0 end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + term-size@2.2.1: {} - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true + glob: 10.4.5 + minimatch: 9.0.5 - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /tinybench@2.6.0: - resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} - dev: true + tinybench@2.9.0: {} - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} - dev: true + tinyexec@0.3.0: {} - /tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} - engines: {node: '>=14.0.0'} - dev: true + tinypool@1.0.1: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + trim-newlines@3.0.1: {} - /ts-api-utils@1.2.1(typescript@5.3.3): - resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.2.1(typescript@5.3.3): dependencies: typescript: 5.3.3 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.2: {} - /tty-table@4.2.3: - resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==} - engines: {node: '>=8.0.0'} - hasBin: true + tty-table@4.2.3: dependencies: chalk: 4.1.2 csv: 5.5.3 @@ -6144,189 +7281,95 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.2 - dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.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'} - dev: true - /type-fest@0.12.0: - resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} - engines: {node: '>=10'} - dev: true + type-fest@0.12.0: {} - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true + type-fest@0.13.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /type-fest@4.10.2: - resolution: {integrity: sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==} - engines: {node: '>=16'} - dev: true + type-fest@4.10.2: {} - /typed-array-buffer@1.0.1: - resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.6 call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.13 - dev: true - /typescript@3.9.10: - resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@3.9.10: {} - /typescript@5.6.0-dev.20240731: - resolution: {integrity: sha512-XNueWVxo4buZCEMor0GB/x7ZpzbPzowRNc42fznRinFzGipR+v+Dgelpd6cJvdkN7/TSFASN2M2jQxDeZnk95A==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.3.3: {} - /ufo@1.4.0: - resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} - dev: true + typescript@5.7.0-dev.20240912: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + universalify@2.0.1: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + util-deprecate@1.0.2: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + uuid@8.3.2: {} - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - dependencies: - '@jridgewell/trace-mapping': 0.3.22 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - dev: true + uuid@9.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /vite-node@0.34.6(@types/node@18.19.17): - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} - hasBin: true + vite-node@2.1.0(@types/node@18.19.17): dependencies: cac: 6.7.14 - debug: 4.3.4 - mlly: 1.5.0 + debug: 4.3.7 pathe: 1.1.2 - picocolors: 1.0.0 vite: 5.1.3(@types/node@18.19.17) transitivePeerDependencies: - '@types/node' @@ -6337,298 +7380,157 @@ packages: - sugarss - supports-color - terser - dev: true - /vite@5.1.3(@types/node@18.19.17): - resolution: {integrity: sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@5.1.3(@types/node@18.19.17): dependencies: - '@types/node': 18.19.17 esbuild: 0.19.12 postcss: 8.4.35 rollup: 4.12.0 optionalDependencies: + '@types/node': 18.19.17 fsevents: 2.3.3 - dev: true - /vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.11 - '@types/chai-subset': 1.3.5 - '@types/node': 18.19.17 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.11.3 - acorn-walk: 8.3.2 - cac: 6.7.14 - chai: 4.4.1 - debug: 4.3.4 - local-pkg: 0.4.3 - magic-string: 0.30.7 + vitest@2.1.0(@types/node@18.19.17): + dependencies: + '@vitest/expect': 2.1.0 + '@vitest/mocker': 2.1.0(@vitest/spy@2.1.0)(vite@5.1.3(@types/node@18.19.17)) + '@vitest/pretty-format': 2.1.0 + '@vitest/runner': 2.1.0 + '@vitest/snapshot': 2.1.0 + '@vitest/spy': 2.1.0 + '@vitest/utils': 2.1.0 + chai: 5.1.1 + debug: 4.3.7 + magic-string: 0.30.11 pathe: 1.1.2 - picocolors: 1.0.0 std-env: 3.7.0 - strip-literal: 1.3.0 - tinybench: 2.6.0 - tinypool: 0.7.0 + tinybench: 2.9.0 + tinyexec: 0.3.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 vite: 5.1.3(@types/node@18.19.17) - vite-node: 0.34.6(@types/node@18.19.17) - why-is-node-running: 2.2.2 + vite-node: 2.1.0(@types/node@18.19.17) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 18.19.17 transitivePeerDependencies: - less - lightningcss + - msw - sass - stylus - sugarss - supports-color - terser - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.1: dependencies: is-map: 2.0.2 is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-module@2.0.1: {} - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + which-pm@2.0.0: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: true - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.14: dependencies: available-typed-arrays: 1.0.6 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} + widest-line@3.1.0: dependencies: string-width: 4.2.3 - dev: true - /workerpool@6.5.1: - resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - dev: true + workerpool@6.5.1: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@7.5.9: {} - /xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true + xml-js@1.6.11: dependencies: sax: 1.3.0 - dev: true - /xmlbuilder@15.1.1: - resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} - engines: {node: '>=8.0'} - dev: true + xmlbuilder@15.1.1: {} - /xstate@4.38.3: - resolution: {integrity: sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw==} - dev: true + xstate@4.38.3: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true + y18n@4.0.3: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + y18n@5.0.8: {} - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true + yallist@2.1.2: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@21.1.1: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -6641,11 +7543,8 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.2 @@ -6654,11 +7553,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.2 @@ -6668,43 +7564,23 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@0.1.0: {} - /yoga-layout-prebuilt@1.10.0: - resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} - engines: {node: '>=8'} + yoga-layout-prebuilt@1.10.0: dependencies: '@types/yoga-layout': 1.9.2 - dev: true - /zip-stream@4.1.1: - resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} - engines: {node: '>= 10'} + zip-stream@4.1.1: dependencies: archiver-utils: 3.0.4 compress-commons: 4.1.2 readable-stream: 3.6.2 - dev: true - /zod@1.11.17: - resolution: {integrity: sha512-UzIwO92D0dSFwIRyyqAfRXICITLjF0IP8tRbEK/un7adirMssWZx8xF/1hZNE7t61knWZ+lhEuUvxlu2MO8qqA==} - dev: true + zod@1.11.17: {} - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: true + zod@3.22.4: {} diff --git a/src/__tests__/helpers.ts b/src/__tests__/helpers.ts index 5e96360..df19bb4 100644 --- a/src/__tests__/helpers.ts +++ b/src/__tests__/helpers.ts @@ -4,6 +4,7 @@ import { resolve } from "cdktf/lib/_tokens.js"; import { Construct } from "constructs"; import { Class } from "type-fest"; import { AwsTerraformAdaptorStack } from "../index.js"; +import {IfEquals} from "../lib/core/type-utils.js"; export function synthesizeConstructAndTestStability>( constructClass: C, @@ -34,6 +35,10 @@ export function synthesizeConstructAndTestStability = { + [K in keyof T]-?: IfEquals, any, DeepRequired, any>; +} + export function synthesizeElementAndTestStability< C extends CfnElement, CC extends Class, @@ -41,9 +46,9 @@ export function synthesizeElementAndTestStability< TC extends Class, >( constructClass: CC, - props: ConstructorParameters[2], + props: DeepRequired[2]>, terraformClass: TC, - terraformProps: ConstructorParameters[2], + terraformProps: DeepRequired[2]>, ) { class ConstructWrapper extends Construct { public readonly resource: C; diff --git a/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap b/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap index 63f33b3..5ac3a39 100644 --- a/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap @@ -2,54 +2,54 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Authorizer 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_apigatewayv2_authorizer\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"authorizer_credentials_arn\\": \\"authorizer-credentials-arn\\", - \\"authorizer_payload_format_version\\": \\"authorizer-payload-format-version\\", - \\"authorizer_result_ttl_in_seconds\\": 60, - \\"authorizer_type\\": \\"authorizer-type\\", - \\"authorizer_uri\\": \\"authorizer-uri\\", - \\"enable_simple_responses\\": true, - \\"identity_sources\\": [ - \\"identity-source\\" + "resource": { + "aws_apigatewayv2_authorizer": { + "resource_22C949BF": { + "api_id": "api-id", + "authorizer_credentials_arn": "authorizer-credentials-arn", + "authorizer_payload_format_version": "authorizer-payload-format-version", + "authorizer_result_ttl_in_seconds": 60, + "authorizer_type": "authorizer-type", + "authorizer_uri": "authorizer-uri", + "enable_simple_responses": true, + "identity_sources": [ + "identity-source" ], - \\"jwt_configuration\\": { - \\"audience\\": [ - \\"audience\\" + "jwt_configuration": { + "audience": [ + "audience" ], - \\"issuer\\": \\"issuer\\" + "issuer": "issuer" }, - \\"name\\": \\"name\\" + "name": "name" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_apigatewayv2_authorizer.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_apigatewayv2_authorizer.resource_22C949BF.id}", + "type": "string" } } }" @@ -57,51 +57,51 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Authorizer 1`] = ` exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::DomainName 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_apigatewayv2_domain_name\\": { - \\"resource_22C949BF\\": { - \\"domain_name\\": \\"domain-name\\", - \\"domain_name_configuration\\": { - \\"certificate_arn\\": \\"certificate-arn\\", - \\"endpoint_type\\": \\"REGIONAL\\", - \\"ownership_verification_certificate_arn\\": \\"ownership-verification-certificate-arn\\", - \\"security_policy\\": \\"TLS_1_2\\" + "resource": { + "aws_apigatewayv2_domain_name": { + "resource_22C949BF": { + "domain_name": "domain-name", + "domain_name_configuration": { + "certificate_arn": "certificate-arn", + "endpoint_type": "REGIONAL", + "ownership_verification_certificate_arn": "ownership-verification-certificate-arn", + "security_policy": "TLS_1_2" }, - \\"mutual_tls_authentication\\": { - \\"truststore_uri\\": \\"truststore-uri\\", - \\"truststore_version\\": \\"truststore-version\\" + "mutual_tls_authentication": { + "truststore_uri": "truststore-uri", + "truststore_version": "truststore-version" }, - \\"tags\\": { - \\"tag\\": \\"tag-value\\" + "tags": { + "tag": "tag-value" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_apigatewayv2_domain_name.resource_22C949BF.domain_name_configuration[0].target_domain_name, \\\\\\",\\\\\\", aws_apigatewayv2_domain_name.resource_22C949BF.domain_name_configuration[0].hosted_zone_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_apigatewayv2_domain_name.resource_22C949BF.domain_name_configuration[0].target_domain_name, \\",\\", aws_apigatewayv2_domain_name.resource_22C949BF.domain_name_configuration[0].hosted_zone_id])}", + "type": "string" } } }" @@ -109,68 +109,68 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::DomainName 1`] = ` exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Integration 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_apigatewayv2_integration\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"connection_id\\": \\"connection-id\\", - \\"connection_type\\": \\"connection-type\\", - \\"content_handling_strategy\\": \\"content-handling-strategy\\", - \\"credentials_arn\\": \\"credentials-arn\\", - \\"description\\": \\"description\\", - \\"integration_method\\": \\"integration-method\\", - \\"integration_subtype\\": \\"integration-subtype\\", - \\"integration_type\\": \\"integration-type\\", - \\"integration_uri\\": \\"integration-uri\\", - \\"passthrough_behavior\\": \\"passthrough-behavior\\", - \\"payload_format_version\\": \\"payload-format-version\\", - \\"request_parameters\\": { - \\"request-parameter\\": \\"request-parameter-value\\" + "resource": { + "aws_apigatewayv2_integration": { + "resource_22C949BF": { + "api_id": "api-id", + "connection_id": "connection-id", + "connection_type": "connection-type", + "content_handling_strategy": "content-handling-strategy", + "credentials_arn": "credentials-arn", + "description": "description", + "integration_method": "integration-method", + "integration_subtype": "integration-subtype", + "integration_type": "integration-type", + "integration_uri": "integration-uri", + "passthrough_behavior": "passthrough-behavior", + "payload_format_version": "payload-format-version", + "request_parameters": { + "request-parameter": "request-parameter-value" }, - \\"request_templates\\": { - \\"request-template\\": \\"request-template-value\\" + "request_templates": { + "request-template": "request-template-value" }, - \\"response_parameters\\": [ + "response_parameters": [ { - \\"mappings\\": { - \\"source\\": \\"destination\\" + "mappings": { + "source": "destination" }, - \\"status_code\\": \\"200\\" + "status_code": "200" } ], - \\"template_selection_expression\\": \\"template-selection-expression\\", - \\"timeout_milliseconds\\": 60, - \\"tls_config\\": { - \\"server_name_to_verify\\": \\"server-name-to-verify\\" + "template_selection_expression": "template-selection-expression", + "timeout_milliseconds": 60, + "tls_config": { + "server_name_to_verify": "server-name-to-verify" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_apigatewayv2_integration.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_apigatewayv2_integration.resource_22C949BF.id, \\",\\", aws_apigatewayv2_integration.resource_22C949BF.id])}", + "type": "string" } } }" @@ -178,58 +178,58 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Integration 1`] = ` exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Route 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_apigatewayv2_route\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"api_key_required\\": true, - \\"authorization_scopes\\": [ - \\"authorization-scope\\" + "resource": { + "aws_apigatewayv2_route": { + "resource_22C949BF": { + "api_id": "api-id", + "api_key_required": true, + "authorization_scopes": [ + "authorization-scope" ], - \\"authorization_type\\": \\"authorization-type\\", - \\"authorizer_id\\": \\"authorizer-id\\", - \\"model_selection_expression\\": \\"model-selection-expression\\", - \\"operation_name\\": \\"operation-name\\", - \\"request_models\\": { - \\"request-model\\": \\"request-model-value\\" + "authorization_type": "authorization-type", + "authorizer_id": "authorizer-id", + "model_selection_expression": "model-selection-expression", + "operation_name": "operation-name", + "request_models": { + "request-model": "request-model-value" }, - \\"request_parameter\\": [ + "request_parameter": [ { - \\"request_parameter_key\\": \\"request-parameter\\", - \\"required\\": false + "request_parameter_key": "request-parameter", + "required": false } ], - \\"route_key\\": \\"route-key\\", - \\"route_response_selection_expression\\": \\"route-response-selection-expression\\", - \\"target\\": \\"target\\" + "route_key": "route-key", + "route_response_selection_expression": "route-response-selection-expression", + "target": "target" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_apigatewayv2_route.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_apigatewayv2_route.resource_22C949BF.id}", + "type": "string" } } }" @@ -237,66 +237,66 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Route 1`] = ` exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Stage 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_apigatewayv2_stage\\": { - \\"resource_22C949BF\\": { - \\"access_log_settings\\": { - \\"destination_arn\\": \\"destination-arn\\", - \\"format\\": \\"format\\" + "resource": { + "aws_apigatewayv2_stage": { + "resource_22C949BF": { + "access_log_settings": { + "destination_arn": "destination-arn", + "format": "format" }, - \\"api_id\\": \\"api-id\\", - \\"auto_deploy\\": true, - \\"client_certificate_id\\": \\"client-certificate-id\\", - \\"default_route_settings\\": { - \\"data_trace_enabled\\": true, - \\"detailed_metrics_enabled\\": true, - \\"logging_level\\": \\"logging-level\\", - \\"throttling_burst_limit\\": 60, - \\"throttling_rate_limit\\": 60 + "api_id": "api-id", + "auto_deploy": true, + "client_certificate_id": "client-certificate-id", + "default_route_settings": { + "data_trace_enabled": true, + "detailed_metrics_enabled": true, + "logging_level": "logging-level", + "throttling_burst_limit": 60, + "throttling_rate_limit": 60 }, - \\"deployment_id\\": \\"deployment-id\\", - \\"description\\": \\"description\\", - \\"name\\": \\"stage-name\\", - \\"route_settings\\": [ + "deployment_id": "deployment-id", + "description": "description", + "name": "stage-name", + "route_settings": [ { - \\"data_trace_enabled\\": true, - \\"route_key\\": \\"route-key\\" + "data_trace_enabled": true, + "route_key": "route-key" } ], - \\"stage_variables\\": { - \\"stage-variable\\": \\"stage-variable-value\\" + "stage_variables": { + "stage-variable": "stage-variable-value" }, - \\"tags\\": { - \\"tag\\": \\"tag-value\\" + "tags": { + "tag": "tag-value" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_apigatewayv2_stage.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_apigatewayv2_stage.resource_22C949BF.id}", + "type": "string" } } }" @@ -304,38 +304,38 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Stage 1`] = ` exports[`Apigateway mappings > should map AWS::ApiGateway::Account 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_api_gateway_account\\": { - \\"resource_22C949BF\\": { - \\"cloudwatch_role_arn\\": \\"cw-role-arn\\" + "resource": { + "aws_api_gateway_account": { + "resource_22C949BF": { + "cloudwatch_role_arn": "cw-role-arn" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_api_gateway_account.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_api_gateway_account.resource_22C949BF.id}", + "type": "string" } } }" @@ -343,42 +343,42 @@ exports[`Apigateway mappings > should map AWS::ApiGateway::Account 1`] = ` exports[`Apigateway mappings > should map AWS::ApiGateway::BasePathMapping 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_api_gateway_base_path_mapping\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"rest-api-id\\", - \\"base_path\\": \\"base-path\\", - \\"domain_name\\": \\"domain-name\\", - \\"id\\": \\"id\\", - \\"stage_name\\": \\"stage\\" + "resource": { + "aws_api_gateway_base_path_mapping": { + "resource_22C949BF": { + "api_id": "rest-api-id", + "base_path": "base-path", + "domain_name": "domain-name", + "id": "id", + "stage_name": "stage" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "", + "type": "string" } } }" @@ -386,39 +386,39 @@ exports[`Apigateway mappings > should map AWS::ApiGateway::BasePathMapping 1`] = exports[`Apigateway mappings > should map AWS::ApiGateway::Deployment 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudcontrolapi_resource\\": { - \\"resource_22C949BF\\": { - \\"desired_state\\": \\"{\\\\\\"DeploymentCanarySettings\\\\\\":{\\\\\\"PercentTraffic\\\\\\":50,\\\\\\"StageVariableOverrides\\\\\\":{\\\\\\"stage-variable\\\\\\":\\\\\\"stage-variable-value\\\\\\"},\\\\\\"UseStageCache\\\\\\":true},\\\\\\"Description\\\\\\":\\\\\\"description\\\\\\",\\\\\\"RestApiId\\\\\\":\\\\\\"rest-api-id\\\\\\",\\\\\\"StageDescription\\\\\\":{\\\\\\"AccessLogSetting\\\\\\":{\\\\\\"DestinationArn\\\\\\":\\\\\\"destination-arn\\\\\\"},\\\\\\"CacheClusterEnabled\\\\\\":true,\\\\\\"CacheClusterSize\\\\\\":\\\\\\"cache-cluster-size\\\\\\",\\\\\\"CacheDataEncrypted\\\\\\":true,\\\\\\"CacheTtlInSeconds\\\\\\":60,\\\\\\"CachingEnabled\\\\\\":true,\\\\\\"CanarySetting\\\\\\":{\\\\\\"PercentTraffic\\\\\\":50,\\\\\\"StageVariableOverrides\\\\\\":{\\\\\\"stage-variable\\\\\\":\\\\\\"stage-variable-value\\\\\\"}},\\\\\\"ClientCertificateId\\\\\\":\\\\\\"client-certificate-id\\\\\\",\\\\\\"DataTraceEnabled\\\\\\":true,\\\\\\"DocumentationVersion\\\\\\":\\\\\\"documentation-version\\\\\\",\\\\\\"LoggingLevel\\\\\\":\\\\\\"logging-level\\\\\\",\\\\\\"MethodSettings\\\\\\":[{\\\\\\"CacheDataEncrypted\\\\\\":true,\\\\\\"CacheTtlInSeconds\\\\\\":60,\\\\\\"CachingEnabled\\\\\\":true,\\\\\\"DataTraceEnabled\\\\\\":true,\\\\\\"HttpMethod\\\\\\":\\\\\\"http-method\\\\\\",\\\\\\"LoggingLevel\\\\\\":\\\\\\"logging-level\\\\\\",\\\\\\"MetricsEnabled\\\\\\":true,\\\\\\"ResourcePath\\\\\\":\\\\\\"resource-path\\\\\\",\\\\\\"ThrottlingBurstLimit\\\\\\":60,\\\\\\"ThrottlingRateLimit\\\\\\":60}],\\\\\\"MetricsEnabled\\\\\\":true,\\\\\\"ThrottlingBurstLimit\\\\\\":60,\\\\\\"ThrottlingRateLimit\\\\\\":60,\\\\\\"TracingEnabled\\\\\\":true},\\\\\\"StageName\\\\\\":\\\\\\"stage-name\\\\\\"}\\", - \\"type_name\\": \\"AWS::ApiGateway::Deployment\\" + "resource": { + "aws_cloudcontrolapi_resource": { + "resource_22C949BF": { + "desired_state": "{\\"DeploymentCanarySettings\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"},\\"UseStageCache\\":true},\\"Description\\":\\"description\\",\\"RestApiId\\":\\"rest-api-id\\",\\"StageDescription\\":{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"CanarySetting\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"}},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DataTraceEnabled\\":true,\\"DocumentationVersion\\":\\"documentation-version\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MethodSettings\\":[{\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"DataTraceEnabled\\":true,\\"HttpMethod\\":\\"http-method\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MetricsEnabled\\":true,\\"ResourcePath\\":\\"resource-path\\",\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60}],\\"MetricsEnabled\\":true,\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60,\\"TracingEnabled\\":true},\\"StageName\\":\\"stage-name\\"}", + "type_name": "AWS::ApiGateway::Deployment" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${jsondecode(aws_cloudcontrolapi_resource.resource_22C949BF.properties).DeploymentId}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${jsondecode(aws_cloudcontrolapi_resource.resource_22C949BF.properties).DeploymentId}", + "type": "string" } } }" @@ -426,39 +426,39 @@ exports[`Apigateway mappings > should map AWS::ApiGateway::Deployment 1`] = ` exports[`Apigateway mappings > should map AWS::ApiGateway::Stage 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudcontrolapi_resource\\": { - \\"resource_22C949BF\\": { - \\"desired_state\\": \\"{\\\\\\"AccessLogSetting\\\\\\":{\\\\\\"DestinationArn\\\\\\":\\\\\\"destination-arn\\\\\\"},\\\\\\"CacheClusterEnabled\\\\\\":true,\\\\\\"CacheClusterSize\\\\\\":\\\\\\"cache-cluster-size\\\\\\",\\\\\\"CanarySetting\\\\\\":{\\\\\\"PercentTraffic\\\\\\":50,\\\\\\"StageVariableOverrides\\\\\\":{\\\\\\"stage-variable\\\\\\":\\\\\\"stage-variable-value\\\\\\"}},\\\\\\"ClientCertificateId\\\\\\":\\\\\\"client-certificate-id\\\\\\",\\\\\\"DeploymentId\\\\\\":\\\\\\"deployment-id\\\\\\",\\\\\\"Description\\\\\\":\\\\\\"description\\\\\\",\\\\\\"DocumentationVersion\\\\\\":\\\\\\"documentation-version\\\\\\",\\\\\\"MethodSettings\\\\\\":[],\\\\\\"RestApiId\\\\\\":\\\\\\"rest-api-id\\\\\\",\\\\\\"StageName\\\\\\":\\\\\\"stage-name\\\\\\",\\\\\\"TracingEnabled\\\\\\":true}\\", - \\"type_name\\": \\"AWS::ApiGateway::Stage\\" + "resource": { + "aws_cloudcontrolapi_resource": { + "resource_22C949BF": { + "desired_state": "{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CanarySetting\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"}},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DeploymentId\\":\\"deployment-id\\",\\"Description\\":\\"description\\",\\"DocumentationVersion\\":\\"documentation-version\\",\\"MethodSettings\\":[],\\"RestApiId\\":\\"rest-api-id\\",\\"StageName\\":\\"stage-name\\",\\"TracingEnabled\\":true}", + "type_name": "AWS::ApiGateway::Stage" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap b/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap index 64a78f5..8183345 100644 --- a/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap @@ -2,106 +2,106 @@ exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API with schema 1`] = ` "{ - \\"data\\": { - \\"aws_partition\\": { - \\"aws-partition\\": { + "data": { + "aws_partition": { + "aws-partition": { } } }, - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ], - \\"time\\": [ + "time": [ { } ] }, - \\"resource\\": { - \\"aws_appsync_api_key\\": { - \\"api_DefaultApiKey_6AB8D7C4\\": { - \\"api_id\\": \\"\${aws_appsync_graphql_api.api_C8550315.id}\\" + "resource": { + "aws_appsync_api_key": { + "api_DefaultApiKey_6AB8D7C4": { + "api_id": "\${aws_appsync_graphql_api.api_C8550315.id}" } }, - \\"aws_appsync_graphql_api\\": { - \\"api_C8550315\\": { - \\"authentication_type\\": \\"API_KEY\\", - \\"depends_on\\": [ - \\"time_sleep.api_ApiLogsRole_Resource-wait_D6CED63C\\", - \\"aws_iam_role_policy_attachment.api_ApiLogsRole_Resource-managed-policy-0_A6E116C1\\" + "aws_appsync_graphql_api": { + "api_C8550315": { + "authentication_type": "API_KEY", + "depends_on": [ + "time_sleep.api_ApiLogsRole_Resource-wait_D6CED63C", + "aws_iam_role_policy_attachment.api_ApiLogsRole_Resource-managed-policy-0_A6E116C1" ], - \\"log_config\\": { - \\"cloudwatch_logs_role_arn\\": \\"\${aws_iam_role.api_ApiLogsRole_56BEE3F1.arn}\\", - \\"exclude_verbose_content\\": false, - \\"field_log_level\\": \\"ALL\\" + "log_config": { + "cloudwatch_logs_role_arn": "\${aws_iam_role.api_ApiLogsRole_56BEE3F1.arn}", + "exclude_verbose_content": false, + "field_log_level": "ALL" }, - \\"name\\": \\"api-name\\", - \\"schema\\": \\"\${join(\\\\\\"\\\\\\", [\\\\\\"type AccountQueryResult {\\\\\\\\n cognitoIdentityId: String\\\\\\\\n email: String\\\\\\\\n tenants: [TenantOfUser!]\\\\\\\\n userId: String\\\\\\\\n uiConfig: String\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype EntityMeta {\\\\\\\\n createdAt: String!\\\\\\\\n updatedAt: String\\\\\\\\n uuid: ID!\\\\\\\\n version: Int!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Error {\\\\\\\\n errorInfo: ErrorInfo!\\\\\\\\n errorType: ErrorType!\\\\\\\\n message: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype ErrorInfo {\\\\\\\\n AWSrequestID: String!\\\\\\\\n detail: String\\\\\\\\n}\\\\\\\\n\\\\\\\\n# ApplicationError is used when an unexpected error happens.\\\\\\\\n# They should be reported as bugs.\\\\\\\\nenum ErrorType {\\\\\\\\n AccessDenied\\\\\\\\n ApplicationError\\\\\\\\n BadRequest\\\\\\\\n Conflict\\\\\\\\n EntityNotFound\\\\\\\\n ValidationFailed\\\\\\\\n}\\\\\\\\n\\\\\\\\n\\\\\\\\ntype InviteFactory {\\\\\\\\n accepted: Boolean!\\\\\\\\n cancelled: Boolean!\\\\\\\\n deviceGroups: [String]\\\\\\\\n from: Inviter!\\\\\\\\n inviteeRole: InviteeRole!\\\\\\\\n meta: EntityMeta!\\\\\\\\n to: Invitee!\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum InviteeRole {\\\\\\\\n admin\\\\\\\\n editor\\\\\\\\n owner\\\\\\\\n viewer\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum InviteDirection {\\\\\\\\n incoming\\\\\\\\n outgoing\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Invitee {\\\\\\\\n email: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Inviter {\\\\\\\\n avatar: String\\\\\\\\n email: String!\\\\\\\\n tenantName: String!\\\\\\\\n userName: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput InvitesFilterInput {\\\\\\\\n direction: InviteDirection!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype InvitesQueryResult {\\\\\\\\n items: [InviteFactory!]\\\\\\\\n nextStartKey: ID\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput characteristicData {\\\\\\\\n byteEnd: Int!\\\\\\\\n byteStart: Int!\\\\\\\\n format: String!\\\\\\\\n name: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput characteristic {\\\\\\\\n data: [characteristicData!]\\\\\\\\n name: String!\\\\\\\\n uuid: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput CustomCardConfiguration {\\\\\\\\n characteristics: [characteristic!]\\\\\\\\n description: String!\\\\\\\\n name: String!\\\\\\\\n uuid: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype characteristicDataQueryResult {\\\\\\\\n byteEnd: Int\\\\\\\\n byteStart: Int\\\\\\\\n format: String\\\\\\\\n name: String\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype characteristicQueryResult {\\\\\\\\n data: [characteristicDataQueryResult]\\\\\\\\n name: String\\\\\\\\n sample: [Int]\\\\\\\\n uuid: ID\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype CustomCardConfigurationQueryResult {\\\\\\\\n characteristics: [characteristicQueryResult]\\\\\\\\n description: String\\\\\\\\n name: String\\\\\\\\n uuid: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype CustomCardFactory {\\\\\\\\n configuration: CustomCardConfigurationQueryResult!\\\\\\\\n createdAt: String!\\\\\\\\n description: String\\\\\\\\n icon: String\\\\\\\\n id: ID!\\\\\\\\n isPublic: Boolean!\\\\\\\\n service: String!\\\\\\\\n tenant: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype UsageRecord {\\\\\\\\n endpoint: String!\\\\\\\\n sum: Int!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype CustomCardsQueryResult {\\\\\\\\n items: [CustomCardFactory]\\\\\\\\n nextOffset: Int\\\\\\\\n nextStartKey: ID\\\\\\\\n prevOffset: Int\\\\\\\\n total: Int\\\\\\\\n}\\\\\\\\n\\\\\\\\n# Some mutations return the UUID of the newly created entity.\\\\\\\\n# Getting this response does not guarantee that the entity\\\\\\\\n# is immediately available for reading.\\\\\\\\ntype Mutation {\\\\\\\\n acceptInvite(inviteId: ID!): Boolean\\\\\\\\n acceptSIMVendorTerms(\\\\\\\\n vendor: ID!,\\\\\\\\n tenantId: ID!,\\\\\\\\n iccid: ID!,\\\\\\\\n profile: UserProfileInput,\\\\\\\\n ): Boolean\\\\\\\\n activateSIM(iccid: ID!, tenantId: ID!): Boolean\\\\\\\\n addPaymentMethod(tenantId: ID!, paymentMethodNonce: ID!, setAsDefault: Boolean): CustomerQueryResult\\\\\\\\n associateSIM(iccid: ID, eid: ID, puk: String!, tenantId: ID!, replace: Boolean): ID!\\\\\\\\n cancelInvite(inviteId: ID!): Boolean\\\\\\\\n changePlanType(tenantId: ID!, planType: PlanType!, reason: String): Boolean\\\\\\\\n createCustomCard(\\\\\\\\n tenantId: ID!,\\\\\\\\n service: String!,\\\\\\\\n configuration: CustomCardConfiguration!,\\\\\\\\n isPublic: Boolean,\\\\\\\\n icon: String\\\\\\\\n ): ID!\\\\\\\\n createCustomer(tenantId: ID!): Boolean\\\\\\\\n createTenant(tenantName: String): ID!\\\\\\\\n deleteCustomCard(id: ID!, tenantId: ID!): ID!\\\\\\\\n deletePaymentMethod(tenantId: ID!, token: ID!): CustomerQueryResult\\\\\\\\n deleteTenant(tenantId: ID!): Boolean\\\\\\\\n deleteTenantUser(userId: ID!, tenantId: ID!): Boolean\\\\\\\\n # If optional parameter deleteUserPoolEntry is not set, the user pool entry will be deleted\\\\\\\\n deleteUser(deleteUserPoolEntry: Boolean): ID!\\\\\\\\n disassociateSIM(iccid: ID!, tenantId: ID!): Boolean\\\\\\\\n invite(email: String!, inviteeRole: String!, tenantId: ID!, deviceGroups: [String]): ID!\\\\\\\\n onLogin(idToken: ID!): Boolean # must be called after every login\\\\\\\\n publishTenantAggregateEvent(\\\\\\\\n tenantId: ID!,\\\\\\\\n name: String!,\\\\\\\\n aggregateName: String!,\\\\\\\\n aggregateUUID: ID!,\\\\\\\\n createdAt: String!,\\\\\\\\n payload: String\\\\\\\\n ): TenantAggregateEvent\\\\\\\\n publishUserAggregateEvent(\\\\\\\\n userId: ID!,\\\\\\\\n name: String!,\\\\\\\\n aggregateName: String!,\\\\\\\\n aggregateUUID: ID!,\\\\\\\\n createdAt: String!,\\\\\\\\n payload: String\\\\\\\\n ): UserAggregateEvent\\\\\\\\n regenerateApiKey(tenantId: ID!): ID!\\\\\\\\n requestSIMQuotaUpdate(iccid: ID!, tenantId: ID!): Boolean\\\\\\\\n requestSIMTopUpURL(iccid: ID!, tenantId: ID!): Boolean\\\\\\\\n setDefaultPaymentMethod(tenantId: ID!, token: String!): CustomerQueryResult\\\\\\\\n updateDeviceGroups(\\\\\\\\n userId: ID!\\\\\\\\n tenantId: ID!\\\\\\\\n deviceGroups: [String!]\\\\\\\\n ): Boolean\\\\\\\\n\\\\\\\\n updatePlanSettings(tenantId: ID!, planSettings: PlanSettingsInput!): Boolean\\\\\\\\n\\\\\\\\n updateTenantProfile(\\\\\\\\n tenantId: ID!,\\\\\\\\n name: String!,\\\\\\\\n vatId: String,\\\\\\\\n url: String,\\\\\\\\n email: String,\\\\\\\\n avatar: String,\\\\\\\\n phoneNumbers: [PhoneNumberInput!],\\\\\\\\n addresses: [PostalAddressInput!]\\\\\\\\n ): Boolean\\\\\\\\n\\\\\\\\n updateTenantUser(\\\\\\\\n userId: ID!\\\\\\\\n tenantId: ID!\\\\\\\\n role: String!\\\\\\\\n ): Boolean\\\\\\\\n\\\\\\\\n updateUiConfig(uiConfig: String!): Boolean\\\\\\\\n\\\\\\\\n updateUserProfile(\\\\\\\\n name: String!,\\\\\\\\n avatar: String,\\\\\\\\n phoneNumbers: [PhoneNumberInput!],\\\\\\\\n addresses: [PostalAddressInput!],\\\\\\\\n companyId: String\\\\\\\\n companyName: String\\\\\\\\n companyUrl: String\\\\\\\\n companyVatId: String\\\\\\\\n companyEmail: String\\\\\\\\n billingEmail: String\\\\\\\\n billingAuxiliaryEmail: String\\\\\\\\n billingReference: String\\\\\\\\n billingContactFirstName: String\\\\\\\\n billingContactLastName: String\\\\\\\\n ): Boolean\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum Permission {\\\\\\\\n tenant_users_read\\\\\\\\n tenant_users_write\\\\\\\\n tenant_users_write_devices\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype PhoneNumberFactory {\\\\\\\\n type: [String!]!\\\\\\\\n value: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput PhoneNumberInput {\\\\\\\\n type: [PhoneNumberType!]!\\\\\\\\n value: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum PhoneNumberType {\\\\\\\\n cell\\\\\\\\n home\\\\\\\\n text\\\\\\\\n voice\\\\\\\\n work\\\\\\\\n billing\\\\\\\\n company\\\\\\\\n personal\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype PostalAddress {\\\\\\\\n attention: String\\\\\\\\n country: ID!\\\\\\\\n locality: String!\\\\\\\\n postcode: String\\\\\\\\n region: String\\\\\\\\n street: String\\\\\\\\n type: PostalAddressType!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput PostalAddressInput {\\\\\\\\n attention: String\\\\\\\\n country: ID!\\\\\\\\n locality: String!\\\\\\\\n postcode: String\\\\\\\\n region: String\\\\\\\\n street: String\\\\\\\\n type: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum PostalAddressType {\\\\\\\\n billing\\\\\\\\n shipping\\\\\\\\n company\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype ProblemFactory {\\\\\\\\n detail: String\\\\\\\\n occuredAt: String!\\\\\\\\n title: String!\\\\\\\\n type: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Query {\\\\\\\\n account: AccountQueryResult!\\\\\\\\n billingUIClientToken(tenantId: ID!): BillingUIClientToken!\\\\\\\\n customCards(tenantId: ID!, services: [String!], offset: ID, isPublic: Boolean): CustomCardsQueryResult\\\\\\\\n customer(tenantId: ID!): CustomerQueryResult\\\\\\\\n # Listing the incoming invites depends on us knowing the email\\\\\\\\n # of the user which is supplied through the onLogin mutation.\\\\\\\\n # It may take a while until this information is available, so\\\\\\\\n # instead of waiting for that the user can supply their ID token\\\\\\\\n # directly (which contains the email and is signed by Cognito)\\\\\\\\n invites(filter: InvitesFilterInput!, tenantId: ID, startKey: ID, idToken: ID): InvitesQueryResult!\\\\\\\\n sims(tenantId: ID!, filter: simsQueryFilterInput, startKey: ID): SIMsQueryResult!\\\\\\\\n simVendors: SIMVendorsQueryResult!\\\\\\\\n tenantProfile(tenantId: ID!): TenantProfileQueryResult!\\\\\\\\n tenantUsers(tenantId: ID!, startKey: ID): TenantUsersQueryResult!\\\\\\\\n userProfile: UserProfileQueryResult!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype BillingUIClientToken {\\\\\\\\n clientToken: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum RegistrationKey {\\\\\\\\n iccid,\\\\\\\\n eid\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMFactory {\\\\\\\\n activationChangeProblem: ProblemFactory\\\\\\\\n activationChangeRequested: Boolean!\\\\\\\\n active: Boolean!\\\\\\\\n eid: ID\\\\\\\\n iccid: ID!\\\\\\\\n links: SIMLinks!\\\\\\\\n meta: EntityMeta!\\\\\\\\n quota: SIMQuotaFactory\\\\\\\\n quotaUpdateProblem: ProblemFactory\\\\\\\\n registeredWith: RegistrationKey!\\\\\\\\n subscriberApproved: Boolean!\\\\\\\\n subscriberApprovalProblem: ProblemFactory\\\\\\\\n topUpURLRequestProblem: ProblemFactory\\\\\\\\n vendor: SIMVendorFactory!\\\\\\\\n verificationWithVendorProblem: ProblemFactory\\\\\\\\n verifiedWithVendor: Boolean!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMLinks {\\\\\\\\n topUp: SIMTopUpLink\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMQuotaFactory {\\\\\\\\n totalBytes: Int!\\\\\\\\n updatedAt: String!\\\\\\\\n usedBytes: Int!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMTopUpLink {\\\\\\\\n updatedAt: String!\\\\\\\\n url: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMVendorFactory {\\\\\\\\n iccidRegExp: String!\\\\\\\\n links: SIMVendorLinks!\\\\\\\\n meta: EntityMeta!\\\\\\\\n name: String!\\\\\\\\n slug: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMVendorLinks {\\\\\\\\n homepage: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMVendorsQueryResult {\\\\\\\\n items: [SIMVendorFactory!]\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype SIMsQueryResult {\\\\\\\\n items: [SIMFactory!]\\\\\\\\n nextStartKey: ID\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Schema {\\\\\\\\n mutation: Mutation\\\\\\\\n query: Query\\\\\\\\n subscription: Subscription\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype Subscription {\\\\\\\\n # Check out appsync/publishCoreEvents.ts to see the list of published events\\\\\\\\n tenantAggregateEvents(\\\\\\\\n tenantId: ID!,\\\\\\\\n name: String,\\\\\\\\n aggregateName: String,\\\\\\\\n aggregateUUID: ID\\\\\\\\n ): TenantAggregateEvent\\\\\\\\n @aws_subscribe(mutations: [\\\\\\\\\\\\\\"publishTenantAggregateEvent\\\\\\\\\\\\\\"])\\\\\\\\n userAggregateEvents(\\\\\\\\n userId: ID!,\\\\\\\\n name: String,\\\\\\\\n aggregateName: String,\\\\\\\\n aggregateUUID: ID\\\\\\\\n ): UserAggregateEvent\\\\\\\\n @aws_subscribe(mutations: [\\\\\\\\\\\\\\"publishUserAggregateEvent\\\\\\\\\\\\\\"])\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantFactory {\\\\\\\\n tenantId: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantAggregateEvent {\\\\\\\\n aggregateName: String!\\\\\\\\n aggregateUUID: ID!\\\\\\\\n createdAt: String!\\\\\\\\n name: String!\\\\\\\\n payload: String\\\\\\\\n tenantId: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantUserAggregateEvent {\\\\\\\\n aggregateName: String!\\\\\\\\n aggregateUUID: ID!\\\\\\\\n createdAt: String!\\\\\\\\n payload: String\\\\\\\\n role: InviteeRole!\\\\\\\\n tenantUserId: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantOfUser {\\\\\\\\n apiKey: String\\\\\\\\n deviceGroups: [String]!\\\\\\\\n profile: TenantProfileQueryResult\\\\\\\\n role: TenantUserRole\\\\\\\\n tenantId: ID!\\\\\\\\n planType: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantProfileQueryResult {\\\\\\\\n addresses: [PostalAddress!]\\\\\\\\n avatar: String\\\\\\\\n email: String\\\\\\\\n name: String!\\\\\\\\n phoneNumbers: [PhoneNumberFactory!]\\\\\\\\n url: String\\\\\\\\n vatId: String\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantUser {\\\\\\\\n deviceGroups: [String]\\\\\\\\n email: String!\\\\\\\\n name: String!\\\\\\\\n role: TenantUserRole!\\\\\\\\n tenantId: ID!\\\\\\\\n userId: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum TenantUserRole {\\\\\\\\n admin\\\\\\\\n editor\\\\\\\\n owner\\\\\\\\n viewer\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype UserAggregateEvent {\\\\\\\\n aggregateName: String!\\\\\\\\n aggregateUUID: ID!\\\\\\\\n cognitoIdentityId: ID!\\\\\\\\n createdAt: String!\\\\\\\\n name: String!\\\\\\\\n payload: String\\\\\\\\n userId: ID!\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput UserProfileInput {\\\\\\\\n addresses: [PostalAddressInput!],\\\\\\\\n avatar: String,\\\\\\\\n companyId: String,\\\\\\\\n companyName: String,\\\\\\\\n companyUrl: String,\\\\\\\\n companyVatId: String,\\\\\\\\n companyEmail: String,\\\\\\\\n name: String!\\\\\\\\n phoneNumbers: [PhoneNumberInput!]\\\\\\\\n billingEmail: String,\\\\\\\\n billingAuxiliaryEmail: String,\\\\\\\\n billingReference: String,\\\\\\\\n billingContactFirstName: String,\\\\\\\\n billingContactLastName: String\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype UserProfileQueryResult {\\\\\\\\n addresses: [PostalAddress!]\\\\\\\\n avatar: String\\\\\\\\n companyId: String\\\\\\\\n companyName: String\\\\\\\\n companyUrl: String\\\\\\\\n companyVatId: String\\\\\\\\n companyEmail: String\\\\\\\\n name: String\\\\\\\\n phoneNumbers: [PhoneNumberFactory!]\\\\\\\\n billingEmail: String\\\\\\\\n billingAuxiliaryEmail: String\\\\\\\\n billingReference: String\\\\\\\\n billingContactFirstName: String\\\\\\\\n billingContactLastName: String\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype TenantUsersQueryResult {\\\\\\\\n items: [TenantUser!]\\\\\\\\n nextStartKey: ID\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput simsQueryFilterInput {\\\\\\\\n iccid: ID\\\\\\\\n eid: ID\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype PrunedCreditCard {\\\\\\\\n cardType: String!\\\\\\\\n default: Boolean!\\\\\\\\n expirationDate: String!\\\\\\\\n expired: Boolean!\\\\\\\\n last4: String!\\\\\\\\n token: String!\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype CustomerQueryResult {\\\\\\\\n creditCards: [PrunedCreditCard]\\\\\\\\n planType: String!\\\\\\\\n proxyUsageDeclarations: ProxyUsageDeclarations\\\\\\\\n}\\\\\\\\n\\\\\\\\nenum PlanType {\\\\\\\\n DEVELOPER\\\\\\\\n ENTERPRISE\\\\\\\\n PRO\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput PlanSettingsInput {\\\\\\\\n proxyUsageDeclarations: ProxyUsageDeclarationsInput\\\\\\\\n}\\\\\\\\n\\\\\\\\ntype ProxyUsageDeclarations {\\\\\\\\n AGPS: Int\\\\\\\\n GROUND_FIX: Int\\\\\\\\n PGPS: Int\\\\\\\\n}\\\\\\\\n\\\\\\\\ninput ProxyUsageDeclarationsInput {\\\\\\\\n AGPS: Int\\\\\\\\n GROUND_FIX: Int\\\\\\\\n PGPS: Int\\\\\\\\n}\\\\\\\\n\\\\\\"])}\\", - \\"tags\\": { + "name": "api-name", + "schema": "\${join(\\"\\", [\\"type AccountQueryResult {\\\\n cognitoIdentityId: String\\\\n email: String\\\\n tenants: [TenantOfUser!]\\\\n userId: String\\\\n uiConfig: String\\\\n}\\\\n\\\\ntype EntityMeta {\\\\n createdAt: String!\\\\n updatedAt: String\\\\n uuid: ID!\\\\n version: Int!\\\\n}\\\\n\\\\ntype Error {\\\\n errorInfo: ErrorInfo!\\\\n errorType: ErrorType!\\\\n message: String!\\\\n}\\\\n\\\\ntype ErrorInfo {\\\\n AWSrequestID: String!\\\\n detail: String\\\\n}\\\\n\\\\n# ApplicationError is used when an unexpected error happens.\\\\n# They should be reported as bugs.\\\\nenum ErrorType {\\\\n AccessDenied\\\\n ApplicationError\\\\n BadRequest\\\\n Conflict\\\\n EntityNotFound\\\\n ValidationFailed\\\\n}\\\\n\\\\n\\\\ntype InviteFactory {\\\\n accepted: Boolean!\\\\n cancelled: Boolean!\\\\n deviceGroups: [String]\\\\n from: Inviter!\\\\n inviteeRole: InviteeRole!\\\\n meta: EntityMeta!\\\\n to: Invitee!\\\\n}\\\\n\\\\nenum InviteeRole {\\\\n admin\\\\n editor\\\\n owner\\\\n viewer\\\\n}\\\\n\\\\nenum InviteDirection {\\\\n incoming\\\\n outgoing\\\\n}\\\\n\\\\ntype Invitee {\\\\n email: String!\\\\n}\\\\n\\\\ntype Inviter {\\\\n avatar: String\\\\n email: String!\\\\n tenantName: String!\\\\n userName: String!\\\\n}\\\\n\\\\ninput InvitesFilterInput {\\\\n direction: InviteDirection!\\\\n}\\\\n\\\\ntype InvitesQueryResult {\\\\n items: [InviteFactory!]\\\\n nextStartKey: ID\\\\n}\\\\n\\\\ninput characteristicData {\\\\n byteEnd: Int!\\\\n byteStart: Int!\\\\n format: String!\\\\n name: String!\\\\n}\\\\n\\\\ninput characteristic {\\\\n data: [characteristicData!]\\\\n name: String!\\\\n uuid: ID!\\\\n}\\\\n\\\\ninput CustomCardConfiguration {\\\\n characteristics: [characteristic!]\\\\n description: String!\\\\n name: String!\\\\n uuid: String!\\\\n}\\\\n\\\\ntype characteristicDataQueryResult {\\\\n byteEnd: Int\\\\n byteStart: Int\\\\n format: String\\\\n name: String\\\\n}\\\\n\\\\ntype characteristicQueryResult {\\\\n data: [characteristicDataQueryResult]\\\\n name: String\\\\n sample: [Int]\\\\n uuid: ID\\\\n}\\\\n\\\\ntype CustomCardConfigurationQueryResult {\\\\n characteristics: [characteristicQueryResult]\\\\n description: String\\\\n name: String\\\\n uuid: String!\\\\n}\\\\n\\\\ntype CustomCardFactory {\\\\n configuration: CustomCardConfigurationQueryResult!\\\\n createdAt: String!\\\\n description: String\\\\n icon: String\\\\n id: ID!\\\\n isPublic: Boolean!\\\\n service: String!\\\\n tenant: ID!\\\\n}\\\\n\\\\ntype UsageRecord {\\\\n endpoint: String!\\\\n sum: Int!\\\\n}\\\\n\\\\ntype CustomCardsQueryResult {\\\\n items: [CustomCardFactory]\\\\n nextOffset: Int\\\\n nextStartKey: ID\\\\n prevOffset: Int\\\\n total: Int\\\\n}\\\\n\\\\n# Some mutations return the UUID of the newly created entity.\\\\n# Getting this response does not guarantee that the entity\\\\n# is immediately available for reading.\\\\ntype Mutation {\\\\n acceptInvite(inviteId: ID!): Boolean\\\\n acceptSIMVendorTerms(\\\\n vendor: ID!,\\\\n tenantId: ID!,\\\\n iccid: ID!,\\\\n profile: UserProfileInput,\\\\n ): Boolean\\\\n activateSIM(iccid: ID!, tenantId: ID!): Boolean\\\\n addPaymentMethod(tenantId: ID!, paymentMethodNonce: ID!, setAsDefault: Boolean): CustomerQueryResult\\\\n associateSIM(iccid: ID, eid: ID, puk: String!, tenantId: ID!, replace: Boolean): ID!\\\\n cancelInvite(inviteId: ID!): Boolean\\\\n changePlanType(tenantId: ID!, planType: PlanType!, reason: String): Boolean\\\\n createCustomCard(\\\\n tenantId: ID!,\\\\n service: String!,\\\\n configuration: CustomCardConfiguration!,\\\\n isPublic: Boolean,\\\\n icon: String\\\\n ): ID!\\\\n createCustomer(tenantId: ID!): Boolean\\\\n createTenant(tenantName: String): ID!\\\\n deleteCustomCard(id: ID!, tenantId: ID!): ID!\\\\n deletePaymentMethod(tenantId: ID!, token: ID!): CustomerQueryResult\\\\n deleteTenant(tenantId: ID!): Boolean\\\\n deleteTenantUser(userId: ID!, tenantId: ID!): Boolean\\\\n # If optional parameter deleteUserPoolEntry is not set, the user pool entry will be deleted\\\\n deleteUser(deleteUserPoolEntry: Boolean): ID!\\\\n disassociateSIM(iccid: ID!, tenantId: ID!): Boolean\\\\n invite(email: String!, inviteeRole: String!, tenantId: ID!, deviceGroups: [String]): ID!\\\\n onLogin(idToken: ID!): Boolean # must be called after every login\\\\n publishTenantAggregateEvent(\\\\n tenantId: ID!,\\\\n name: String!,\\\\n aggregateName: String!,\\\\n aggregateUUID: ID!,\\\\n createdAt: String!,\\\\n payload: String\\\\n ): TenantAggregateEvent\\\\n publishUserAggregateEvent(\\\\n userId: ID!,\\\\n name: String!,\\\\n aggregateName: String!,\\\\n aggregateUUID: ID!,\\\\n createdAt: String!,\\\\n payload: String\\\\n ): UserAggregateEvent\\\\n regenerateApiKey(tenantId: ID!): ID!\\\\n requestSIMQuotaUpdate(iccid: ID!, tenantId: ID!): Boolean\\\\n requestSIMTopUpURL(iccid: ID!, tenantId: ID!): Boolean\\\\n setDefaultPaymentMethod(tenantId: ID!, token: String!): CustomerQueryResult\\\\n updateDeviceGroups(\\\\n userId: ID!\\\\n tenantId: ID!\\\\n deviceGroups: [String!]\\\\n ): Boolean\\\\n\\\\n updatePlanSettings(tenantId: ID!, planSettings: PlanSettingsInput!): Boolean\\\\n\\\\n updateTenantProfile(\\\\n tenantId: ID!,\\\\n name: String!,\\\\n vatId: String,\\\\n url: String,\\\\n email: String,\\\\n avatar: String,\\\\n phoneNumbers: [PhoneNumberInput!],\\\\n addresses: [PostalAddressInput!]\\\\n ): Boolean\\\\n\\\\n updateTenantUser(\\\\n userId: ID!\\\\n tenantId: ID!\\\\n role: String!\\\\n ): Boolean\\\\n\\\\n updateUiConfig(uiConfig: String!): Boolean\\\\n\\\\n updateUserProfile(\\\\n name: String!,\\\\n avatar: String,\\\\n phoneNumbers: [PhoneNumberInput!],\\\\n addresses: [PostalAddressInput!],\\\\n companyId: String\\\\n companyName: String\\\\n companyUrl: String\\\\n companyVatId: String\\\\n companyEmail: String\\\\n billingEmail: String\\\\n billingAuxiliaryEmail: String\\\\n billingReference: String\\\\n billingContactFirstName: String\\\\n billingContactLastName: String\\\\n ): Boolean\\\\n}\\\\n\\\\nenum Permission {\\\\n tenant_users_read\\\\n tenant_users_write\\\\n tenant_users_write_devices\\\\n}\\\\n\\\\ntype PhoneNumberFactory {\\\\n type: [String!]!\\\\n value: String!\\\\n}\\\\n\\\\ninput PhoneNumberInput {\\\\n type: [PhoneNumberType!]!\\\\n value: String!\\\\n}\\\\n\\\\nenum PhoneNumberType {\\\\n cell\\\\n home\\\\n text\\\\n voice\\\\n work\\\\n billing\\\\n company\\\\n personal\\\\n}\\\\n\\\\ntype PostalAddress {\\\\n attention: String\\\\n country: ID!\\\\n locality: String!\\\\n postcode: String\\\\n region: String\\\\n street: String\\\\n type: PostalAddressType!\\\\n}\\\\n\\\\ninput PostalAddressInput {\\\\n attention: String\\\\n country: ID!\\\\n locality: String!\\\\n postcode: String\\\\n region: String\\\\n street: String\\\\n type: String!\\\\n}\\\\n\\\\nenum PostalAddressType {\\\\n billing\\\\n shipping\\\\n company\\\\n}\\\\n\\\\ntype ProblemFactory {\\\\n detail: String\\\\n occuredAt: String!\\\\n title: String!\\\\n type: String!\\\\n}\\\\n\\\\ntype Query {\\\\n account: AccountQueryResult!\\\\n billingUIClientToken(tenantId: ID!): BillingUIClientToken!\\\\n customCards(tenantId: ID!, services: [String!], offset: ID, isPublic: Boolean): CustomCardsQueryResult\\\\n customer(tenantId: ID!): CustomerQueryResult\\\\n # Listing the incoming invites depends on us knowing the email\\\\n # of the user which is supplied through the onLogin mutation.\\\\n # It may take a while until this information is available, so\\\\n # instead of waiting for that the user can supply their ID token\\\\n # directly (which contains the email and is signed by Cognito)\\\\n invites(filter: InvitesFilterInput!, tenantId: ID, startKey: ID, idToken: ID): InvitesQueryResult!\\\\n sims(tenantId: ID!, filter: simsQueryFilterInput, startKey: ID): SIMsQueryResult!\\\\n simVendors: SIMVendorsQueryResult!\\\\n tenantProfile(tenantId: ID!): TenantProfileQueryResult!\\\\n tenantUsers(tenantId: ID!, startKey: ID): TenantUsersQueryResult!\\\\n userProfile: UserProfileQueryResult!\\\\n}\\\\n\\\\ntype BillingUIClientToken {\\\\n clientToken: String!\\\\n}\\\\n\\\\nenum RegistrationKey {\\\\n iccid,\\\\n eid\\\\n}\\\\n\\\\ntype SIMFactory {\\\\n activationChangeProblem: ProblemFactory\\\\n activationChangeRequested: Boolean!\\\\n active: Boolean!\\\\n eid: ID\\\\n iccid: ID!\\\\n links: SIMLinks!\\\\n meta: EntityMeta!\\\\n quota: SIMQuotaFactory\\\\n quotaUpdateProblem: ProblemFactory\\\\n registeredWith: RegistrationKey!\\\\n subscriberApproved: Boolean!\\\\n subscriberApprovalProblem: ProblemFactory\\\\n topUpURLRequestProblem: ProblemFactory\\\\n vendor: SIMVendorFactory!\\\\n verificationWithVendorProblem: ProblemFactory\\\\n verifiedWithVendor: Boolean!\\\\n}\\\\n\\\\ntype SIMLinks {\\\\n topUp: SIMTopUpLink\\\\n}\\\\n\\\\ntype SIMQuotaFactory {\\\\n totalBytes: Int!\\\\n updatedAt: String!\\\\n usedBytes: Int!\\\\n}\\\\n\\\\ntype SIMTopUpLink {\\\\n updatedAt: String!\\\\n url: String!\\\\n}\\\\n\\\\ntype SIMVendorFactory {\\\\n iccidRegExp: String!\\\\n links: SIMVendorLinks!\\\\n meta: EntityMeta!\\\\n name: String!\\\\n slug: String!\\\\n}\\\\n\\\\ntype SIMVendorLinks {\\\\n homepage: String!\\\\n}\\\\n\\\\ntype SIMVendorsQueryResult {\\\\n items: [SIMVendorFactory!]\\\\n}\\\\n\\\\ntype SIMsQueryResult {\\\\n items: [SIMFactory!]\\\\n nextStartKey: ID\\\\n}\\\\n\\\\ntype Schema {\\\\n mutation: Mutation\\\\n query: Query\\\\n subscription: Subscription\\\\n}\\\\n\\\\ntype Subscription {\\\\n # Check out appsync/publishCoreEvents.ts to see the list of published events\\\\n tenantAggregateEvents(\\\\n tenantId: ID!,\\\\n name: String,\\\\n aggregateName: String,\\\\n aggregateUUID: ID\\\\n ): TenantAggregateEvent\\\\n @aws_subscribe(mutations: [\\\\\\"publishTenantAggregateEvent\\\\\\"])\\\\n userAggregateEvents(\\\\n userId: ID!,\\\\n name: String,\\\\n aggregateName: String,\\\\n aggregateUUID: ID\\\\n ): UserAggregateEvent\\\\n @aws_subscribe(mutations: [\\\\\\"publishUserAggregateEvent\\\\\\"])\\\\n}\\\\n\\\\ntype TenantFactory {\\\\n tenantId: ID!\\\\n}\\\\n\\\\ntype TenantAggregateEvent {\\\\n aggregateName: String!\\\\n aggregateUUID: ID!\\\\n createdAt: String!\\\\n name: String!\\\\n payload: String\\\\n tenantId: ID!\\\\n}\\\\n\\\\ntype TenantUserAggregateEvent {\\\\n aggregateName: String!\\\\n aggregateUUID: ID!\\\\n createdAt: String!\\\\n payload: String\\\\n role: InviteeRole!\\\\n tenantUserId: ID!\\\\n}\\\\n\\\\ntype TenantOfUser {\\\\n apiKey: String\\\\n deviceGroups: [String]!\\\\n profile: TenantProfileQueryResult\\\\n role: TenantUserRole\\\\n tenantId: ID!\\\\n planType: String!\\\\n}\\\\n\\\\ntype TenantProfileQueryResult {\\\\n addresses: [PostalAddress!]\\\\n avatar: String\\\\n email: String\\\\n name: String!\\\\n phoneNumbers: [PhoneNumberFactory!]\\\\n url: String\\\\n vatId: String\\\\n}\\\\n\\\\ntype TenantUser {\\\\n deviceGroups: [String]\\\\n email: String!\\\\n name: String!\\\\n role: TenantUserRole!\\\\n tenantId: ID!\\\\n userId: ID!\\\\n}\\\\n\\\\nenum TenantUserRole {\\\\n admin\\\\n editor\\\\n owner\\\\n viewer\\\\n}\\\\n\\\\ntype UserAggregateEvent {\\\\n aggregateName: String!\\\\n aggregateUUID: ID!\\\\n cognitoIdentityId: ID!\\\\n createdAt: String!\\\\n name: String!\\\\n payload: String\\\\n userId: ID!\\\\n}\\\\n\\\\ninput UserProfileInput {\\\\n addresses: [PostalAddressInput!],\\\\n avatar: String,\\\\n companyId: String,\\\\n companyName: String,\\\\n companyUrl: String,\\\\n companyVatId: String,\\\\n companyEmail: String,\\\\n name: String!\\\\n phoneNumbers: [PhoneNumberInput!]\\\\n billingEmail: String,\\\\n billingAuxiliaryEmail: String,\\\\n billingReference: String,\\\\n billingContactFirstName: String,\\\\n billingContactLastName: String\\\\n}\\\\n\\\\ntype UserProfileQueryResult {\\\\n addresses: [PostalAddress!]\\\\n avatar: String\\\\n companyId: String\\\\n companyName: String\\\\n companyUrl: String\\\\n companyVatId: String\\\\n companyEmail: String\\\\n name: String\\\\n phoneNumbers: [PhoneNumberFactory!]\\\\n billingEmail: String\\\\n billingAuxiliaryEmail: String\\\\n billingReference: String\\\\n billingContactFirstName: String\\\\n billingContactLastName: String\\\\n}\\\\n\\\\ntype TenantUsersQueryResult {\\\\n items: [TenantUser!]\\\\n nextStartKey: ID\\\\n}\\\\n\\\\ninput simsQueryFilterInput {\\\\n iccid: ID\\\\n eid: ID\\\\n}\\\\n\\\\ntype PrunedCreditCard {\\\\n cardType: String!\\\\n default: Boolean!\\\\n expirationDate: String!\\\\n expired: Boolean!\\\\n last4: String!\\\\n token: String!\\\\n}\\\\n\\\\ntype CustomerQueryResult {\\\\n creditCards: [PrunedCreditCard]\\\\n planType: String!\\\\n proxyUsageDeclarations: ProxyUsageDeclarations\\\\n}\\\\n\\\\nenum PlanType {\\\\n DEVELOPER\\\\n ENTERPRISE\\\\n PRO\\\\n}\\\\n\\\\ninput PlanSettingsInput {\\\\n proxyUsageDeclarations: ProxyUsageDeclarationsInput\\\\n}\\\\n\\\\ntype ProxyUsageDeclarations {\\\\n AGPS: Int\\\\n GROUND_FIX: Int\\\\n PGPS: Int\\\\n}\\\\n\\\\ninput ProxyUsageDeclarationsInput {\\\\n AGPS: Int\\\\n GROUND_FIX: Int\\\\n PGPS: Int\\\\n}\\\\n\\"])}", + "tags": { }, - \\"visibility\\": \\"PRIVATE\\", - \\"xray_enabled\\": true + "visibility": "PRIVATE", + "xray_enabled": true } }, - \\"aws_cloudwatch_log_group\\": { - \\"api_LogRetention_531D9956\\": { - \\"name\\": \\"\${join(\\\\\\"\\\\\\", [\\\\\\"/aws/appsync/apis/\\\\\\", aws_appsync_graphql_api.api_C8550315.id])}\\", - \\"skip_destroy\\": true + "aws_cloudwatch_log_group": { + "api_LogRetention_531D9956": { + "name": "\${join(\\"\\", [\\"/aws/appsync/apis/\\", aws_appsync_graphql_api.api_C8550315.id])}", + "skip_destroy": true } }, - \\"aws_iam_role\\": { - \\"api_ApiLogsRole_56BEE3F1\\": { - \\"assume_role_policy\\": \\"\${jsonencode({\\\\\\"Statement\\\\\\" = [{\\\\\\"Action\\\\\\" = \\\\\\"sts:AssumeRole\\\\\\", \\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\", \\\\\\"Principal\\\\\\" = {\\\\\\"Service\\\\\\" = \\\\\\"appsync.amazonaws.com\\\\\\"}}], \\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\"})}\\" + "aws_iam_role": { + "api_ApiLogsRole_56BEE3F1": { + "assume_role_policy": "\${jsonencode({\\"Statement\\" = [{\\"Action\\" = \\"sts:AssumeRole\\", \\"Effect\\" = \\"Allow\\", \\"Principal\\" = {\\"Service\\" = \\"appsync.amazonaws.com\\"}}], \\"Version\\" = \\"2012-10-17\\"})}" } }, - \\"aws_iam_role_policy_attachment\\": { - \\"api_ApiLogsRole_Resource-managed-policy-0_A6E116C1\\": { - \\"depends_on\\": [ - \\"time_sleep.api_ApiLogsRole_Resource-wait_D6CED63C\\" + "aws_iam_role_policy_attachment": { + "api_ApiLogsRole_Resource-managed-policy-0_A6E116C1": { + "depends_on": [ + "time_sleep.api_ApiLogsRole_Resource-wait_D6CED63C" ], - \\"policy_arn\\": \\"\${join(\\\\\\"\\\\\\", [\\\\\\"arn:\\\\\\", data.aws_partition.aws-partition.partition, \\\\\\":iam::aws:policy/service-role/AWSAppSyncPushToCloudWatchLogs\\\\\\"])}\\", - \\"role\\": \\"\${aws_iam_role.api_ApiLogsRole_56BEE3F1.name}\\" + "policy_arn": "\${join(\\"\\", [\\"arn:\\", data.aws_partition.aws-partition.partition, \\":iam::aws:policy/service-role/AWSAppSyncPushToCloudWatchLogs\\"])}", + "role": "\${aws_iam_role.api_ApiLogsRole_56BEE3F1.name}" } }, - \\"aws_s3_bucket\\": { - \\"AssetBucket\\": { + "aws_s3_bucket": { + "AssetBucket": { } }, - \\"aws_s3_object\\": { - \\"asset-asset4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35-object\\": { - \\"bucket\\": \\"\${aws_s3_bucket.AssetBucket.bucket}\\", - \\"key\\": \\"4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35\\", - \\"source\\": \\"assets/asset-4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35/4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35/archive.zip\\", - \\"source_hash\\": \\"4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35\\" + "aws_s3_object": { + "asset-asset4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35-object": { + "bucket": "\${aws_s3_bucket.AssetBucket.bucket}", + "key": "4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35", + "source": "assets/asset-4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35/4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35/archive.zip", + "source_hash": "4e26bf2d0a26f2097fb2b261f22bb51e3f6b4b52635777b1e54edbd8e2d58c35" } }, - \\"time_sleep\\": { - \\"api_ApiLogsRole_Resource-wait_D6CED63C\\": { - \\"create_duration\\": \\"15s\\", - \\"depends_on\\": [ - \\"aws_iam_role.api_ApiLogsRole_56BEE3F1\\" + "time_sleep": { + "api_ApiLogsRole_Resource-wait_D6CED63C": { + "create_duration": "15s", + "depends_on": [ + "aws_iam_role.api_ApiLogsRole_56BEE3F1" ], - \\"provider\\": \\"time\\" + "provider": "time" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" }, - \\"time\\": { - \\"source\\": \\"time\\", - \\"version\\": \\"0.7.2\\" + "time": { + "source": "time", + "version": "0.7.2" } } } @@ -110,87 +110,87 @@ exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API with exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API without schema 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_graphql_api\\": { - \\"resource_22C949BF\\": { - \\"additional_authentication_provider\\": [ + "resource": { + "aws_appsync_graphql_api": { + "resource_22C949BF": { + "additional_authentication_provider": [ { - \\"authentication_type\\": \\"API_KEY\\", - \\"lambda_authorizer_config\\": { - \\"authorizer_result_ttl_in_seconds\\": 60, - \\"authorizer_uri\\": \\"authorizer-uri\\", - \\"identity_validation_expression\\": \\"identity-validation-expression\\" + "authentication_type": "API_KEY", + "lambda_authorizer_config": { + "authorizer_result_ttl_in_seconds": 60, + "authorizer_uri": "authorizer-uri", + "identity_validation_expression": "identity-validation-expression" }, - \\"openid_connect_config\\": { - \\"auth_ttl\\": 60, - \\"client_id\\": \\"client-id\\", - \\"iat_ttl\\": 60, - \\"issuer\\": \\"issuer\\" + "openid_connect_config": { + "auth_ttl": 60, + "client_id": "client-id", + "iat_ttl": 60, + "issuer": "issuer" }, - \\"user_pool_config\\": { - \\"app_id_client_regex\\": \\"app-id-client-regex\\", - \\"aws_region\\": \\"aws-region\\", - \\"user_pool_id\\": \\"user-pool-id\\" + "user_pool_config": { + "app_id_client_regex": "app-id-client-regex", + "aws_region": "aws-region", + "user_pool_id": "user-pool-id" } } ], - \\"authentication_type\\": \\"API_KEY\\", - \\"lambda_authorizer_config\\": { - \\"authorizer_result_ttl_in_seconds\\": 60, - \\"authorizer_uri\\": \\"authorizer-uri\\", - \\"identity_validation_expression\\": \\"identity-validation-expression\\" + "authentication_type": "API_KEY", + "lambda_authorizer_config": { + "authorizer_result_ttl_in_seconds": 60, + "authorizer_uri": "authorizer-uri", + "identity_validation_expression": "identity-validation-expression" }, - \\"log_config\\": { - \\"cloudwatch_logs_role_arn\\": \\"cloud-watch-logs-role-arn\\", - \\"exclude_verbose_content\\": true, - \\"field_log_level\\": \\"field-log-level\\" + "log_config": { + "cloudwatch_logs_role_arn": "cloud-watch-logs-role-arn", + "exclude_verbose_content": true, + "field_log_level": "field-log-level" }, - \\"name\\": \\"api-name\\", - \\"openid_connect_config\\": { - \\"auth_ttl\\": 60, - \\"client_id\\": \\"client-id\\", - \\"iat_ttl\\": 60, - \\"issuer\\": \\"issuer\\" + "name": "api-name", + "openid_connect_config": { + "auth_ttl": 60, + "client_id": "client-id", + "iat_ttl": 60, + "issuer": "issuer" }, - \\"tags\\": { - \\"tag-key\\": \\"tag-value\\" + "tags": { + "tag-key": "tag-value" }, - \\"user_pool_config\\": { - \\"app_id_client_regex\\": \\"app-id-client-regex\\", - \\"aws_region\\": \\"aws-region\\", - \\"default_action\\": \\"ALLOW\\", - \\"user_pool_id\\": \\"user-pool-id\\" + "user_pool_config": { + "app_id_client_regex": "app-id-client-regex", + "aws_region": "aws-region", + "default_action": "ALLOW", + "user_pool_id": "user-pool-id" }, - \\"visibility\\": \\"PUBLIC\\", - \\"xray_enabled\\": true + "visibility": "PUBLIC", + "xray_enabled": true } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_appsync_graphql_api.resource_22C949BF.id, \\\\\\",\\\\\\", aws_appsync_graphql_api.resource_22C949BF.arn, \\\\\\",\\\\\\", replace(replace(aws_appsync_graphql_api.resource_22C949BF.uris[\\\\\\"GRAPHQL\\\\\\"], \\\\\\"https://\\\\\\", \\\\\\"\\\\\\"), \\\\\\"/graphql\\\\\\", \\\\\\"\\\\\\"), \\\\\\",\\\\\\", \\\\\\"\\\\\\", \\\\\\",\\\\\\", aws_appsync_graphql_api.resource_22C949BF.uris[\\\\\\"GRAPHQL\\\\\\"], \\\\\\",\\\\\\", aws_appsync_graphql_api.resource_22C949BF.id, \\\\\\",\\\\\\", replace(replace(aws_appsync_graphql_api.resource_22C949BF.uris[\\\\\\"REALTIME\\\\\\"], \\\\\\"wss://\\\\\\", \\\\\\"\\\\\\"), \\\\\\"/graphql\\\\\\", \\\\\\"\\\\\\"), \\\\\\",\\\\\\", aws_appsync_graphql_api.resource_22C949BF.uris[\\\\\\"REALTIME\\\\\\"]])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_appsync_graphql_api.resource_22C949BF.id, \\",\\", aws_appsync_graphql_api.resource_22C949BF.arn, \\",\\", replace(replace(aws_appsync_graphql_api.resource_22C949BF.uris[\\"GRAPHQL\\"], \\"https://\\", \\"\\"), \\"/graphql\\", \\"\\"), \\",\\", \\"\\", \\",\\", aws_appsync_graphql_api.resource_22C949BF.uris[\\"GRAPHQL\\"], \\",\\", aws_appsync_graphql_api.resource_22C949BF.id, \\",\\", replace(replace(aws_appsync_graphql_api.resource_22C949BF.uris[\\"REALTIME\\"], \\"wss://\\", \\"\\"), \\"/graphql\\", \\"\\"), \\",\\", aws_appsync_graphql_api.resource_22C949BF.uris[\\"REALTIME\\"]])}", + "type": "string" } } }" @@ -198,54 +198,54 @@ exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API with exports[`Appsync mappings > Should translate AWS::AppSync::ApiKey 1`] = ` "{ - \\"data\\": { - \\"aws_caller_identity\\": { - \\"aws-caller-identity\\": { + "data": { + "aws_caller_identity": { + "aws-caller-identity": { } }, - \\"aws_partition\\": { - \\"aws-partition\\": { + "aws_partition": { + "aws-partition": { } }, - \\"aws_region\\": { - \\"aws-region\\": { + "aws_region": { + "aws-region": { } } }, - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_api_key\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"description\\": \\"description\\", - \\"expires\\": \\"2001-09-09T01:46:40.000Z\\" + "resource": { + "aws_appsync_api_key": { + "resource_22C949BF": { + "api_id": "api-id", + "description": "description", + "expires": "2001-09-09T01:46:40.000Z" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_appsync_api_key.resource_22C949BF.key, \\\\\\",\\\\\\", aws_appsync_api_key.resource_22C949BF.id, \\\\\\",\\\\\\", \\\\\\"arn:\${data.aws_partition.aws-partition.partition}:appsync:\${data.aws_region.aws-region.name}:\${data.aws_caller_identity.aws-caller-identity.account_id}:apis/\${aws_appsync_api_key.resource_22C949BF.api_id}/apikeys/undefined\\\\\\"])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_appsync_api_key.resource_22C949BF.key, \\",\\", aws_appsync_api_key.resource_22C949BF.id, \\",\\", \\"arn:\${data.aws_partition.aws-partition.partition}:appsync:\${data.aws_region.aws-region.name}:\${data.aws_caller_identity.aws-caller-identity.account_id}:apis/\${aws_appsync_api_key.resource_22C949BF.api_id}/apikeys/undefined\\"])}", + "type": "string" } } }" @@ -253,87 +253,87 @@ exports[`Appsync mappings > Should translate AWS::AppSync::ApiKey 1`] = ` exports[`Appsync mappings > Should translate AWS::AppSync::DataSource 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_datasource\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"description\\": \\"description\\", - \\"dynamodb_config\\": { - \\"delta_sync_config\\": { - \\"base_table_ttl\\": 60, - \\"delta_sync_table_name\\": \\"delta-sync-table-name\\", - \\"delta_sync_table_ttl\\": 60 + "resource": { + "aws_appsync_datasource": { + "resource_22C949BF": { + "api_id": "api-id", + "description": "description", + "dynamodb_config": { + "delta_sync_config": { + "base_table_ttl": 60, + "delta_sync_table_name": "delta-sync-table-name", + "delta_sync_table_ttl": 60 }, - \\"region\\": \\"aws-region\\", - \\"table_name\\": \\"table-name\\", - \\"use_caller_credentials\\": true, - \\"versioned\\": true + "region": "aws-region", + "table_name": "table-name", + "use_caller_credentials": true, + "versioned": true }, - \\"elasticsearch_config\\": { - \\"endpoint\\": \\"endpoint\\", - \\"region\\": \\"aws-region\\" + "elasticsearch_config": { + "endpoint": "endpoint", + "region": "aws-region" }, - \\"event_bridge_config\\": { - \\"event_bus_arn\\": \\"event-bus-arn\\" + "event_bridge_config": { + "event_bus_arn": "event-bus-arn" }, - \\"http_config\\": { - \\"authorization_config\\": { - \\"authorization_type\\": \\"authorization-type\\", - \\"aws_iam_config\\": { - \\"signing_region\\": \\"signing-region\\", - \\"signing_service_name\\": \\"signing-service-name\\" + "http_config": { + "authorization_config": { + "authorization_type": "authorization-type", + "aws_iam_config": { + "signing_region": "signing-region", + "signing_service_name": "signing-service-name" } }, - \\"endpoint\\": \\"endpoint\\" + "endpoint": "endpoint" }, - \\"lambda_config\\": { - \\"function_arn\\": \\"lambda-function-arn\\" + "lambda_config": { + "function_arn": "lambda-function-arn" }, - \\"name\\": \\"name\\", - \\"opensearchservice_config\\": { - \\"endpoint\\": \\"endpoint\\", - \\"region\\": \\"aws-region\\" + "name": "name", + "opensearchservice_config": { + "endpoint": "endpoint", + "region": "aws-region" }, - \\"relational_database_config\\": { - \\"http_endpoint_config\\": { - \\"aws_secret_store_arn\\": \\"aws-secret-store-arn\\", - \\"database_name\\": \\"database-name\\", - \\"db_cluster_identifier\\": \\"db-cluster-identifier\\", - \\"region\\": \\"aws-region\\", - \\"schema\\": \\"schema\\" + "relational_database_config": { + "http_endpoint_config": { + "aws_secret_store_arn": "aws-secret-store-arn", + "database_name": "database-name", + "db_cluster_identifier": "db-cluster-identifier", + "region": "aws-region", + "schema": "schema" }, - \\"source_type\\": \\"relational-database-source-type\\" + "source_type": "relational-database-source-type" }, - \\"service_role_arn\\": \\"service-role-arn\\", - \\"type\\": \\"type\\" + "service_role_arn": "service-role-arn", + "type": "type" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_appsync_datasource.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_appsync_datasource.resource_22C949BF.id, \\\\\\",\\\\\\", aws_appsync_datasource.resource_22C949BF.name])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_appsync_datasource.resource_22C949BF.arn, \\",\\", aws_appsync_datasource.resource_22C949BF.id, \\",\\", aws_appsync_datasource.resource_22C949BF.name])}", + "type": "string" } } }" @@ -341,39 +341,39 @@ exports[`Appsync mappings > Should translate AWS::AppSync::DataSource 1`] = ` exports[`Appsync mappings > Should translate AWS::AppSync::DomainNameApiAssociation 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_domain_name_api_association\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"domain_name\\": \\"domain-name\\" + "resource": { + "aws_appsync_domain_name_api_association": { + "resource_22C949BF": { + "api_id": "api-id", + "domain_name": "domain-name" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_appsync_domain_name_api_association.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_appsync_domain_name_api_association.resource_22C949BF.id}", + "type": "string" } } }" @@ -381,68 +381,68 @@ exports[`Appsync mappings > Should translate AWS::AppSync::DomainNameApiAssociat exports[`Appsync mappings > Should translate AWS::AppSync::Resolver 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_resolver\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"caching_config\\": { - \\"caching_keys\\": [ - \\"stuff\\" + "resource": { + "aws_appsync_resolver": { + "resource_22C949BF": { + "api_id": "api-id", + "caching_config": { + "caching_keys": [ + "stuff" ], - \\"ttl\\": 60 + "ttl": 60 }, - \\"code\\": \\"code\\", - \\"data_source\\": \\"data-source-name\\", - \\"field\\": \\"field-name\\", - \\"kind\\": \\"kind\\", - \\"max_batch_size\\": 60, - \\"pipeline_config\\": { - \\"functions\\": [ - \\"function\\" + "code": "code", + "data_source": "data-source-name", + "field": "field-name", + "kind": "kind", + "max_batch_size": 60, + "pipeline_config": { + "functions": [ + "function" ] }, - \\"request_template\\": \\"request-mapping-template\\", - \\"response_template\\": \\"response-mapping-template\\", - \\"runtime\\": { - \\"name\\": \\"name\\", - \\"runtime_version\\": \\"runtime-version\\" + "request_template": "request-mapping-template", + "response_template": "response-mapping-template", + "runtime": { + "name": "name", + "runtime_version": "runtime-version" }, - \\"sync_config\\": { - \\"conflict_detection\\": \\"conflict-detection\\", - \\"conflict_handler\\": \\"conflict-handler\\", - \\"lambda_conflict_handler_config\\": { - \\"lambda_conflict_handler_arn\\": \\"lambda-conflict-handler-arn\\" + "sync_config": { + "conflict_detection": "conflict-detection", + "conflict_handler": "conflict-handler", + "lambda_conflict_handler_config": { + "lambda_conflict_handler_arn": "lambda-conflict-handler-arn" } }, - \\"type\\": \\"type-name\\" + "type": "type-name" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_appsync_resolver.resource_22C949BF.field, \\\\\\",\\\\\\", aws_appsync_resolver.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_appsync_resolver.resource_22C949BF.type])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_appsync_resolver.resource_22C949BF.field, \\",\\", aws_appsync_resolver.resource_22C949BF.arn, \\",\\", aws_appsync_resolver.resource_22C949BF.type])}", + "type": "string" } } }" @@ -450,57 +450,57 @@ exports[`Appsync mappings > Should translate AWS::AppSync::Resolver 1`] = ` exports[`Appsync mappings > Should translate AWS::AppSync:FunctionConfiguration 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_appsync_function\\": { - \\"resource_22C949BF\\": { - \\"api_id\\": \\"api-id\\", - \\"code\\": \\"code\\", - \\"data_source\\": \\"data-source-name\\", - \\"description\\": \\"description\\", - \\"function_version\\": \\"function-version\\", - \\"max_batch_size\\": 60, - \\"name\\": \\"name\\", - \\"request_mapping_template\\": \\"request-mapping-template\\", - \\"response_mapping_template\\": \\"response-mapping-template\\", - \\"runtime\\": { - \\"name\\": \\"name\\", - \\"runtime_version\\": \\"runtime-version\\" + "resource": { + "aws_appsync_function": { + "resource_22C949BF": { + "api_id": "api-id", + "code": "code", + "data_source": "data-source-name", + "description": "description", + "function_version": "function-version", + "max_batch_size": 60, + "name": "name", + "request_mapping_template": "request-mapping-template", + "response_mapping_template": "response-mapping-template", + "runtime": { + "name": "name", + "runtime_version": "runtime-version" }, - \\"sync_config\\": { - \\"conflict_detection\\": \\"conflict-detection\\", - \\"conflict_handler\\": \\"conflict-handler\\", - \\"lambda_conflict_handler_config\\": { - \\"lambda_conflict_handler_arn\\": \\"lambda-conflict-handler-arn\\" + "sync_config": { + "conflict_detection": "conflict-detection", + "conflict_handler": "conflict-handler", + "lambda_conflict_handler_config": { + "lambda_conflict_handler_arn": "lambda-conflict-handler-arn" } } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_appsync_function.resource_22C949BF.data_source, \\\\\\",\\\\\\", aws_appsync_function.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_appsync_function.resource_22C949BF.function_id, \\\\\\",\\\\\\", aws_appsync_function.resource_22C949BF.name])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_appsync_function.resource_22C949BF.data_source, \\",\\", aws_appsync_function.resource_22C949BF.arn, \\",\\", aws_appsync_function.resource_22C949BF.function_id, \\",\\", aws_appsync_function.resource_22C949BF.name])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/certificate-manager.spec.ts.snap b/src/__tests__/mappings/__snapshots__/certificate-manager.spec.ts.snap index ba40893..3dddcc5 100644 --- a/src/__tests__/mappings/__snapshots__/certificate-manager.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/certificate-manager.spec.ts.snap @@ -2,75 +2,75 @@ exports[`CertificateManager mappings > should map AWS::CertificateManager::Certificate 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_acm_certificate\\": { - \\"resource_22C949BF\\": { - \\"certificate_authority_arn\\": \\"certificate-authority-arn\\", - \\"domain_name\\": \\"domain-name\\", - \\"key_algorithm\\": \\"key-algorithm\\", - \\"options\\": { - \\"certificate_transparency_logging_preference\\": \\"certificate-transparency-logging-preference\\" + "resource": { + "aws_acm_certificate": { + "resource_22C949BF": { + "certificate_authority_arn": "certificate-authority-arn", + "domain_name": "domain-name", + "key_algorithm": "key-algorithm", + "options": { + "certificate_transparency_logging_preference": "certificate-transparency-logging-preference" }, - \\"subject_alternative_names\\": [ - \\"subject-alternative-name\\" + "subject_alternative_names": [ + "subject-alternative-name" ], - \\"tags\\": { - \\"key\\": \\"value\\" + "tags": { + "key": "value" }, - \\"validation_method\\": \\"DNS\\", - \\"validation_option\\": [ + "validation_method": "DNS", + "validation_option": [ { - \\"domain_name\\": \\"domain-name\\", - \\"validation_domain\\": \\"validation-domain\\" + "domain_name": "domain-name", + "validation_domain": "validation-domain" } ] } }, - \\"aws_acm_certificate_validation\\": { - \\"resource_resource-certvalidation_7A4B7325\\": { - \\"certificate_arn\\": \\"\${aws_acm_certificate.resource_22C949BF.arn}\\", - \\"validation_record_fqdns\\": \\"\${[for record in aws_route53_record.resource_resource-validation-record_CCA35AF6 : record.fqdn]}\\" + "aws_acm_certificate_validation": { + "resource_resource-certvalidation_7A4B7325": { + "certificate_arn": "\${aws_acm_certificate.resource_22C949BF.arn}", + "validation_record_fqdns": "\${[for record in aws_route53_record.resource_resource-validation-record_CCA35AF6 : record.fqdn]}" } }, - \\"aws_route53_record\\": { - \\"resource_resource-validation-record_CCA35AF6\\": { - \\"allow_overwrite\\": true, - \\"for_each\\": \\"\${{\\\\n for dvo in aws_acm_certificate.resource_22C949BF.domain_validation_options : dvo.domain_name => {\\\\n name = dvo.resource_record_name\\\\n record = dvo.resource_record_value\\\\n type = dvo.resource_record_type\\\\n }\\\\n }\\\\n}\\", - \\"name\\": \\"\${each.value.name}\\", - \\"records\\": [ - \\"\${each.value.record}\\" + "aws_route53_record": { + "resource_resource-validation-record_CCA35AF6": { + "allow_overwrite": true, + "for_each": "\${{\\n for dvo in aws_acm_certificate.resource_22C949BF.domain_validation_options : dvo.domain_name => {\\n name = dvo.resource_record_name\\n record = dvo.resource_record_value\\n type = dvo.resource_record_type\\n }\\n }\\n}", + "name": "\${each.value.name}", + "records": [ + "\${each.value.record}" ], - \\"ttl\\": 60, - \\"type\\": \\"\${each.value.type}\\", - \\"zone_id\\": \\"hosted-zone-id\\" + "ttl": 60, + "type": "\${each.value.type}", + "zone_id": "hosted-zone-id" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_acm_certificate_validation.resource_resource-certvalidation_7A4B7325.certificate_arn}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_acm_certificate_validation.resource_resource-certvalidation_7A4B7325.certificate_arn}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap b/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap index 94a3a97..e951cba 100644 --- a/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap @@ -2,38 +2,38 @@ exports[`CloudFront > Should map AWS::CloudFront::CloudFrontOriginAccessIdentity 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudfront_origin_access_identity\\": { - \\"resource_22C949BF\\": { - \\"comment\\": \\"test\\" + "resource": { + "aws_cloudfront_origin_access_identity": { + "resource_22C949BF": { + "comment": "test" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cloudfront_origin_access_identity.resource_22C949BF.id, \\\\\\",\\\\\\", aws_cloudfront_origin_access_identity.resource_22C949BF.s3_canonical_user_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cloudfront_origin_access_identity.resource_22C949BF.id, \\",\\", aws_cloudfront_origin_access_identity.resource_22C949BF.s3_canonical_user_id])}", + "type": "string" } } }" @@ -41,238 +41,238 @@ exports[`CloudFront > Should map AWS::CloudFront::CloudFrontOriginAccessIdentity exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudfront_distribution\\": { - \\"resource_22C949BF\\": { - \\"aliases\\": [ - \\"example.com\\", - \\"example.com\\" + "resource": { + "aws_cloudfront_distribution": { + "resource_22C949BF": { + "aliases": [ + "example.com", + "example.com" ], - \\"comment\\": \\"My CloudFront distribution\\", - \\"continuous_deployment_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"custom_error_response\\": [ + "comment": "My CloudFront distribution", + "continuous_deployment_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "custom_error_response": [ { - \\"error_caching_min_ttl\\": 300, - \\"error_code\\": 404, - \\"response_code\\": 200, - \\"response_page_path\\": \\"/index.html\\" + "error_caching_min_ttl": 300, + "error_code": 404, + "response_code": 200, + "response_page_path": "/index.html" } ], - \\"default_cache_behavior\\": { - \\"allowed_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "default_cache_behavior": { + "allowed_methods": [ + "GET", + "HEAD" ], - \\"cache_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"cached_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "cache_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "cached_methods": [ + "GET", + "HEAD" ], - \\"compress\\": true, - \\"default_ttl\\": 3600, - \\"field_level_encryption_id\\": \\"1234567890abcdef1234567890abcdef\\", - \\"forwarded_values\\": { - \\"cookies\\": { - \\"forward\\": \\"none\\" + "compress": true, + "default_ttl": 3600, + "field_level_encryption_id": "1234567890abcdef1234567890abcdef", + "forwarded_values": { + "cookies": { + "forward": "none" }, - \\"headers\\": [ - \\"*\\" + "headers": [ + "*" ], - \\"query_string\\": false, - \\"query_string_cache_keys\\": [ - \\"*\\" + "query_string": false, + "query_string_cache_keys": [ + "*" ] }, - \\"function_association\\": [ + "function_association": [ { - \\"event_type\\": \\"viewer-request\\", - \\"function_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "viewer-request", + "function_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"lambda_function_association\\": [ + "lambda_function_association": [ { - \\"event_type\\": \\"origin-request\\", - \\"include_body\\": true, - \\"lambda_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "origin-request", + "include_body": true, + "lambda_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"max_ttl\\": 86400, - \\"min_ttl\\": 0, - \\"origin_request_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"realtime_log_config_arn\\": \\"arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution\\", - \\"response_headers_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"smooth_streaming\\": true, - \\"target_origin_id\\": \\"my-target-origin\\", - \\"trusted_key_groups\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "max_ttl": 86400, + "min_ttl": 0, + "origin_request_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "realtime_log_config_arn": "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + "response_headers_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "smooth_streaming": true, + "target_origin_id": "my-target-origin", + "trusted_key_groups": [ + "1234567890abcdef1234567890abcdef" ], - \\"trusted_signers\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "trusted_signers": [ + "1234567890abcdef1234567890abcdef" ], - \\"viewer_protocol_policy\\": \\"redirect-to-https\\" + "viewer_protocol_policy": "redirect-to-https" }, - \\"default_root_object\\": \\"index.html\\", - \\"enabled\\": true, - \\"http_version\\": \\"http2\\", - \\"is_ipv6_enabled\\": true, - \\"logging_config\\": { - \\"bucket\\": \\"my-logs.s3.amazonaws.com\\", - \\"include_cookies\\": true, - \\"prefix\\": \\"myprefix\\" + "default_root_object": "index.html", + "enabled": true, + "http_version": "http2", + "is_ipv6_enabled": true, + "logging_config": { + "bucket": "my-logs.s3.amazonaws.com", + "include_cookies": true, + "prefix": "myprefix" }, - \\"ordered_cache_behavior\\": [ + "ordered_cache_behavior": [ { - \\"allowed_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "allowed_methods": [ + "GET", + "HEAD" ], - \\"cache_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"cached_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "cache_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "cached_methods": [ + "GET", + "HEAD" ], - \\"compress\\": true, - \\"default_ttl\\": 3600, - \\"field_level_encryption_id\\": \\"1234567890abcdef1234567890abcdef\\", - \\"forwarded_values\\": { - \\"cookies\\": { - \\"forward\\": \\"none\\" + "compress": true, + "default_ttl": 3600, + "field_level_encryption_id": "1234567890abcdef1234567890abcdef", + "forwarded_values": { + "cookies": { + "forward": "none" }, - \\"headers\\": [ - \\"*\\" + "headers": [ + "*" ], - \\"query_string\\": false, - \\"query_string_cache_keys\\": [ - \\"*\\" + "query_string": false, + "query_string_cache_keys": [ + "*" ] }, - \\"function_association\\": [ + "function_association": [ { - \\"event_type\\": \\"viewer-request\\", - \\"function_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "viewer-request", + "function_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"lambda_function_association\\": [ + "lambda_function_association": [ { - \\"event_type\\": \\"origin-request\\", - \\"include_body\\": true, - \\"lambda_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "origin-request", + "include_body": true, + "lambda_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"max_ttl\\": 86400, - \\"min_ttl\\": 0, - \\"origin_request_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"path_pattern\\": \\"/images/*\\", - \\"realtime_log_config_arn\\": \\"arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution\\", - \\"response_headers_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"smooth_streaming\\": true, - \\"target_origin_id\\": \\"my-target-origin\\", - \\"trusted_key_groups\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "max_ttl": 86400, + "min_ttl": 0, + "origin_request_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "path_pattern": "/images/*", + "realtime_log_config_arn": "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + "response_headers_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "smooth_streaming": true, + "target_origin_id": "my-target-origin", + "trusted_key_groups": [ + "1234567890abcdef1234567890abcdef" ], - \\"trusted_signers\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "trusted_signers": [ + "1234567890abcdef1234567890abcdef" ], - \\"viewer_protocol_policy\\": \\"redirect-to-https\\" + "viewer_protocol_policy": "redirect-to-https" } ], - \\"origin\\": [ + "origin": [ { - \\"connection_attempts\\": 3, - \\"connection_timeout\\": 10, - \\"custom_header\\": [ + "connection_attempts": 3, + "connection_timeout": 10, + "custom_header": [ { - \\"name\\": \\"MyCustomHeader\\", - \\"value\\": \\"MyCustomValue\\" + "name": "MyCustomHeader", + "value": "MyCustomValue" } ], - \\"custom_origin_config\\": { - \\"http_port\\": 80, - \\"https_port\\": 443, - \\"origin_keepalive_timeout\\": 5, - \\"origin_protocol_policy\\": \\"https-only\\", - \\"origin_read_timeout\\": 30, - \\"origin_ssl_protocols\\": [ - \\"TLSv1.2\\" + "custom_origin_config": { + "http_port": 80, + "https_port": 443, + "origin_keepalive_timeout": 5, + "origin_protocol_policy": "https-only", + "origin_read_timeout": 30, + "origin_ssl_protocols": [ + "TLSv1.2" ] }, - \\"domain_name\\": \\"example.com\\", - \\"origin_access_control_id\\": \\"1234567890abcdef1234567890abcdef\\", - \\"origin_id\\": \\"my-origin\\", - \\"origin_path\\": \\"/mypath\\", - \\"origin_shield\\": { - \\"enabled\\": true + "domain_name": "example.com", + "origin_access_control_id": "1234567890abcdef1234567890abcdef", + "origin_id": "my-origin", + "origin_path": "/mypath", + "origin_shield": { + "enabled": true }, - \\"s3_origin_config\\": { - \\"origin_access_identity\\": \\"origin-access-identity/cloudfront/E127EXAMPLE51Z\\" + "s3_origin_config": { + "origin_access_identity": "origin-access-identity/cloudfront/E127EXAMPLE51Z" } } ], - \\"origin_group\\": [ + "origin_group": [ { - \\"failover_criteria\\": { - \\"status_codes\\": [ + "failover_criteria": { + "status_codes": [ 500, 502 ] }, - \\"member\\": [ + "member": [ { - \\"origin_id\\": \\"my-origin\\" + "origin_id": "my-origin" } ], - \\"origin_id\\": \\"my-origin-group\\" + "origin_id": "my-origin-group" } ], - \\"price_class\\": \\"PriceClass_100\\", - \\"restrictions\\": { - \\"geo_restriction\\": { - \\"locations\\": [ - \\"US\\", - \\"CA\\", - \\"GB\\" + "price_class": "PriceClass_100", + "restrictions": { + "geo_restriction": { + "locations": [ + "US", + "CA", + "GB" ], - \\"restriction_type\\": \\"whitelist\\" + "restriction_type": "whitelist" } }, - \\"staging\\": true, - \\"tags\\": { - \\"Name\\": \\"my-distribution\\" + "staging": true, + "tags": { + "Name": "my-distribution" }, - \\"viewer_certificate\\": { - \\"acm_certificate_arn\\": \\"arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012\\", - \\"minimum_protocol_version\\": \\"TLSv1.2_2019\\", - \\"ssl_support_method\\": \\"sni-only\\" + "viewer_certificate": { + "acm_certificate_arn": "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", + "minimum_protocol_version": "TLSv1.2_2019", + "ssl_support_method": "sni-only" }, - \\"web_acl_id\\": \\"arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl\\" + "web_acl_id": "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cloudfront_distribution.resource_22C949BF.domain_name, \\\\\\",\\\\\\", aws_cloudfront_distribution.resource_22C949BF.id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cloudfront_distribution.resource_22C949BF.domain_name, \\",\\", aws_cloudfront_distribution.resource_22C949BF.id])}", + "type": "string" } } }" @@ -280,128 +280,128 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudfront_distribution\\": { - \\"resource_22C949BF\\": { - \\"default_cache_behavior\\": { - \\"allowed_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "resource": { + "aws_cloudfront_distribution": { + "resource_22C949BF": { + "default_cache_behavior": { + "allowed_methods": [ + "GET", + "HEAD" ], - \\"cache_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"cached_methods\\": [ - \\"GET\\", - \\"HEAD\\" + "cache_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "cached_methods": [ + "GET", + "HEAD" ], - \\"compress\\": true, - \\"default_ttl\\": 3600, - \\"field_level_encryption_id\\": \\"1234567890abcdef1234567890abcdef\\", - \\"forwarded_values\\": { - \\"cookies\\": { - \\"forward\\": \\"none\\" + "compress": true, + "default_ttl": 3600, + "field_level_encryption_id": "1234567890abcdef1234567890abcdef", + "forwarded_values": { + "cookies": { + "forward": "none" }, - \\"headers\\": [ - \\"*\\" + "headers": [ + "*" ], - \\"query_string\\": false, - \\"query_string_cache_keys\\": [ - \\"*\\" + "query_string": false, + "query_string_cache_keys": [ + "*" ] }, - \\"function_association\\": [ + "function_association": [ { - \\"event_type\\": \\"viewer-request\\", - \\"function_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "viewer-request", + "function_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"lambda_function_association\\": [ + "lambda_function_association": [ { - \\"event_type\\": \\"origin-request\\", - \\"include_body\\": true, - \\"lambda_arn\\": \\"arn:aws:lambda:us-east-1:111111111111:function:my-function\\" + "event_type": "origin-request", + "include_body": true, + "lambda_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" } ], - \\"max_ttl\\": 86400, - \\"min_ttl\\": 0, - \\"origin_request_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"realtime_log_config_arn\\": \\"arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution\\", - \\"response_headers_policy_id\\": \\"658327ea-f89d-4fab-a63d-7e88639e58f6\\", - \\"smooth_streaming\\": true, - \\"target_origin_id\\": \\"my-target-origin\\", - \\"trusted_key_groups\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "max_ttl": 86400, + "min_ttl": 0, + "origin_request_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "realtime_log_config_arn": "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + "response_headers_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "smooth_streaming": true, + "target_origin_id": "my-target-origin", + "trusted_key_groups": [ + "1234567890abcdef1234567890abcdef" ], - \\"trusted_signers\\": [ - \\"1234567890abcdef1234567890abcdef\\" + "trusted_signers": [ + "1234567890abcdef1234567890abcdef" ], - \\"viewer_protocol_policy\\": \\"redirect-to-https\\" + "viewer_protocol_policy": "redirect-to-https" }, - \\"enabled\\": true, - \\"origin\\": [ + "enabled": true, + "origin": [ { - \\"connection_attempts\\": 3, - \\"connection_timeout\\": 10, - \\"custom_header\\": [ + "connection_attempts": 3, + "connection_timeout": 10, + "custom_header": [ { - \\"name\\": \\"MyCustomHeader\\", - \\"value\\": \\"MyCustomValue\\" + "name": "MyCustomHeader", + "value": "MyCustomValue" } ], - \\"domain_name\\": \\"example.com\\", - \\"origin_access_control_id\\": \\"1234567890abcdef1234567890abcdef\\", - \\"origin_id\\": \\"my-origin\\", - \\"origin_path\\": \\"/mypath\\", - \\"origin_shield\\": { - \\"enabled\\": true + "domain_name": "example.com", + "origin_access_control_id": "1234567890abcdef1234567890abcdef", + "origin_id": "my-origin", + "origin_path": "/mypath", + "origin_shield": { + "enabled": true }, - \\"s3_origin_config\\": { - \\"origin_access_identity\\": \\"origin-access-identity/cloudfront/E127EXAMPLE51Z\\" + "s3_origin_config": { + "origin_access_identity": "origin-access-identity/cloudfront/E127EXAMPLE51Z" } } ], - \\"restrictions\\": { - \\"geo_restriction\\": { - \\"locations\\": [ - \\"US\\", - \\"CA\\", - \\"GB\\" + "restrictions": { + "geo_restriction": { + "locations": [ + "US", + "CA", + "GB" ], - \\"restriction_type\\": \\"whitelist\\" + "restriction_type": "whitelist" } }, - \\"viewer_certificate\\": { - \\"acm_certificate_arn\\": \\"arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012\\", - \\"minimum_protocol_version\\": \\"TLSv1.2_2019\\", - \\"ssl_support_method\\": \\"sni-only\\" + "viewer_certificate": { + "acm_certificate_arn": "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", + "minimum_protocol_version": "TLSv1.2_2019", + "ssl_support_method": "sni-only" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cloudfront_distribution.resource_22C949BF.domain_name, \\\\\\",\\\\\\", aws_cloudfront_distribution.resource_22C949BF.id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cloudfront_distribution.resource_22C949BF.domain_name, \\",\\", aws_cloudfront_distribution.resource_22C949BF.id])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap b/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap index 896b917..07867e0 100644 --- a/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap @@ -2,57 +2,60 @@ exports[`Cognito mappings > Should map AWS::Cognito::IdentityPool 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cognito_identity_pool\\": { - \\"resource_22C949BF\\": { - \\"allow_classic_flow\\": true, - \\"allow_unauthenticated_identities\\": true, - \\"cognito_identity_providers\\": [ + "resource": { + "aws_cognito_identity_pool": { + "resource_22C949BF": { + "allow_classic_flow": true, + "allow_unauthenticated_identities": true, + "cognito_identity_providers": [ { - \\"client_id\\": \\"client-id\\", - \\"provider_name\\": \\"provider-name\\", - \\"server_side_token_check\\": true + "client_id": "client-id", + "provider_name": "provider-name", + "server_side_token_check": true } ], - \\"developer_provider_name\\": \\"developer-provider-name\\", - \\"identity_pool_name\\": \\"identity-pool-name\\", - \\"openid_connect_provider_arns\\": [ - \\"open-id-connect-provider-arn\\" + "developer_provider_name": "developer-provider-name", + "identity_pool_name": "identity-pool-name", + "openid_connect_provider_arns": [ + "open-id-connect-provider-arn" ], - \\"saml_provider_arns\\": [ - \\"saml-provider-arn\\" + "saml_provider_arns": [ + "saml-provider-arn" ], - \\"supported_login_providers\\": { - \\"login-provider\\": \\"login-provider\\" + "supported_login_providers": { + "login-provider": "login-provider" + }, + "tags": { + "key": "value" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cognito_identity_pool.resource_22C949BF.id, \\\\\\",\\\\\\", aws_cognito_identity_pool.resource_22C949BF.identity_pool_name])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cognito_identity_pool.resource_22C949BF.id, \\",\\", aws_cognito_identity_pool.resource_22C949BF.identity_pool_name])}", + "type": "string" } } }" @@ -60,57 +63,57 @@ exports[`Cognito mappings > Should map AWS::Cognito::IdentityPool 1`] = ` exports[`Cognito mappings > Should map AWS::Cognito::IdentityPoolRoleAttachment 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cognito_identity_pool_roles_attachment\\": { - \\"resource_22C949BF\\": { - \\"identity_pool_id\\": \\"identity-pool-id\\", - \\"role_mapping\\": [ + "resource": { + "aws_cognito_identity_pool_roles_attachment": { + "resource_22C949BF": { + "identity_pool_id": "identity-pool-id", + "role_mapping": [ { - \\"ambiguous_role_resolution\\": \\"AuthenticatedRole\\", - \\"identity_provider\\": \\"cognito-idp\\", - \\"mapping_rule\\": [ + "ambiguous_role_resolution": "AuthenticatedRole", + "identity_provider": "cognito-idp", + "mapping_rule": [ { - \\"claim\\": \\"claim\\", - \\"match_type\\": \\"Equals\\", - \\"role_arn\\": \\"role-arn\\", - \\"value\\": \\"value\\" + "claim": "claim", + "match_type": "Equals", + "role_arn": "role-arn", + "value": "value" } ], - \\"type\\": \\"Token\\" + "type": "Token" } ], - \\"roles\\": { - \\"authenticated\\": \\"authenticated-role\\", - \\"unauthenticated\\": \\"unauthenticated-role\\" + "roles": { + "authenticated": "authenticated-role", + "unauthenticated": "unauthenticated-role" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_cognito_identity_pool_roles_attachment.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_cognito_identity_pool_roles_attachment.resource_22C949BF.id}", + "type": "string" } } }" @@ -118,153 +121,153 @@ exports[`Cognito mappings > Should map AWS::Cognito::IdentityPoolRoleAttachment exports[`Cognito mappings > Should map AWS::Cognito::UserPool 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cognito_user_pool\\": { - \\"resource_22C949BF\\": { - \\"account_recovery_setting\\": { - \\"recovery_mechanism\\": [ + "resource": { + "aws_cognito_user_pool": { + "resource_22C949BF": { + "account_recovery_setting": { + "recovery_mechanism": [ { - \\"name\\": \\"name\\", - \\"priority\\": 60 + "name": "name", + "priority": 60 } ] }, - \\"admin_create_user_config\\": { - \\"allow_admin_create_user_only\\": true, - \\"invite_message_template\\": { - \\"email_message\\": \\"email-message\\", - \\"email_subject\\": \\"email-subject\\", - \\"sms_message\\": \\"sms-message\\" + "admin_create_user_config": { + "allow_admin_create_user_only": true, + "invite_message_template": { + "email_message": "email-message", + "email_subject": "email-subject", + "sms_message": "sms-message" } }, - \\"alias_attributes\\": [ - \\"email\\" + "alias_attributes": [ + "email" ], - \\"auto_verified_attributes\\": [ - \\"email\\" + "auto_verified_attributes": [ + "email" ], - \\"deletion_protection\\": \\"true\\", - \\"device_configuration\\": { - \\"challenge_required_on_new_device\\": true, - \\"device_only_remembered_on_user_prompt\\": true + "deletion_protection": "true", + "device_configuration": { + "challenge_required_on_new_device": true, + "device_only_remembered_on_user_prompt": true }, - \\"email_configuration\\": { - \\"configuration_set\\": \\"configuration-set\\", - \\"email_sending_account\\": \\"COGNITO_DEFAULT\\", - \\"from_email_address\\": \\"from\\", - \\"reply_to_email_address\\": \\"reply-to-email-address\\", - \\"source_arn\\": \\"source-arn\\" + "email_configuration": { + "configuration_set": "configuration-set", + "email_sending_account": "COGNITO_DEFAULT", + "from_email_address": "from", + "reply_to_email_address": "reply-to-email-address", + "source_arn": "source-arn" }, - \\"lambda_config\\": { - \\"create_auth_challenge\\": \\"create-auth-challenge\\", - \\"custom_email_sender\\": { - \\"lambda_arn\\": \\"lambda-arn\\", - \\"lambda_version\\": \\"lambda-version\\" + "lambda_config": { + "create_auth_challenge": "create-auth-challenge", + "custom_email_sender": { + "lambda_arn": "lambda-arn", + "lambda_version": "lambda-version" }, - \\"custom_message\\": \\"custom-message\\", - \\"custom_sms_sender\\": { - \\"lambda_arn\\": \\"lambda-arn\\", - \\"lambda_version\\": \\"lambda-version\\" + "custom_message": "custom-message", + "custom_sms_sender": { + "lambda_arn": "lambda-arn", + "lambda_version": "lambda-version" }, - \\"define_auth_challenge\\": \\"define-auth-challenge\\", - \\"kms_key_id\\": \\"kms-key-id\\", - \\"post_authentication\\": \\"post-authentication\\", - \\"post_confirmation\\": \\"post-confirmation\\", - \\"pre_authentication\\": \\"pre-authentication\\", - \\"pre_sign_up\\": \\"pre-sign-up\\", - \\"pre_token_generation\\": \\"pre-token-generation\\", - \\"user_migration\\": \\"user-migration\\", - \\"verify_auth_challenge_response\\": \\"verify-auth-challenge-response\\" + "define_auth_challenge": "define-auth-challenge", + "kms_key_id": "kms-key-id", + "post_authentication": "post-authentication", + "post_confirmation": "post-confirmation", + "pre_authentication": "pre-authentication", + "pre_sign_up": "pre-sign-up", + "pre_token_generation": "pre-token-generation", + "user_migration": "user-migration", + "verify_auth_challenge_response": "verify-auth-challenge-response" }, - \\"mfa_configuration\\": \\"ON\\", - \\"name\\": \\"user-pool-name\\", - \\"password_policy\\": { - \\"minimum_length\\": 60, - \\"require_lowercase\\": true, - \\"require_numbers\\": true, - \\"require_symbols\\": true, - \\"require_uppercase\\": true, - \\"temporary_password_validity_days\\": 60 + "mfa_configuration": "ON", + "name": "user-pool-name", + "password_policy": { + "minimum_length": 60, + "require_lowercase": true, + "require_numbers": true, + "require_symbols": true, + "require_uppercase": true, + "temporary_password_validity_days": 60 }, - \\"schema\\": [ + "schema": [ { - \\"attribute_data_type\\": \\"String\\", - \\"developer_only_attribute\\": false, - \\"mutable\\": true, - \\"name\\": \\"name\\", - \\"number_attribute_constraints\\": { - \\"max_value\\": \\"max-value\\", - \\"min_value\\": \\"min-value\\" + "attribute_data_type": "String", + "developer_only_attribute": false, + "mutable": true, + "name": "name", + "number_attribute_constraints": { + "max_value": "max-value", + "min_value": "min-value" }, - \\"required\\": true, - \\"string_attribute_constraints\\": { - \\"max_length\\": \\"max-length\\", - \\"min_length\\": \\"min-length\\" + "required": true, + "string_attribute_constraints": { + "max_length": "max-length", + "min_length": "min-length" } } ], - \\"sms_authentication_message\\": \\"sms-authentication-message\\", - \\"sms_configuration\\": { - \\"external_id\\": \\"external-id\\", - \\"sns_caller_arn\\": \\"sns-caller-arn\\", - \\"sns_region\\": \\"sns-region\\" + "sms_authentication_message": "sms-authentication-message", + "sms_configuration": { + "external_id": "external-id", + "sns_caller_arn": "sns-caller-arn", + "sns_region": "sns-region" }, - \\"software_token_mfa_configuration\\": { - \\"enabled\\": false + "software_token_mfa_configuration": { + "enabled": false }, - \\"tags\\": { - \\"user-pool-tag\\": \\"user-pool-tag\\" + "tags": { + "user-pool-tag": "user-pool-tag" }, - \\"user_attribute_update_settings\\": { - \\"attributes_require_verification_before_update\\": [ - \\"email\\" + "user_attribute_update_settings": { + "attributes_require_verification_before_update": [ + "email" ] }, - \\"user_pool_add_ons\\": { - \\"advanced_security_mode\\": \\"OFF\\" + "user_pool_add_ons": { + "advanced_security_mode": "OFF" }, - \\"username_attributes\\": [ - \\"email\\" + "username_attributes": [ + "email" ], - \\"username_configuration\\": { - \\"case_sensitive\\": true + "username_configuration": { + "case_sensitive": true }, - \\"verification_message_template\\": { - \\"default_email_option\\": \\"CONFIRM_WITH_CODE\\", - \\"email_message\\": \\"email-message\\", - \\"email_message_by_link\\": \\"email-message-by-link\\", - \\"email_subject\\": \\"email-subject\\", - \\"email_subject_by_link\\": \\"email-subject-by-link\\", - \\"sms_message\\": \\"sms-message\\" + "verification_message_template": { + "default_email_option": "CONFIRM_WITH_CODE", + "email_message": "email-message", + "email_message_by_link": "email-message-by-link", + "email_subject": "email-subject", + "email_subject_by_link": "email-subject-by-link", + "sms_message": "sms-message" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cognito_user_pool.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_cognito_user_pool.resource_22C949BF.endpoint, \\\\\\",\\\\\\", \\\\\\"https://\${aws_cognito_user_pool.resource_22C949BF.endpoint}\\\\\\", \\\\\\",\\\\\\", aws_cognito_user_pool.resource_22C949BF.id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cognito_user_pool.resource_22C949BF.arn, \\",\\", aws_cognito_user_pool.resource_22C949BF.endpoint, \\",\\", \\"https://\${aws_cognito_user_pool.resource_22C949BF.endpoint}\\", \\",\\", aws_cognito_user_pool.resource_22C949BF.id])}", + "type": "string" } } }" @@ -272,89 +275,89 @@ exports[`Cognito mappings > Should map AWS::Cognito::UserPool 1`] = ` exports[`Cognito mappings > Should map AWS::Cognito::UserPoolClient 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cognito_user_pool_client\\": { - \\"resource_22C949BF\\": { - \\"access_token_validity\\": 60, - \\"allowed_oauth_flows\\": [ - \\"code\\" + "resource": { + "aws_cognito_user_pool_client": { + "resource_22C949BF": { + "access_token_validity": 60, + "allowed_oauth_flows": [ + "code" ], - \\"allowed_oauth_flows_user_pool_client\\": true, - \\"allowed_oauth_scopes\\": [ - \\"email\\" + "allowed_oauth_flows_user_pool_client": true, + "allowed_oauth_scopes": [ + "email" ], - \\"analytics_configuration\\": [ + "analytics_configuration": [ { - \\"application_arn\\": \\"application-arn\\", - \\"application_id\\": \\"application-id\\", - \\"external_id\\": \\"external-id\\", - \\"role_arn\\": \\"role-arn\\", - \\"user_data_shared\\": true + "application_arn": "application-arn", + "application_id": "application-id", + "external_id": "external-id", + "role_arn": "role-arn", + "user_data_shared": true } ], - \\"auth_session_validity\\": 60, - \\"callback_urls\\": [ - \\"callback-url\\" + "auth_session_validity": 60, + "callback_urls": [ + "callback-url" ], - \\"default_redirect_uri\\": \\"default-redirect-uri\\", - \\"enable_propagate_additional_user_context_data\\": true, - \\"enable_token_revocation\\": true, - \\"explicit_auth_flows\\": [ - \\"USER_PASSWORD_AUTH\\" + "default_redirect_uri": "default-redirect-uri", + "enable_propagate_additional_user_context_data": true, + "enable_token_revocation": true, + "explicit_auth_flows": [ + "USER_PASSWORD_AUTH" ], - \\"generate_secret\\": true, - \\"id_token_validity\\": 60, - \\"logout_urls\\": [ - \\"logout-url\\" + "generate_secret": true, + "id_token_validity": 60, + "logout_urls": [ + "logout-url" ], - \\"name\\": \\"client-name\\", - \\"prevent_user_existence_errors\\": \\"ENABLED\\", - \\"read_attributes\\": [ - \\"email\\" + "name": "client-name", + "prevent_user_existence_errors": "ENABLED", + "read_attributes": [ + "email" ], - \\"refresh_token_validity\\": 60, - \\"supported_identity_providers\\": [ - \\"COGNITO\\" + "refresh_token_validity": 60, + "supported_identity_providers": [ + "COGNITO" ], - \\"token_validity_units\\": [ + "token_validity_units": [ { - \\"access_token\\": \\"seconds\\", - \\"id_token\\": \\"seconds\\", - \\"refresh_token\\": \\"seconds\\" + "access_token": "seconds", + "id_token": "seconds", + "refresh_token": "seconds" } ], - \\"user_pool_id\\": \\"user-pool-id\\", - \\"write_attributes\\": [ - \\"email\\" + "user_pool_id": "user-pool-id", + "write_attributes": [ + "email" ] } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_cognito_user_pool_client.resource_22C949BF.id, \\\\\\",\\\\\\", aws_cognito_user_pool_client.resource_22C949BF.client_secret, \\\\\\",\\\\\\", aws_cognito_user_pool_client.resource_22C949BF.name])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_cognito_user_pool_client.resource_22C949BF.id, \\",\\", aws_cognito_user_pool_client.resource_22C949BF.client_secret, \\",\\", aws_cognito_user_pool_client.resource_22C949BF.name])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap b/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap index 5d591b6..aa7b827 100644 --- a/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap @@ -2,128 +2,128 @@ exports[`DynamoDB mappings > Should map AWS::DynamoDB::Table 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_dynamodb_contributor_insights\\": { - \\"resource_resource-contributor-insights_7BDF7CB7\\": { - \\"table_name\\": \\"test-table\\" + "resource": { + "aws_dynamodb_contributor_insights": { + "resource_resource-contributor-insights_7BDF7CB7": { + "table_name": "test-table" }, - \\"resource_resource-test-index-contributor-insights_DBE949D6\\": { - \\"index_name\\": \\"test-index\\", - \\"table_name\\": \\"test-table\\" + "resource_resource-test-index-contributor-insights_DBE949D6": { + "index_name": "test-index", + "table_name": "test-table" } }, - \\"aws_dynamodb_kinesis_streaming_destination\\": { - \\"resource_resource-kinesis-streaming-destination_F8137B68\\": { - \\"stream_arn\\": \\"test-stream-arn\\", - \\"table_name\\": \\"test-table\\" + "aws_dynamodb_kinesis_streaming_destination": { + "resource_resource-kinesis-streaming-destination_F8137B68": { + "stream_arn": "test-stream-arn", + "table_name": "test-table" } }, - \\"aws_dynamodb_resource_policy\\": { - \\"resource_resource-resource-policy_BB2DAEEF\\": { - \\"policy\\": \\"\${jsonencode({\\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\", \\\\\\"Statement\\\\\\" = [{\\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\", \\\\\\"Principal\\\\\\" = {\\\\\\"Service\\\\\\" = \\\\\\"dynamodb.amazonaws.com\\\\\\"}, \\\\\\"Action\\\\\\" = \\\\\\"dynamodb:DescribeTable\\\\\\", \\\\\\"Resource\\\\\\" = \\\\\\"*\\\\\\"}]})}\\", - \\"resource_arn\\": \\"\${aws_dynamodb_table.resource_22C949BF.arn}\\" + "aws_dynamodb_resource_policy": { + "resource_resource-resource-policy_BB2DAEEF": { + "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\", \\"Principal\\" = {\\"Service\\" = \\"dynamodb.amazonaws.com\\"}, \\"Action\\" = \\"dynamodb:DescribeTable\\", \\"Resource\\" = \\"*\\"}]})}", + "resource_arn": "\${aws_dynamodb_table.resource_22C949BF.arn}" } }, - \\"aws_dynamodb_table\\": { - \\"resource_22C949BF\\": { - \\"attribute\\": [ + "aws_dynamodb_table": { + "resource_22C949BF": { + "attribute": [ { - \\"name\\": \\"test-attribute-name\\", - \\"type\\": \\"S\\" + "name": "test-attribute-name", + "type": "S" } ], - \\"billing_mode\\": \\"PROVISIONED\\", - \\"deletion_protection_enabled\\": true, - \\"global_secondary_index\\": [ + "billing_mode": "PROVISIONED", + "deletion_protection_enabled": true, + "global_secondary_index": [ { - \\"hash_key\\": \\"test-attribute-name\\", - \\"name\\": \\"test-index\\", - \\"non_key_attributes\\": [ - \\"test\\" + "hash_key": "test-attribute-name", + "name": "test-index", + "non_key_attributes": [ + "test" ], - \\"projection_type\\": \\"ALL\\", - \\"range_key\\": \\"test-attribute-name-range\\", - \\"read_capacity\\": 1, - \\"write_capacity\\": 1 + "projection_type": "ALL", + "range_key": "test-attribute-name-range", + "read_capacity": 1, + "write_capacity": 1 } ], - \\"hash_key\\": \\"test-attribute-name\\", - \\"import_table\\": { - \\"input_compression_type\\": \\"NONE\\", - \\"input_format\\": \\"JSON\\", - \\"input_format_options\\": { - \\"csv\\": { - \\"delimiter\\": \\"test-delimiter\\", - \\"header_list\\": [ - \\"test-header-list\\" + "hash_key": "test-attribute-name", + "import_table": { + "input_compression_type": "NONE", + "input_format": "JSON", + "input_format_options": { + "csv": { + "delimiter": "test-delimiter", + "header_list": [ + "test-header-list" ] } }, - \\"s3_bucket_source\\": { - \\"bucket\\": \\"test-s3-bucket\\", - \\"bucket_owner\\": \\"test-s3-bucket-owner\\", - \\"key_prefix\\": \\"test-s3\\" + "s3_bucket_source": { + "bucket": "test-s3-bucket", + "bucket_owner": "test-s3-bucket-owner", + "key_prefix": "test-s3" } }, - \\"local_secondary_index\\": [ + "local_secondary_index": [ { - \\"name\\": \\"test-index\\", - \\"non_key_attributes\\": [ - \\"test\\" + "name": "test-index", + "non_key_attributes": [ + "test" ], - \\"projection_type\\": \\"ALL\\", - \\"range_key\\": \\"test-attribute-name-range\\" + "projection_type": "ALL", + "range_key": "test-attribute-name-range" } ], - \\"name\\": \\"test-table\\", - \\"point_in_time_recovery\\": { - \\"enabled\\": true + "name": "test-table", + "point_in_time_recovery": { + "enabled": true }, - \\"range_key\\": \\"test-attribute-name-range\\", - \\"read_capacity\\": 1, - \\"server_side_encryption\\": { - \\"enabled\\": true, - \\"kms_key_arn\\": \\"test-kms-master-key-id\\" + "range_key": "test-attribute-name-range", + "read_capacity": 1, + "server_side_encryption": { + "enabled": true, + "kms_key_arn": "test-kms-master-key-id" }, - \\"stream_enabled\\": true, - \\"stream_view_type\\": \\"NEW_IMAGE\\", - \\"table_class\\": \\"test-table-class\\", - \\"tags\\": { - \\"Name\\": \\"test-table\\" + "stream_enabled": true, + "stream_view_type": "NEW_IMAGE", + "table_class": "test-table-class", + "tags": { + "Name": "test-table" }, - \\"ttl\\": { - \\"attribute_name\\": \\"test-attribute-name\\", - \\"enabled\\": true + "ttl": { + "attribute_name": "test-attribute-name", + "enabled": true }, - \\"write_capacity\\": 1 + "write_capacity": 1 } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_dynamodb_table.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_dynamodb_table.resource_22C949BF.stream_arn, \\\\\\",\\\\\\", {\\\\\\"attributeName\\\\\\" = \\\\\\"test-attribute-name\\\\\\", \\\\\\"attributeType\\\\\\" = \\\\\\"S\\\\\\"}])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_dynamodb_table.resource_22C949BF.arn, \\",\\", aws_dynamodb_table.resource_22C949BF.stream_arn, \\",\\", {\\"attributeName\\" = \\"test-attribute-name\\", \\"attributeType\\" = \\"S\\"}])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap b/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap index 115b95a..5c79f88 100644 --- a/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap @@ -2,37 +2,37 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::InternetGateway 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_internet_gateway\\": { - \\"resource_22C949BF\\": { + "resource": { + "aws_internet_gateway": { + "resource_22C949BF": { } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_internet_gateway.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_internet_gateway.resource_22C949BF.id}", + "type": "string" } } }" @@ -40,118 +40,51 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::InternetGateway 1`] = ` exports[`EC2 VPC mappings > Should map AWS::EC2::Route 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_route\\": { - \\"resource_22C949BF\\": { - \\"carrier_gateway_id\\": \\"carrier-gateway-id\\", - \\"core_network_arn\\": \\"core-network-arn\\", - \\"destination_cidr_block\\": \\"0.0.0.0/16\\", - \\"destination_ipv6_cidr_block\\": \\"2001:db8:1234:1a00::/64\\", - \\"destination_prefix_list_id\\": \\"destination-prefix-list-id\\", - \\"egress_only_gateway_id\\": \\"egress-only-internet-gateway-id\\", - \\"gateway_id\\": \\"gateway-id\\", - \\"local_gateway_id\\": \\"local-gateway-id\\", - \\"nat_gateway_id\\": \\"nat-gateway-id\\", - \\"network_interface_id\\": \\"network-interface-id\\", - \\"route_table_id\\": \\"route-table-id\\", - \\"transit_gateway_id\\": \\"transit-g\\", - \\"vpc_endpoint_id\\": \\"vpc-endpoint-id\\", - \\"vpc_peering_connection_id\\": \\"vpc-peering-connection-id\\" + "resource": { + "aws_route": { + "resource_22C949BF": { + "carrier_gateway_id": "carrier-gateway-id", + "core_network_arn": "core-network-arn", + "destination_cidr_block": "0.0.0.0/16", + "destination_ipv6_cidr_block": "2001:db8:1234:1a00::/64", + "destination_prefix_list_id": "destination-prefix-list-id", + "egress_only_gateway_id": "egress-only-internet-gateway-id", + "gateway_id": "gateway-id", + "local_gateway_id": "local-gateway-id", + "nat_gateway_id": "nat-gateway-id", + "network_interface_id": "network-interface-id", + "route_table_id": "route-table-id", + "transit_gateway_id": "transit-g", + "vpc_endpoint_id": "vpc-endpoint-id", + "vpc_peering_connection_id": "vpc-peering-connection-id" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_route.resource_22C949BF.destination_cidr_block}\\", - \\"type\\": \\"string\\" - } - } -}" -`; - -exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroup 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_security_group\\": { - \\"resource_22C949BF\\": { - \\"description\\": \\"test-security-group-description\\", - \\"name\\": \\"test-security-group\\", - \\"vpc_id\\": \\"test-vpc-id\\" - } - }, - \\"aws_vpc_security_group_egress_rule\\": { - \\"resource_0-egress_4775819E\\": { - \\"cidr_ipv4\\": \\"10.0.0.0/16\\", - \\"cidr_ipv6\\": \\"2001:db8:1234:1a00::/64\\", - \\"description\\": \\"test-security-group-egress-description\\", - \\"from_port\\": 0, - \\"ip_protocol\\": \\"-1\\", - \\"prefix_list_id\\": \\"destination-prefix-list-id\\", - \\"referenced_security_group_id\\": \\"destination-security-group-id\\", - \\"security_group_id\\": \\"\${aws_security_group.resource_22C949BF.id}\\", - \\"to_port\\": 0 - } - }, - \\"aws_vpc_security_group_ingress_rule\\": { - \\"resource_0-ingress_051257B0\\": { - \\"cidr_ipv4\\": \\"10.0.0.0/16\\", - \\"cidr_ipv6\\": \\"2001:db8:1234:1a00::/64\\", - \\"description\\": \\"test-security-group-ingress-description\\", - \\"from_port\\": 0, - \\"ip_protocol\\": \\"-1\\", - \\"prefix_list_id\\": \\"source-prefix-list-id\\", - \\"referenced_security_group_id\\": \\"source-security-group-id\\", - \\"security_group_id\\": \\"\${aws_security_group.resource_22C949BF.id}\\", - \\"to_port\\": 0 - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_security_group.resource_22C949BF.id, \\\\\\",\\\\\\", aws_security_group.resource_22C949BF.id, \\\\\\",\\\\\\", aws_security_group.resource_22C949BF.vpc_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_route.resource_22C949BF.destination_cidr_block}", + "type": "string" } } }" @@ -159,46 +92,46 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroup 1`] = ` exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroupEgress 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_vpc_security_group_egress_rule\\": { - \\"resource_22C949BF\\": { - \\"cidr_ipv4\\": \\"10.0.0.0/16\\", - \\"cidr_ipv6\\": \\"2001:db8:1234:1a00::/64\\", - \\"description\\": \\"test-security-group-egress-description\\", - \\"from_port\\": 0, - \\"ip_protocol\\": \\"-1\\", - \\"prefix_list_id\\": \\"destination-prefix-list-id\\", - \\"referenced_security_group_id\\": \\"destination-security-group-id\\", - \\"security_group_id\\": \\"group-id\\", - \\"to_port\\": 0 + "resource": { + "aws_vpc_security_group_egress_rule": { + "resource_22C949BF": { + "cidr_ipv4": "10.0.0.0/16", + "cidr_ipv6": "2001:db8:1234:1a00::/64", + "description": "test-security-group-egress-description", + "from_port": 0, + "ip_protocol": "-1", + "prefix_list_id": "destination-prefix-list-id", + "referenced_security_group_id": "destination-security-group-id", + "security_group_id": "group-id", + "to_port": 0 } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_vpc_security_group_egress_rule.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_vpc_security_group_egress_rule.resource_22C949BF.id}", + "type": "string" } } }" @@ -206,46 +139,46 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroupEgress 1`] = ` exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroupIngress 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_vpc_security_group_ingress_rule\\": { - \\"resource_22C949BF\\": { - \\"cidr_ipv4\\": \\"10.0.0.0/16\\", - \\"cidr_ipv6\\": \\"2001:db8:1234:1a00::/64\\", - \\"description\\": \\"test-security-group-ingress-description\\", - \\"from_port\\": 0, - \\"ip_protocol\\": \\"-1\\", - \\"prefix_list_id\\": \\"source-prefix-list-id\\", - \\"referenced_security_group_id\\": \\"source-security-group-id\\", - \\"security_group_id\\": \\"group-id\\", - \\"to_port\\": 0 + "resource": { + "aws_vpc_security_group_ingress_rule": { + "resource_22C949BF": { + "cidr_ipv4": "10.0.0.0/16", + "cidr_ipv6": "2001:db8:1234:1a00::/64", + "description": "test-security-group-ingress-description", + "from_port": 0, + "ip_protocol": "-1", + "prefix_list_id": "source-prefix-list-id", + "referenced_security_group_id": "source-security-group-id", + "security_group_id": "group-id", + "to_port": 0 } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_vpc_security_group_ingress_rule.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_vpc_security_group_ingress_rule.resource_22C949BF.id}", + "type": "string" } } }" @@ -253,39 +186,39 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroupIngress 1`] = ` exports[`EC2 VPC mappings > Should map AWS::EC2::SubnetRouteTableAssociation 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_route_table_association\\": { - \\"resource_22C949BF\\": { - \\"route_table_id\\": \\"route-table-id\\", - \\"subnet_id\\": \\"subnet-id\\" + "resource": { + "aws_route_table_association": { + "resource_22C949BF": { + "route_table_id": "route-table-id", + "subnet_id": "subnet-id" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_route_table_association.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_route_table_association.resource_22C949BF.id}", + "type": "string" } } }" @@ -293,46 +226,46 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::SubnetRouteTableAssociation 1`] exports[`EC2 VPC mappings > Should map AWS::EC2::VPC 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_vpc\\": { - \\"resource_22C949BF\\": { - \\"cidr_block\\": \\"0.0.0.0/16\\", - \\"enable_dns_hostnames\\": true, - \\"enable_dns_support\\": true, - \\"instance_tenancy\\": \\"default\\", - \\"ipv4_ipam_pool_id\\": \\"ipv4-ipam-pool-id\\", - \\"ipv4_netmask_length\\": 24, - \\"tags\\": { - \\"Name\\": \\"test-vpc\\" + "resource": { + "aws_vpc": { + "resource_22C949BF": { + "cidr_block": "0.0.0.0/16", + "enable_dns_hostnames": true, + "enable_dns_support": true, + "instance_tenancy": "default", + "ipv4_ipam_pool_id": "ipv4-ipam-pool-id", + "ipv4_netmask_length": 24, + "tags": { + "Name": "test-vpc" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_vpc.resource_22C949BF.cidr_block, \\\\\\",\\\\\\", join(\\\\\\",\\\\\\", aws_vpc.resource_22C949BF.ipv6_association_id), \\\\\\",\\\\\\", aws_vpc.resource_22C949BF.default_network_acl_id, \\\\\\",\\\\\\", aws_vpc.resource_22C949BF.default_security_group_id, \\\\\\",\\\\\\", join(\\\\\\",\\\\\\", aws_vpc.resource_22C949BF.ipv6_cidr_block), \\\\\\",\\\\\\", aws_vpc.resource_22C949BF.id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_vpc.resource_22C949BF.cidr_block, \\",\\", join(\\",\\", aws_vpc.resource_22C949BF.ipv6_association_id), \\",\\", aws_vpc.resource_22C949BF.default_network_acl_id, \\",\\", aws_vpc.resource_22C949BF.default_security_group_id, \\",\\", join(\\",\\", aws_vpc.resource_22C949BF.ipv6_cidr_block), \\",\\", aws_vpc.resource_22C949BF.id])}", + "type": "string" } } }" @@ -340,125 +273,125 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::VPC 1`] = ` exports[`EC2 VPC mappings > Should provision all the components of a VPC 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudcontrolapi_resource\\": { - \\"resource_PrivateSubnet1_RouteTable_19EB98C9\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::RouteTable\\" + "resource": { + "aws_cloudcontrolapi_resource": { + "resource_PrivateSubnet1_RouteTable_19EB98C9": { + "desired_state": "\${jsonencode({\\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::RouteTable" }, - \\"resource_PrivateSubnet1_Subnet_58408BD5\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"AvailabilityZone\\\\\\" = \\\\\\"us-east-1a\\\\\\", \\\\\\"CidrBlock\\\\\\" = \\\\\\"10.0.128.0/18\\\\\\", \\\\\\"MapPublicIpOnLaunch\\\\\\" = false, \\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::Subnet\\" + "resource_PrivateSubnet1_Subnet_58408BD5": { + "desired_state": "\${jsonencode({\\"AvailabilityZone\\" = \\"us-east-1a\\", \\"CidrBlock\\" = \\"10.0.128.0/18\\", \\"MapPublicIpOnLaunch\\" = false, \\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::Subnet" }, - \\"resource_PrivateSubnet2_RouteTable_EB0EBC65\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::RouteTable\\" + "resource_PrivateSubnet2_RouteTable_EB0EBC65": { + "desired_state": "\${jsonencode({\\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::RouteTable" }, - \\"resource_PrivateSubnet2_Subnet_A8F6FDF0\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"AvailabilityZone\\\\\\" = \\\\\\"us-east-1b\\\\\\", \\\\\\"CidrBlock\\\\\\" = \\\\\\"10.0.192.0/18\\\\\\", \\\\\\"MapPublicIpOnLaunch\\\\\\" = false, \\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::Subnet\\" + "resource_PrivateSubnet2_Subnet_A8F6FDF0": { + "desired_state": "\${jsonencode({\\"AvailabilityZone\\" = \\"us-east-1b\\", \\"CidrBlock\\" = \\"10.0.192.0/18\\", \\"MapPublicIpOnLaunch\\" = false, \\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::Subnet" }, - \\"resource_PublicSubnet1_EIP_9ED2119C\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"Domain\\\\\\" = \\\\\\"vpc\\\\\\"})}\\", - \\"type_name\\": \\"AWS::EC2::EIP\\" + "resource_PublicSubnet1_EIP_9ED2119C": { + "desired_state": "\${jsonencode({\\"Domain\\" = \\"vpc\\"})}", + "type_name": "AWS::EC2::EIP" }, - \\"resource_PublicSubnet1_NATGateway_BA73323D\\": { - \\"depends_on\\": [ - \\"aws_route_table_association.resource_PublicSubnet1_RouteTableAssociation_C1359716\\", - \\"aws_route.resource_PublicSubnet1_DefaultRoute_1F0D9FA0\\" + "resource_PublicSubnet1_NATGateway_BA73323D": { + "depends_on": [ + "aws_route_table_association.resource_PublicSubnet1_RouteTableAssociation_C1359716", + "aws_route.resource_PublicSubnet1_DefaultRoute_1F0D9FA0" ], - \\"desired_state\\": \\"\${jsonencode({\\\\\\"AllocationId\\\\\\" = jsondecode(aws_cloudcontrolapi_resource.resource_PublicSubnet1_EIP_9ED2119C.properties).AllocationId, \\\\\\"SubnetId\\\\\\" = aws_cloudcontrolapi_resource.resource_PublicSubnet1_Subnet_334F89CE.id})}\\", - \\"type_name\\": \\"AWS::EC2::NatGateway\\" + "desired_state": "\${jsonencode({\\"AllocationId\\" = jsondecode(aws_cloudcontrolapi_resource.resource_PublicSubnet1_EIP_9ED2119C.properties).AllocationId, \\"SubnetId\\" = aws_cloudcontrolapi_resource.resource_PublicSubnet1_Subnet_334F89CE.id})}", + "type_name": "AWS::EC2::NatGateway" }, - \\"resource_PublicSubnet1_RouteTable_A84723D1\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::RouteTable\\" + "resource_PublicSubnet1_RouteTable_A84723D1": { + "desired_state": "\${jsonencode({\\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::RouteTable" }, - \\"resource_PublicSubnet1_Subnet_334F89CE\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"AvailabilityZone\\\\\\" = \\\\\\"us-east-1a\\\\\\", \\\\\\"CidrBlock\\\\\\" = \\\\\\"10.0.0.0/18\\\\\\", \\\\\\"MapPublicIpOnLaunch\\\\\\" = true, \\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::Subnet\\" + "resource_PublicSubnet1_Subnet_334F89CE": { + "desired_state": "\${jsonencode({\\"AvailabilityZone\\" = \\"us-east-1a\\", \\"CidrBlock\\" = \\"10.0.0.0/18\\", \\"MapPublicIpOnLaunch\\" = true, \\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::Subnet" }, - \\"resource_PublicSubnet2_RouteTable_25E515ED\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::RouteTable\\" + "resource_PublicSubnet2_RouteTable_25E515ED": { + "desired_state": "\${jsonencode({\\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::RouteTable" }, - \\"resource_PublicSubnet2_Subnet_5F1A806C\\": { - \\"desired_state\\": \\"\${jsonencode({\\\\\\"AvailabilityZone\\\\\\" = \\\\\\"us-east-1b\\\\\\", \\\\\\"CidrBlock\\\\\\" = \\\\\\"10.0.64.0/18\\\\\\", \\\\\\"MapPublicIpOnLaunch\\\\\\" = true, \\\\\\"VpcId\\\\\\" = aws_vpc.resource_AACBEC77.id})}\\", - \\"type_name\\": \\"AWS::EC2::Subnet\\" + "resource_PublicSubnet2_Subnet_5F1A806C": { + "desired_state": "\${jsonencode({\\"AvailabilityZone\\" = \\"us-east-1b\\", \\"CidrBlock\\" = \\"10.0.64.0/18\\", \\"MapPublicIpOnLaunch\\" = true, \\"VpcId\\" = aws_vpc.resource_AACBEC77.id})}", + "type_name": "AWS::EC2::Subnet" } }, - \\"aws_internet_gateway\\": { - \\"resource_IGW_222CDE0E\\": { - \\"vpc_id\\": \\"\${aws_vpc.resource_AACBEC77.id}\\" + "aws_internet_gateway": { + "resource_IGW_222CDE0E": { + "vpc_id": "\${aws_vpc.resource_AACBEC77.id}" } }, - \\"aws_route\\": { - \\"resource_PrivateSubnet1_DefaultRoute_EDAF69FB\\": { - \\"destination_cidr_block\\": \\"0.0.0.0/0\\", - \\"nat_gateway_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_NATGateway_BA73323D.id}\\", - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_RouteTable_19EB98C9.id}\\" + "aws_route": { + "resource_PrivateSubnet1_DefaultRoute_EDAF69FB": { + "destination_cidr_block": "0.0.0.0/0", + "nat_gateway_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_NATGateway_BA73323D.id}", + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_RouteTable_19EB98C9.id}" }, - \\"resource_PrivateSubnet2_DefaultRoute_8696734F\\": { - \\"destination_cidr_block\\": \\"0.0.0.0/0\\", - \\"nat_gateway_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_NATGateway_BA73323D.id}\\", - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_RouteTable_EB0EBC65.id}\\" + "resource_PrivateSubnet2_DefaultRoute_8696734F": { + "destination_cidr_block": "0.0.0.0/0", + "nat_gateway_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_NATGateway_BA73323D.id}", + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_RouteTable_EB0EBC65.id}" }, - \\"resource_PublicSubnet1_DefaultRoute_1F0D9FA0\\": { - \\"destination_cidr_block\\": \\"0.0.0.0/0\\", - \\"gateway_id\\": \\"\${aws_internet_gateway.resource_IGW_222CDE0E.id}\\", - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_RouteTable_A84723D1.id}\\" + "resource_PublicSubnet1_DefaultRoute_1F0D9FA0": { + "destination_cidr_block": "0.0.0.0/0", + "gateway_id": "\${aws_internet_gateway.resource_IGW_222CDE0E.id}", + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_RouteTable_A84723D1.id}" }, - \\"resource_PublicSubnet2_DefaultRoute_317000C9\\": { - \\"destination_cidr_block\\": \\"0.0.0.0/0\\", - \\"gateway_id\\": \\"\${aws_internet_gateway.resource_IGW_222CDE0E.id}\\", - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_RouteTable_25E515ED.id}\\" + "resource_PublicSubnet2_DefaultRoute_317000C9": { + "destination_cidr_block": "0.0.0.0/0", + "gateway_id": "\${aws_internet_gateway.resource_IGW_222CDE0E.id}", + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_RouteTable_25E515ED.id}" } }, - \\"aws_route_table_association\\": { - \\"resource_PrivateSubnet1_RouteTableAssociation_B6B60980\\": { - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_RouteTable_19EB98C9.id}\\", - \\"subnet_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_Subnet_58408BD5.id}\\" + "aws_route_table_association": { + "resource_PrivateSubnet1_RouteTableAssociation_B6B60980": { + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_RouteTable_19EB98C9.id}", + "subnet_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet1_Subnet_58408BD5.id}" }, - \\"resource_PrivateSubnet2_RouteTableAssociation_5E91DB53\\": { - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_RouteTable_EB0EBC65.id}\\", - \\"subnet_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_Subnet_A8F6FDF0.id}\\" + "resource_PrivateSubnet2_RouteTableAssociation_5E91DB53": { + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_RouteTable_EB0EBC65.id}", + "subnet_id": "\${aws_cloudcontrolapi_resource.resource_PrivateSubnet2_Subnet_A8F6FDF0.id}" }, - \\"resource_PublicSubnet1_RouteTableAssociation_C1359716\\": { - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_RouteTable_A84723D1.id}\\", - \\"subnet_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_Subnet_334F89CE.id}\\" + "resource_PublicSubnet1_RouteTableAssociation_C1359716": { + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_RouteTable_A84723D1.id}", + "subnet_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet1_Subnet_334F89CE.id}" }, - \\"resource_PublicSubnet2_RouteTableAssociation_A663F51A\\": { - \\"route_table_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_RouteTable_25E515ED.id}\\", - \\"subnet_id\\": \\"\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_Subnet_5F1A806C.id}\\" + "resource_PublicSubnet2_RouteTableAssociation_A663F51A": { + "route_table_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_RouteTable_25E515ED.id}", + "subnet_id": "\${aws_cloudcontrolapi_resource.resource_PublicSubnet2_Subnet_5F1A806C.id}" } }, - \\"aws_vpc\\": { - \\"resource_AACBEC77\\": { - \\"cidr_block\\": \\"10.0.0.0/16\\", - \\"enable_dns_hostnames\\": true, - \\"enable_dns_support\\": true, - \\"instance_tenancy\\": \\"default\\" + "aws_vpc": { + "resource_AACBEC77": { + "cidr_block": "10.0.0.0/16", + "enable_dns_hostnames": true, + "enable_dns_support": true, + "instance_tenancy": "default" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } } diff --git a/src/__tests__/mappings/__snapshots__/events.spec.ts.snap b/src/__tests__/mappings/__snapshots__/events.spec.ts.snap deleted file mode 100644 index 6e476bd..0000000 --- a/src/__tests__/mappings/__snapshots__/events.spec.ts.snap +++ /dev/null @@ -1,157 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Events mappings > Should map AWS::Events::Rule 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_cloudwatch_event_rule\\": { - \\"resource_22C949BF\\": { - \\"description\\": \\"test-rule-description\\", - \\"event_bus_name\\": \\"test-event-bus-name\\", - \\"event_pattern\\": \\"{\\\\\\"source\\\\\\":[\\\\\\"test-source\\\\\\"],\\\\\\"detail\\\\\\":{\\\\\\"foo\\\\\\":[\\\\\\"bar\\\\\\"]}}\\", - \\"is_enabled\\": true, - \\"name\\": \\"test-rule\\", - \\"role_arn\\": \\"test-role-arn\\", - \\"schedule_expression\\": \\"test-schedule-expression\\" - } - }, - \\"aws_cloudwatch_event_target\\": { - \\"resource_target0_EA0FDB3C\\": { - \\"arn\\": \\"test-target-arn\\", - \\"batch_target\\": { - \\"array_size\\": 1, - \\"job_definition\\": \\"test-job-definition\\", - \\"job_name\\": \\"test-job-name\\" - }, - \\"dead_letter_config\\": { - \\"arn\\": \\"test-target-dead-letter-config-arn\\" - }, - \\"ecs_target\\": { - \\"capacity_provider_strategy\\": [ - { - \\"base\\": 1, - \\"capacity_provider\\": \\"test-target-ecs-capacity-provider\\", - \\"weight\\": 1 - } - ], - \\"enable_ecs_managed_tags\\": true, - \\"enable_execute_command\\": true, - \\"group\\": \\"test-target-ecs-group\\", - \\"launch_type\\": \\"test-target-ecs-launch-type\\", - \\"network_configuration\\": { - \\"assign_public_ip\\": true, - \\"security_groups\\": [ - \\"test-target-ecs-security-group\\" - ], - \\"subnets\\": [ - \\"test-target-ecs-subnet\\" - ] - }, - \\"ordered_placement_strategy\\": [ - { - \\"field\\": \\"test-target-ecs-placement-strategy-field\\", - \\"type\\": \\"test-target-ecs-placement-strategy-type\\" - } - ], - \\"placement_constraint\\": [ - { - \\"expression\\": \\"test-target-ecs-placement-constraint-expression\\", - \\"type\\": \\"test-target-ecs-placement-constraint-type\\" - } - ], - \\"platform_version\\": \\"test-target-ecs-platform-version\\", - \\"propagate_tags\\": \\"TASK_DEFINITION\\", - \\"tags\\": { - \\"test-target-ecs-tag-key\\": \\"test-target-ecs-tag-value\\" - }, - \\"task_count\\": 1, - \\"task_definition_arn\\": \\"test-target-ecs-task-definition-arn\\" - }, - \\"event_bus_name\\": \\"test-event-bus-name\\", - \\"http_target\\": { - \\"header_parameters\\": { - \\"test-header-parameter-key\\": \\"test-header-parameter-value\\" - }, - \\"path_parameter_values\\": [ - \\"test-path-parameter-value\\" - ], - \\"query_string_parameters\\": { - \\"test-query-string-parameter-key\\": \\"test-query-string-parameter-value\\" - } - }, - \\"input\\": \\"test-input\\", - \\"input_path\\": \\"test-input-path\\", - \\"input_transformer\\": { - \\"input_paths\\": { - \\"test-input-paths-map-key\\": \\"test-input-paths-map-value\\" - }, - \\"input_template\\": \\"test-input-template\\" - }, - \\"kinesis_target\\": { - \\"partition_key_path\\": \\"test-partition-key-path\\" - }, - \\"redshift_target\\": { - \\"database\\": \\"test-database\\", - \\"db_user\\": \\"test-db-user\\", - \\"secrets_manager_arn\\": \\"test-secret-manager-arn\\", - \\"sql\\": \\"test-sql\\", - \\"statement_name\\": \\"test-statement-name\\", - \\"with_event\\": true - }, - \\"retry_policy\\": { - \\"maximum_event_age_in_seconds\\": 1, - \\"maximum_retry_attempts\\": 1 - }, - \\"role_arn\\": \\"test-target-role-arn\\", - \\"rule\\": \\"\${aws_cloudwatch_event_rule.resource_22C949BF.id}\\", - \\"run_command_targets\\": [ - { - \\"key\\": \\"test-run-command-target-key\\", - \\"values\\": [ - \\"test-run-command-target-value\\" - ] - } - ], - \\"sagemaker_pipeline_target\\": { - \\"pipeline_parameter_list\\": [ - { - \\"name\\": \\"test-pipeline-parameter-name\\", - \\"value\\": \\"test-pipeline-parameter-value\\" - } - ] - }, - \\"sqs_target\\": { - \\"message_group_id\\": \\"test-message-group-id\\" - }, - \\"target_id\\": \\"test-target-id\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_cloudwatch_event_rule.resource_22C949BF.arn}\\", - \\"type\\": \\"string\\" - } - } -}" -`; diff --git a/src/__tests__/mappings/__snapshots__/iam.spec.ts.snap b/src/__tests__/mappings/__snapshots__/iam.spec.ts.snap index 1e701c6..28fdc06 100644 --- a/src/__tests__/mappings/__snapshots__/iam.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/iam.spec.ts.snap @@ -2,39 +2,39 @@ exports[`IAM Mappings > Should map AWS::IAM::AccessKey 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_iam_access_key\\": { - \\"resource_22C949BF\\": { - \\"status\\": \\"Active\\", - \\"user\\": \\"test-user\\" + "resource": { + "aws_iam_access_key": { + "resource_22C949BF": { + "status": "Active", + "user": "test-user" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_iam_access_key.resource_22C949BF.id, \\\\\\",\\\\\\", aws_iam_access_key.resource_22C949BF.secret])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_iam_access_key.resource_22C949BF.id, \\",\\", aws_iam_access_key.resource_22C949BF.secret])}", + "type": "string" } } }" @@ -42,57 +42,57 @@ exports[`IAM Mappings > Should map AWS::IAM::AccessKey 1`] = ` exports[`IAM Mappings > should map AWS::IAM::Policy 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_iam_group_policy_attachment\\": { - \\"resource_resource_group0_AB0AE204\\": { - \\"group\\": \\"test-group\\", - \\"policy_arn\\": \\"\${aws_iam_policy.resource_22C949BF.arn}\\" + "resource": { + "aws_iam_group_policy_attachment": { + "resource_resource_group0_AB0AE204": { + "group": "test-group", + "policy_arn": "\${aws_iam_policy.resource_22C949BF.arn}" } }, - \\"aws_iam_policy\\": { - \\"resource_22C949BF\\": { - \\"name\\": \\"test-policy\\", - \\"policy\\": \\"\${jsonencode({\\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\", \\\\\\"Statement\\\\\\" = [{\\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\"}]})}\\" + "aws_iam_policy": { + "resource_22C949BF": { + "name": "test-policy", + "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\"}]})}" } }, - \\"aws_iam_role_policy_attachment\\": { - \\"resource_resource_role0_CD7751A8\\": { - \\"policy_arn\\": \\"\${aws_iam_policy.resource_22C949BF.arn}\\", - \\"role\\": \\"test-role\\" + "aws_iam_role_policy_attachment": { + "resource_resource_role0_CD7751A8": { + "policy_arn": "\${aws_iam_policy.resource_22C949BF.arn}", + "role": "test-role" } }, - \\"aws_iam_user_policy_attachment\\": { - \\"resource_resource_user0_1355940A\\": { - \\"policy_arn\\": \\"\${aws_iam_policy.resource_22C949BF.arn}\\", - \\"user\\": \\"test-user\\" + "aws_iam_user_policy_attachment": { + "resource_resource_user0_1355940A": { + "policy_arn": "\${aws_iam_policy.resource_22C949BF.arn}", + "user": "test-user" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_iam_policy.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_iam_policy.resource_22C949BF.id}", + "type": "string" } } }" @@ -100,78 +100,78 @@ exports[`IAM Mappings > should map AWS::IAM::Policy 1`] = ` exports[`IAM Mappings > should map AWS::IAM::Role 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ], - \\"time\\": [ + "time": [ { } ] }, - \\"resource\\": { - \\"aws_iam_role\\": { - \\"resource_22C949BF\\": { - \\"assume_role_policy\\": \\"\${jsonencode({\\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\", \\\\\\"Statement\\\\\\" = [{\\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\", \\\\\\"Principal\\\\\\" = {\\\\\\"Service\\\\\\" = \\\\\\"ec2.amazonaws.com\\\\\\"}}]})}\\", - \\"description\\": \\"IamRole\\", - \\"inline_policy\\": [ + "resource": { + "aws_iam_role": { + "resource_22C949BF": { + "assume_role_policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\", \\"Principal\\" = {\\"Service\\" = \\"ec2.amazonaws.com\\"}}]})}", + "description": "IamRole", + "inline_policy": [ { - \\"name\\": \\"test-policy\\", - \\"policy\\": \\"\${jsonencode({\\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\", \\\\\\"Statement\\\\\\" = [{\\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\"}]})}\\" + "name": "test-policy", + "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\"}]})}" } ], - \\"max_session_duration\\": 3600, - \\"name\\": \\"test-role\\", - \\"path\\": \\"packages/cdktf-adaptor/src/mappings/services/iam.ts\\", - \\"permissions_boundary\\": \\"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role\\", - \\"tags\\": { - \\"Name\\": \\"test-role\\" + "max_session_duration": 3600, + "name": "test-role", + "path": "packages/cdktf-adaptor/src/mappings/services/iam.ts", + "permissions_boundary": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role", + "tags": { + "Name": "test-role" } } }, - \\"aws_iam_role_policy_attachment\\": { - \\"resource_resource-managed-policy-0_D5E0A017\\": { - \\"depends_on\\": [ - \\"time_sleep.resource_resource-wait_D049D385\\" + "aws_iam_role_policy_attachment": { + "resource_resource-managed-policy-0_D5E0A017": { + "depends_on": [ + "time_sleep.resource_resource-wait_D049D385" ], - \\"policy_arn\\": \\"arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role\\", - \\"role\\": \\"\${aws_iam_role.resource_22C949BF.name}\\" + "policy_arn": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role", + "role": "\${aws_iam_role.resource_22C949BF.name}" } }, - \\"time_sleep\\": { - \\"resource_resource-wait_D049D385\\": { - \\"create_duration\\": \\"15s\\", - \\"depends_on\\": [ - \\"aws_iam_role.resource_22C949BF\\" + "time_sleep": { + "resource_resource-wait_D049D385": { + "create_duration": "15s", + "depends_on": [ + "aws_iam_role.resource_22C949BF" ], - \\"provider\\": \\"time\\" + "provider": "time" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" }, - \\"time\\": { - \\"source\\": \\"time\\", - \\"version\\": \\"0.7.2\\" + "time": { + "source": "time", + "version": "0.7.2" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_iam_role.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_iam_role.resource_22C949BF.id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_iam_role.resource_22C949BF.arn, \\",\\", aws_iam_role.resource_22C949BF.id])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap b/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap index a8a805c..23f16d7 100644 --- a/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap @@ -2,96 +2,96 @@ exports[`Lambda mappings > Should map AWS::Lambda::EventSourceMapping 1`] = ` "{ - \\"locals\\": { - \\"resource_selfmanaged-kafka-bootstrap-servers_C65ED52F\\": \\"\${jsonencode({\\\\\\"KAFKA_BOOTSTRAP_SERVERS\\\\\\" = join(\\\\\\",\\\\\\", [\\\\\\"kafkaBootstrapServers\\\\\\"])})}\\" + "locals": { + "resource_selfmanaged-kafka-bootstrap-servers_C65ED52F": "\${jsonencode({\\"KAFKA_BOOTSTRAP_SERVERS\\" = join(\\",\\", [\\"kafkaBootstrapServers\\"])})}" }, - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_lambda_event_source_mapping\\": { - \\"resource_22C949BF\\": { - \\"amazon_managed_kafka_event_source_config\\": { - \\"consumer_group_id\\": \\"consumerGroupId\\" + "resource": { + "aws_lambda_event_source_mapping": { + "resource_22C949BF": { + "amazon_managed_kafka_event_source_config": { + "consumer_group_id": "consumerGroupId" }, - \\"batch_size\\": 1, - \\"bisect_batch_on_function_error\\": true, - \\"destination_config\\": { - \\"on_failure\\": { - \\"destination_arn\\": \\"destination\\" + "batch_size": 1, + "bisect_batch_on_function_error": true, + "destination_config": { + "on_failure": { + "destination_arn": "destination" } }, - \\"document_db_event_source_config\\": { - \\"collection_name\\": \\"collectionName\\", - \\"database_name\\": \\"databaseName\\", - \\"full_document\\": \\"update\\" + "document_db_event_source_config": { + "collection_name": "collectionName", + "database_name": "databaseName", + "full_document": "update" }, - \\"enabled\\": true, - \\"event_source_arn\\": \\"eventSourceArn\\", - \\"filter_criteria\\": { - \\"filter\\": [ + "enabled": true, + "event_source_arn": "eventSourceArn", + "filter_criteria": { + "filter": [ { - \\"pattern\\": \\"pattern\\" + "pattern": "pattern" } ] }, - \\"function_name\\": \\"functionName\\", - \\"function_response_types\\": [ - \\"functionResponseTypes\\" + "function_name": "functionName", + "function_response_types": [ + "functionResponseTypes" ], - \\"maximum_batching_window_in_seconds\\": 1, - \\"maximum_record_age_in_seconds\\": 1, - \\"maximum_retry_attempts\\": 1, - \\"parallelization_factor\\": 1, - \\"queues\\": [ - \\"queues\\" + "maximum_batching_window_in_seconds": 1, + "maximum_record_age_in_seconds": 1, + "maximum_retry_attempts": 1, + "parallelization_factor": 1, + "queues": [ + "queues" ], - \\"scaling_config\\": { - \\"maximum_concurrency\\": 1 + "scaling_config": { + "maximum_concurrency": 1 }, - \\"self_managed_event_source\\": { - \\"endpoints\\": \\"\${jsondecode(local.resource_selfmanaged-kafka-bootstrap-servers_C65ED52F)}\\" + "self_managed_event_source": { + "endpoints": "\${jsondecode(local.resource_selfmanaged-kafka-bootstrap-servers_C65ED52F)}" }, - \\"self_managed_kafka_event_source_config\\": { - \\"consumer_group_id\\": \\"consumerGroupId\\" + "self_managed_kafka_event_source_config": { + "consumer_group_id": "consumerGroupId" }, - \\"source_access_configuration\\": [ + "source_access_configuration": [ { - \\"type\\": \\"type\\", - \\"uri\\": \\"uri\\" + "type": "type", + "uri": "uri" } ], - \\"starting_position\\": \\"LATEST\\", - \\"starting_position_timestamp\\": \\"\${formatdate(\\\\\\"YYYY-MM-DD'T'hh:mm:ssZ\\\\\\", \\\\\\"100000\\\\\\")}\\", - \\"topics\\": [ - \\"topics\\" + "starting_position": "LATEST", + "starting_position_timestamp": "\${formatdate(\\"YYYY-MM-DD'T'hh:mm:ssZ\\", \\"100000\\")}", + "topics": [ + "topics" ], - \\"tumbling_window_in_seconds\\": 1 + "tumbling_window_in_seconds": 1 } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_lambda_event_source_mapping.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_lambda_event_source_mapping.resource_22C949BF.id}", + "type": "string" } } }" @@ -99,50 +99,50 @@ exports[`Lambda mappings > Should map AWS::Lambda::EventSourceMapping 1`] = ` exports[`Lambda mappings > Should map AWS::Lambda::LayerVersion 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_lambda_layer_version\\": { - \\"resource_22C949BF\\": { - \\"compatible_architectures\\": [ - \\"x86_64\\" + "resource": { + "aws_lambda_layer_version": { + "resource_22C949BF": { + "compatible_architectures": [ + "x86_64" ], - \\"compatible_runtimes\\": [ - \\"nodejs12.x\\" + "compatible_runtimes": [ + "nodejs12.x" ], - \\"description\\": \\"my description\\", - \\"layer_name\\": \\"my-layer\\", - \\"license_info\\": \\"my-license\\", - \\"s3_bucket\\": \\"my-bucket\\", - \\"s3_key\\": \\"my-key\\", - \\"s3_object_version\\": \\"my-version\\", - \\"skip_destroy\\": true + "description": "my description", + "layer_name": "my-layer", + "license_info": "my-license", + "s3_bucket": "my-bucket", + "s3_key": "my-key", + "s3_object_version": "my-version", + "skip_destroy": true } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_lambda_layer_version.resource_22C949BF.arn}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_lambda_layer_version.resource_22C949BF.arn}", + "type": "string" } } }" @@ -150,44 +150,44 @@ exports[`Lambda mappings > Should map AWS::Lambda::LayerVersion 1`] = ` exports[`Lambda mappings > Should map AWS::Lambda::LayerVersionPermission 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_lambda_layer_version_permission\\": { - \\"resource_22C949BF\\": { - \\"action\\": \\"lambda:GetLayerVersion\\", - \\"layer_name\\": \\"arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1\\", - \\"organization_id\\": \\"o-123456\\", - \\"principal\\": \\"123456789012\\", - \\"skip_destroy\\": true, - \\"statement_id\\": \\"teststackawstackresourceC278F851\\", - \\"version_number\\": \\"\${tonumber(element(split(\\\\\\":\\\\\\", \\\\\\"arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1\\\\\\"), 7))}\\" + "resource": { + "aws_lambda_layer_version_permission": { + "resource_22C949BF": { + "action": "lambda:GetLayerVersion", + "layer_name": "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1", + "organization_id": "o-123456", + "principal": "123456789012", + "skip_destroy": true, + "statement_id": "teststackawstackresourceC278F851", + "version_number": "\${tonumber(element(split(\\":\\", \\"arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1\\"), 7))}" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_lambda_layer_version_permission.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_lambda_layer_version_permission.resource_22C949BF.id}", + "type": "string" } } }" @@ -195,146 +195,45 @@ exports[`Lambda mappings > Should map AWS::Lambda::LayerVersionPermission 1`] = exports[`Lambda mappings > Should map AWS::Lambda::Permission 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_lambda_permission\\": { - \\"resource_22C949BF\\": { - \\"action\\": \\"lambda:InvokeFunction\\", - \\"event_source_token\\": \\"token\\", - \\"function_name\\": \\"my-function\\", - \\"function_url_auth_type\\": \\"IAM\\", - \\"principal\\": \\"sns.amazonaws.com\\", - \\"principal_org_id\\": \\"123456789012\\", - \\"source_account\\": \\"123456789012\\", - \\"source_arn\\": \\"arn:aws:sns:us-east-1:123456789012:my-topic-1a2b3c4d\\" + "resource": { + "aws_lambda_permission": { + "resource_22C949BF": { + "action": "lambda:InvokeFunction", + "event_source_token": "token", + "function_name": "my-function", + "function_url_auth_type": "IAM", + "principal": "sns.amazonaws.com", + "principal_org_id": "123456789012", + "source_account": "123456789012", + "source_arn": "arn:aws:sns:us-east-1:123456789012:my-topic-1a2b3c4d" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_lambda_permission.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" - } - } -}" -`; - -exports[`Lambda mappings > should map CfnFunction to LambdaFunction 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_lambda_function\\": { - \\"resource_22C949BF\\": { - \\"architectures\\": [ - \\"x86_64\\" - ], - \\"code_signing_config_arn\\": \\"codeSigningConfigArn\\", - \\"dead_letter_config\\": { - \\"target_arn\\": \\"targetArn\\" - }, - \\"description\\": \\"description\\", - \\"environment\\": { - \\"variables\\": { - \\"key\\": \\"value\\" - } - }, - \\"ephemeral_storage\\": { - \\"size\\": 1 - }, - \\"file_system_config\\": { - \\"arn\\": \\"arn\\", - \\"local_mount_path\\": \\"localMountPath\\" - }, - \\"function_name\\": \\"functionName\\", - \\"handler\\": \\"handler\\", - \\"image_config\\": { - \\"command\\": [ - \\"command\\" - ], - \\"entry_point\\": [ - \\"entryPoint\\" - ], - \\"working_directory\\": \\"workingDirectory\\" - }, - \\"image_uri\\": \\"imageUri\\", - \\"kms_key_arn\\": \\"kmsKeyArn\\", - \\"layers\\": [ - \\"layers\\" - ], - \\"memory_size\\": 1, - \\"package_type\\": \\"packageType\\", - \\"publish\\": true, - \\"reserved_concurrent_executions\\": 1, - \\"role\\": \\"role\\", - \\"runtime\\": \\"runtime\\", - \\"s3_bucket\\": \\"s3Bucket\\", - \\"s3_key\\": \\"s3Key\\", - \\"s3_object_version\\": \\"s3ObjectVersion\\", - \\"snap_start\\": { - \\"apply_on\\": \\"1\\" - }, - \\"tags\\": { - \\"key\\": \\"value\\" - }, - \\"timeout\\": 1, - \\"tracing_config\\": { - \\"mode\\": \\"Active\\" - }, - \\"vpc_config\\": { - \\"security_group_ids\\": [ - \\"securityGroupIds\\" - ], - \\"subnet_ids\\": [ - \\"subnetIds\\" - ] - } - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_lambda_function.resource_22C949BF.arn, \\\\\\",\\\\\\", \\\\\\"[object Object]\\\\\\", \\\\\\",\\\\\\", aws_lambda_function.resource_22C949BF.snap_start[0].apply_on, \\\\\\",\\\\\\", aws_lambda_function.resource_22C949BF.snap_start[0].optimization_status])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_lambda_permission.resource_22C949BF.id}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap b/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap index b18f2d5..616f7e9 100644 --- a/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap @@ -2,43 +2,43 @@ exports[`Logs mappings > Should map AWS::Logs::LogGroup 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudwatch_log_group\\": { - \\"resource_22C949BF\\": { - \\"kms_key_id\\": \\"test-kms-key-id\\", - \\"name\\": \\"test-log-group-name\\", - \\"retention_in_days\\": 1, - \\"tags\\": { - \\"test-tag-key\\": \\"test-tag-value\\" + "resource": { + "aws_cloudwatch_log_group": { + "resource_22C949BF": { + "kms_key_id": "test-kms-key-id", + "name": "test-log-group-name", + "retention_in_days": 1, + "tags": { + "test-tag-key": "test-tag-value" } } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_cloudwatch_log_group.resource_22C949BF.arn}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_cloudwatch_log_group.resource_22C949BF.arn}", + "type": "string" } } }" @@ -46,39 +46,39 @@ exports[`Logs mappings > Should map AWS::Logs::LogGroup 1`] = ` exports[`Logs mappings > Should map AWS::Logs::ResourcePolicy 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_cloudwatch_log_resource_policy\\": { - \\"resource_22C949BF\\": { - \\"policy_document\\": \\"\${join(\\\\\\"\\\\\\", [\\\\\\"{\\\\\\\\\\\\\\"Version\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"2012-10-17\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"Statement\\\\\\\\\\\\\\":[{\\\\\\\\\\\\\\"Sid\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"test-sid\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"Effect\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"Allow\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"Principal\\\\\\\\\\\\\\":{\\\\\\\\\\\\\\"AWS\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"test-principal\\\\\\\\\\\\\\"},\\\\\\\\\\\\\\"Action\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"logs:PutLogEvents\\\\\\\\\\\\\\",\\\\\\\\\\\\\\"Resource\\\\\\\\\\\\\\":\\\\\\\\\\\\\\"test-resource\\\\\\\\\\\\\\"}]}\\\\\\"])}\\", - \\"policy_name\\": \\"test-policy-name\\" + "resource": { + "aws_cloudwatch_log_resource_policy": { + "resource_22C949BF": { + "policy_document": "\${join(\\"\\", [\\"{\\\\\\"Version\\\\\\":\\\\\\"2012-10-17\\\\\\",\\\\\\"Statement\\\\\\":[{\\\\\\"Sid\\\\\\":\\\\\\"test-sid\\\\\\",\\\\\\"Effect\\\\\\":\\\\\\"Allow\\\\\\",\\\\\\"Principal\\\\\\":{\\\\\\"AWS\\\\\\":\\\\\\"test-principal\\\\\\"},\\\\\\"Action\\\\\\":\\\\\\"logs:PutLogEvents\\\\\\",\\\\\\"Resource\\\\\\":\\\\\\"test-resource\\\\\\"}]}\\"])}", + "policy_name": "test-policy-name" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/route53.spec.ts.snap b/src/__tests__/mappings/__snapshots__/route53.spec.ts.snap index efdcd81..27532a9 100644 --- a/src/__tests__/mappings/__snapshots__/route53.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/route53.spec.ts.snap @@ -2,81 +2,81 @@ exports[`Route53 mappings > Should map AWS::Route53::RecordSet 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_route53_record\\": { - \\"resource_22C949BF\\": { - \\"alias\\": { - \\"evaluate_target_health\\": true, - \\"name\\": \\"test-dns-name\\", - \\"zone_id\\": \\"test-hosted-zone-id\\" + "resource": { + "aws_route53_record": { + "resource_22C949BF": { + "alias": { + "evaluate_target_health": true, + "name": "test-dns-name", + "zone_id": "test-hosted-zone-id" }, - \\"cidr_routing_policy\\": { - \\"collection_id\\": \\"test-collection-id\\", - \\"location_name\\": \\"test-location-name\\" + "cidr_routing_policy": { + "collection_id": "test-collection-id", + "location_name": "test-location-name" }, - \\"failover_routing_policy\\": { - \\"type\\": \\"test-failover\\" + "failover_routing_policy": { + "type": "test-failover" }, - \\"geolocation_routing_policy\\": { - \\"continent\\": \\"test-continent-code\\", - \\"country\\": \\"test-country\\", - \\"subdivision\\": \\"test-subdivision-code\\" + "geolocation_routing_policy": { + "continent": "test-continent-code", + "country": "test-country", + "subdivision": "test-subdivision-code" }, - \\"geoproximity_routing_policy\\": { - \\"aws_region\\": \\"test-region\\", - \\"bias\\": 60, - \\"coordinates\\": [ + "geoproximity_routing_policy": { + "aws_region": "test-region", + "bias": 60, + "coordinates": [ { - \\"latitude\\": \\"test-latitude\\", - \\"longitude\\": \\"test-longitude\\" + "latitude": "test-latitude", + "longitude": "test-longitude" } ], - \\"local_zone_group\\": \\"test-local-zone-group\\" + "local_zone_group": "test-local-zone-group" }, - \\"health_check_id\\": \\"test-health-check-id\\", - \\"latency_routing_policy\\": { - \\"region\\": \\"test-region\\" + "health_check_id": "test-health-check-id", + "latency_routing_policy": { + "region": "test-region" }, - \\"multivalue_answer_routing_policy\\": true, - \\"name\\": \\"test-record-set\\", - \\"records\\": [ - \\"test-resource-record\\" + "multivalue_answer_routing_policy": true, + "name": "test-record-set", + "records": [ + "test-resource-record" ], - \\"set_identifier\\": \\"test-set-identifier\\", - \\"ttl\\": 60, - \\"type\\": \\"test-type\\", - \\"weighted_routing_policy\\": { - \\"weight\\": 60 + "set_identifier": "test-set-identifier", + "ttl": 60, + "type": "test-type", + "weighted_routing_policy": { + "weight": 60 }, - \\"zone_id\\": \\"test-hosted-zone-id\\" + "zone_id": "test-hosted-zone-id" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_route53_record.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_route53_record.resource_22C949BF.id}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/s3.spec.ts.snap b/src/__tests__/mappings/__snapshots__/s3.spec.ts.snap index 894ba7f..547c19a 100644 --- a/src/__tests__/mappings/__snapshots__/s3.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/s3.spec.ts.snap @@ -2,39 +2,39 @@ exports[`S3 mappings > Should map AWS::S3::BucketPolicy 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_s3_bucket_policy\\": { - \\"resource_22C949BF\\": { - \\"bucket\\": \\"test-bucket\\", - \\"policy\\": \\"\${jsonencode({\\\\\\"Version\\\\\\" = \\\\\\"2012-10-17\\\\\\", \\\\\\"Statement\\\\\\" = [{\\\\\\"Sid\\\\\\" = \\\\\\"test-sid\\\\\\", \\\\\\"Effect\\\\\\" = \\\\\\"Allow\\\\\\", \\\\\\"Principal\\\\\\" = \\\\\\"*\\\\\\", \\\\\\"Action\\\\\\" = [\\\\\\"s3:GetObject\\\\\\"], \\\\\\"Resource\\\\\\" = [\\\\\\"arn:aws:s3:::test-bucket/*\\\\\\"]}]})}\\" + "resource": { + "aws_s3_bucket_policy": { + "resource_22C949BF": { + "bucket": "test-bucket", + "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Sid\\" = \\"test-sid\\", \\"Effect\\" = \\"Allow\\", \\"Principal\\" = \\"*\\", \\"Action\\" = [\\"s3:GetObject\\"], \\"Resource\\" = [\\"arn:aws:s3:::test-bucket/*\\"]}]})}" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "", + "type": "string" } } }" diff --git a/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap b/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap deleted file mode 100644 index 18cf7dd..0000000 --- a/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap +++ /dev/null @@ -1,126 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`SNS mappings > AWS:SNS:Subscription > should translate 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_sns_topic_subscription\\": { - \\"resource_22C949BF\\": { - \\"delivery_policy\\": \\"\${jsonencode({\\\\\\"deliveryPolicy\\\\\\" = true})}\\", - \\"endpoint\\": \\"example-endpoint.example\\", - \\"filter_policy\\": \\"\${jsonencode({\\\\\\"filterPolicy\\\\\\" = false})}\\", - \\"filter_policy_scope\\": \\"FilterPolicyScope\\", - \\"protocol\\": \\"https\\", - \\"raw_message_delivery\\": true, - \\"redrive_policy\\": \\"\${jsonencode({\\\\\\"redrivePolicy\\\\\\" = true})}\\", - \\"replay_policy\\": \\"\${jsonencode({\\\\\\"replayPolicy\\\\\\" = true})}\\", - \\"subscription_role_arn\\": \\"SubscriptionRoleArn\\", - \\"topic_arn\\": \\"ExampleArn\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_sns_topic_subscription.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" - } - } -}" -`; - -exports[`SNS mappings > AWS:SNS:Topic > Should translate 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_sns_topic\\": { - \\"resource_22C949BF\\": { - \\"application_failure_feedback_role_arn\\": \\"FailureFeedbackRoleArnapplication\\", - \\"application_success_feedback_role_arn\\": \\"SuccessFeedbackRoleArnapplication\\", - \\"application_success_feedback_sample_rate\\": 4, - \\"archive_policy\\": \\"\${jsonencode({\\\\\\"archivePolicy\\\\\\" = true})}\\", - \\"content_based_deduplication\\": true, - \\"display_name\\": \\"ExampleDisplayName\\", - \\"fifo_topic\\": true, - \\"firehose_failure_feedback_role_arn\\": \\"FailureFeedbackRoleArnfirehose\\", - \\"firehose_success_feedback_role_arn\\": \\"SuccessFeedbackRoleArnfirehose\\", - \\"firehose_success_feedback_sample_rate\\": 5, - \\"http_failure_feedback_role_arn\\": \\"FailureFeedbackRoleArnHttps\\", - \\"http_success_feedback_role_arn\\": \\"SuccessFeedbackRoleArnHttps\\", - \\"http_success_feedback_sample_rate\\": 1, - \\"kms_master_key_id\\": \\"ExampleKmsMasterKeyId\\", - \\"lambda_failure_feedback_role_arn\\": \\"FailureFeedbackRoleArnlambda\\", - \\"lambda_success_feedback_role_arn\\": \\"SuccessFeedbackRoleArnlambda\\", - \\"lambda_success_feedback_sample_rate\\": 3, - \\"name\\": \\"ExampleTopic\\", - \\"signature_version\\": 1, - \\"sqs_failure_feedback_role_arn\\": \\"FailureFeedbackRoleArnsqs\\", - \\"sqs_success_feedback_role_arn\\": \\"SuccessFeedbackRoleArnsqs\\", - \\"sqs_success_feedback_sample_rate\\": 2, - \\"tags\\": { - \\"ExampleKey\\": \\"ExampleValue\\" - }, - \\"tracing_config\\": \\"PASSTHROUGH\\" - } - }, - \\"aws_sns_topic_data_protection_policy\\": { - \\"resource_resource-data-protection-policy_668B61E5\\": { - \\"arn\\": \\"\${aws_sns_topic.resource_22C949BF.arn}\\", - \\"policy\\": \\"\${jsonencode({\\\\\\"dataProtectionPolicy\\\\\\" = true})}\\" - } - }, - \\"aws_sns_topic_subscription\\": { - \\"resource_subscription-https-example-endpointexample_78A1AFFF\\": { - \\"endpoint\\": \\"example-endpoint.example\\", - \\"protocol\\": \\"https\\", - \\"topic_arn\\": \\"\${aws_sns_topic.resource_22C949BF.arn}\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_sns_topic.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_sns_topic.resource_22C949BF.name])}\\", - \\"type\\": \\"string\\" - } - } -}" -`; diff --git a/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap b/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap deleted file mode 100644 index 8fe1445..0000000 --- a/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap +++ /dev/null @@ -1,88 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`SQS mappings > AWS:SQS:QueuePolicy > should translate to multiple SqsQueuePolicy 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_sqs_queue_policy\\": { - \\"resource_22C949BF\\": { - \\"depends_on\\": [ - \\"aws_sqs_queue_policy.resource_resource0_0E1F9B69\\" - ], - \\"policy\\": \\"\${jsonencode({\\\\\\"read\\\\\\" = true})}\\", - \\"queue_url\\": \\"https://sqs:us-east-2.amazonaws.com/444455556666/queue2\\" - }, - \\"resource_resource0_0E1F9B69\\": { - \\"policy\\": \\"\${jsonencode({\\\\\\"read\\\\\\" = true})}\\", - \\"queue_url\\": \\"https://sqs:us-east-2.amazonaws.com/444455556666/queue1\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_sqs_queue_policy.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" - } - } -}" -`; - -exports[`SQS mappings > AWS:SQS:QueuePolicy > should translate to single SqsQueuePolicy 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_sqs_queue_policy\\": { - \\"resource_22C949BF\\": { - \\"policy\\": \\"\${jsonencode({\\\\\\"read\\\\\\" = true})}\\", - \\"queue_url\\": \\"https://sqs:us-east-2.amazonaws.com/444455556666/queue1\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${aws_sqs_queue_policy.resource_22C949BF.id}\\", - \\"type\\": \\"string\\" - } - } -}" -`; diff --git a/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap b/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap index 349bbc3..f2e9c17 100644 --- a/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap @@ -1,114 +1,61 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with Object definition 1`] = ` -"{ - \\"provider\\": { - \\"aws\\": [ - { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" - } - ] - }, - \\"resource\\": { - \\"aws_sfn_state_machine\\": { - \\"resource_22C949BF\\": { - \\"definition\\": \\"\${jsonencode({\\\\\\"StartAt\\\\\\" = \\\\\\"HelloWorld\\\\\\", \\\\\\"States\\\\\\" = {}})}\\", - \\"logging_configuration\\": { - \\"include_execution_data\\": true, - \\"level\\": \\"ALL\\", - \\"log_destination\\": \\"logGroupArn:*\\" - }, - \\"name\\": \\"name\\", - \\"role_arn\\": \\"roleArn\\", - \\"tags\\": { - \\"key\\": \\"value\\" - }, - \\"tracing_configuration\\": { - \\"enabled\\": true - }, - \\"type\\": \\"STANDARD\\" - } - } - }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" - } - }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" - } - } - }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.name, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}\\", - \\"type\\": \\"string\\" - } - } -}" -`; - exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with S3 definition 1`] = ` "{ - \\"data\\": { - \\"aws_s3_bucket_object\\": { - \\"resource_resource-definition_AA6652B4\\": { - \\"bucket\\": \\"bucket\\", - \\"key\\": \\"key\\" + "data": { + "aws_s3_bucket_object": { + "resource_resource-definition_AA6652B4": { + "bucket": "bucket", + "key": "key" } } }, - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_sfn_state_machine\\": { - \\"resource_22C949BF\\": { - \\"definition\\": \\"\${data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body}\\", - \\"logging_configuration\\": { - \\"include_execution_data\\": true, - \\"level\\": \\"ALL\\", - \\"log_destination\\": \\"logGroupArn:*\\" + "resource": { + "aws_sfn_state_machine": { + "resource_22C949BF": { + "definition": "\${data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body}", + "logging_configuration": { + "include_execution_data": true, + "level": "ALL", + "log_destination": "logGroupArn:*" }, - \\"name\\": \\"name\\", - \\"role_arn\\": \\"roleArn\\", - \\"tags\\": { - \\"key\\": \\"value\\" + "name": "name", + "role_arn": "roleArn", + "tags": { + "key": "value" }, - \\"tracing_configuration\\": { - \\"enabled\\": true + "tracing_configuration": { + "enabled": true }, - \\"type\\": \\"STANDARD\\" + "type": "STANDARD" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.name, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\",\\", aws_sfn_state_machine.resource_22C949BF.name, \\",\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}", + "type": "string" } } }" @@ -116,52 +63,52 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with String definition 1`] = ` "{ - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_sfn_state_machine\\": { - \\"resource_22C949BF\\": { - \\"definition\\": \\"\${join(\\\\\\"\\\\\\", [\\\\\\"{\\\\\\\\\\\\\\"StartAt\\\\\\\\\\\\\\": \\\\\\\\\\\\\\"HelloWorld\\\\\\\\\\\\\\", \\\\\\\\\\\\\\"States\\\\\\\\\\\\\\": {}}\\\\\\"])}\\", - \\"logging_configuration\\": { - \\"include_execution_data\\": true, - \\"level\\": \\"ALL\\", - \\"log_destination\\": \\"logGroupArn:*\\" + "resource": { + "aws_sfn_state_machine": { + "resource_22C949BF": { + "definition": "\${join(\\"\\", [\\"{\\\\\\"StartAt\\\\\\": \\\\\\"HelloWorld\\\\\\", \\\\\\"States\\\\\\": {}}\\"])}", + "logging_configuration": { + "include_execution_data": true, + "level": "ALL", + "log_destination": "logGroupArn:*" }, - \\"name\\": \\"name\\", - \\"role_arn\\": \\"roleArn\\", - \\"tags\\": { - \\"key\\": \\"value\\" + "name": "name", + "role_arn": "roleArn", + "tags": { + "key": "value" }, - \\"tracing_configuration\\": { - \\"enabled\\": true + "tracing_configuration": { + "enabled": true }, - \\"type\\": \\"STANDARD\\" + "type": "STANDARD" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.name, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\",\\", aws_sfn_state_machine.resource_22C949BF.name, \\",\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}", + "type": "string" } } }" @@ -169,60 +116,60 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with definition substitutions 1`] = ` "{ - \\"data\\": { - \\"aws_s3_bucket_object\\": { - \\"resource_resource-definition_AA6652B4\\": { - \\"bucket\\": \\"bucket\\", - \\"key\\": \\"key\\" + "data": { + "aws_s3_bucket_object": { + "resource_resource-definition_AA6652B4": { + "bucket": "bucket", + "key": "key" } } }, - \\"provider\\": { - \\"aws\\": [ + "provider": { + "aws": [ { - \\"alias\\": \\"us_east_1\\", - \\"region\\": \\"us-east-1\\" + "alias": "us_east_1", + "region": "us-east-1" } ] }, - \\"resource\\": { - \\"aws_sfn_state_machine\\": { - \\"resource_22C949BF\\": { - \\"definition\\": \\"\${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, \\\\\\"$\${MyFunction}\\\\\\", \\\\\\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\\\\\"), \\\\\\"$\${Task}\\\\\\", \\\\\\"TaskType\\\\\\")}\\", - \\"logging_configuration\\": { - \\"include_execution_data\\": true, - \\"level\\": \\"ALL\\", - \\"log_destination\\": \\"logGroupArn:*\\" + "resource": { + "aws_sfn_state_machine": { + "resource_22C949BF": { + "definition": "\${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "logging_configuration": { + "include_execution_data": true, + "level": "ALL", + "log_destination": "logGroupArn:*" }, - \\"name\\": \\"name\\", - \\"role_arn\\": \\"roleArn\\", - \\"tags\\": { - \\"key\\": \\"value\\" + "name": "name", + "role_arn": "roleArn", + "tags": { + "key": "value" }, - \\"tracing_configuration\\": { - \\"enabled\\": true + "tracing_configuration": { + "enabled": true }, - \\"type\\": \\"STANDARD\\" + "type": "STANDARD" } } }, - \\"terraform\\": { - \\"backend\\": { - \\"local\\": { - \\"path\\": \\"/terraform.test-stack.tfstate\\" + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" } }, - \\"required_providers\\": { - \\"aws\\": { - \\"source\\": \\"aws\\", - \\"version\\": \\"5.60.0\\" + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" } } }, - \\"variable\\": { - \\"resource_refs_CDA17697\\": { - \\"default\\": \\"\${join(\\\\\\"\\\\\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.name, \\\\\\",\\\\\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}\\", - \\"type\\": \\"string\\" + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\",\\", aws_sfn_state_machine.resource_22C949BF.name, \\",\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}", + "type": "string" } } }" diff --git a/src/__tests__/mappings/apigateway.spec.ts b/src/__tests__/mappings/apigateway.spec.ts index 4c0aa28..292ecf9 100644 --- a/src/__tests__/mappings/apigateway.spec.ts +++ b/src/__tests__/mappings/apigateway.spec.ts @@ -222,7 +222,8 @@ describe("Apigateway mappings", () => { certificateArn: "certificate-arn", endpointType: "REGIONAL", securityPolicy: "TLS_1_2", - certificateName: "certificate-name", + // This property is not supported by terraform + // certificateName: "certificate-name", ownershipVerificationCertificateArn: "ownership-verification-certificate-arn", }], mutualTlsAuthentication: { diff --git a/src/__tests__/mappings/cognito.spec.ts b/src/__tests__/mappings/cognito.spec.ts index 7f04570..85a5f13 100644 --- a/src/__tests__/mappings/cognito.spec.ts +++ b/src/__tests__/mappings/cognito.spec.ts @@ -149,6 +149,12 @@ describe("Cognito mappings", () => { { allowClassicFlow: true, allowUnauthenticatedIdentities: true, + identityPoolTags: [ + { + value: "value", + key: "key", + } + ], cognitoIdentityProviders: [ { providerName: "provider-name", @@ -164,6 +170,9 @@ describe("Cognito mappings", () => { }, openIdConnectProviderArns: ["open-id-connect-provider-arn"], // FIXME: this is not supported by the provider yet + cognitoEvents: undefined, + pushSync: undefined, + cognitoStreams: undefined, // cognitoEvents: { // "event": "event", // }, @@ -216,6 +225,7 @@ describe("Cognito mappings", () => { maxLength: "max-length", minLength: "min-length", }, + developerOnlyAttribute: false, }, ], enabledMfas: ["SMS"], @@ -226,10 +236,16 @@ describe("Cognito mappings", () => { emailSubject: "email-subject", smsMessage: "sms-message", }, - unusedAccountValidityDays: 60, + // This is not supported by the provider yet + unusedAccountValidityDays: undefined, }, mfaConfiguration: "ON", userPoolAddOns: { + // This is not supported by the provider yet + advancedSecurityAdditionalFlows: undefined, + // advancedSecurityAdditionalFlows: { + // customAuthMode: "custom-auth-mode", + // }, advancedSecurityMode: "OFF", }, accountRecoverySetting: { diff --git a/src/__tests__/mappings/dynamodb.spec.ts b/src/__tests__/mappings/dynamodb.spec.ts index 09f6617..bfe71a8 100644 --- a/src/__tests__/mappings/dynamodb.spec.ts +++ b/src/__tests__/mappings/dynamodb.spec.ts @@ -111,7 +111,9 @@ describe("DynamoDB mappings", () => { sseSpecification: { sseEnabled: true, kmsMasterKeyId: "test-kms-master-key-id", - sseType: "KMS", + // TODO: Uncomment when KMS is supported + sseType: undefined + // sseType: "KMS", }, contributorInsightsSpecification: { enabled: true, diff --git a/src/__tests__/mappings/ec2-vpc.spec.ts b/src/__tests__/mappings/ec2-vpc.spec.ts index 9e6e40f..5a7fe93 100644 --- a/src/__tests__/mappings/ec2-vpc.spec.ts +++ b/src/__tests__/mappings/ec2-vpc.spec.ts @@ -128,6 +128,10 @@ describe("EC2 VPC mappings", () => { groupName: "test-security-group", groupDescription: "test-security-group-description", vpcId: "test-vpc-id", + tags: [{ + key: "Name", + value: "test-security-group", + }], securityGroupEgress: [ { destinationSecurityGroupId: "destination-security-group-id", diff --git a/src/__tests__/mappings/eks.spec.ts b/src/__tests__/mappings/eks.spec.ts new file mode 100644 index 0000000..e8142c1 --- /dev/null +++ b/src/__tests__/mappings/eks.spec.ts @@ -0,0 +1,38 @@ +import { SqsQueuePolicy } from "@cdktf/provider-aws/lib/sqs-queue-policy/index.js"; +import { CfnQueuePolicy } from "aws-cdk-lib/aws-sqs"; +import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; +import { synthesizeElementAndTestStability } from "../helpers.js"; +import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; +import {LocalBackend, Testing} from "cdktf"; +import {Cluster, KubernetesVersion} from "aws-cdk-lib/aws-eks" +import {registerMappings} from "../../mappings/index.js"; +import {Key} from "aws-cdk-lib/aws-kms" + +setupJest(); +registerMappings(); + +describe("ECS mappings", () => { + describe("Custom::AWSCDK-ECS-Cluster", () => { + it("should translate", () => { + class TestClass extends AwsTerraformAdaptorStack { + public readonly backend = new LocalBackend(this, { + path: `/terraform.${this.node.id}.tfstate`, + }); + + public readonly cluster = new Cluster(this, "cluster", { + version: KubernetesVersion.V1_30, + secretsEncryptionKey: Key.fromKeyArn(this, "key", "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"), + }) + } + + const app = Testing.app(); + const testStack = new TestClass(app, "test-stack", { + region: "us-east-1", + }); + + testStack.prepareStack(); + const synthStack = Testing.synth(testStack); + expect(synthStack).toMatchSnapshot(); + }) + }) +}); diff --git a/src/__tests__/mappings/iam.spec.ts b/src/__tests__/mappings/iam.spec.ts index 360247e..954d575 100644 --- a/src/__tests__/mappings/iam.spec.ts +++ b/src/__tests__/mappings/iam.spec.ts @@ -10,6 +10,7 @@ import { Testing } from "cdktf"; import { resolve } from "cdktf/lib/_tokens.js"; import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; import { itShouldMapCfnElementToTerraformResource, synthesizeElementAndTestStability } from "../helpers.js"; +import { describe, it } from "vitest"; setupJest(); describe("IAM Mappings", () => { diff --git a/src/__tests__/mappings/rds.spec.ts b/src/__tests__/mappings/rds.spec.ts new file mode 100644 index 0000000..128b5cb --- /dev/null +++ b/src/__tests__/mappings/rds.spec.ts @@ -0,0 +1,136 @@ +import {setupJest} from "cdktf/lib/testing/adapters/jest.js"; +import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; +import {LocalBackend, Testing} from "cdktf"; +import {Cluster, KubernetesVersion} from "aws-cdk-lib/aws-eks" +import {registerMappings} from "../../mappings/index.js"; +import {Key} from "aws-cdk-lib/aws-kms" +import {itShouldMapCfnElementToTerraformResource} from "../helpers.js"; +import {CfnDBCluster} from "aws-cdk-lib/aws-rds"; +import tf_aws from "@cdktf/provider-aws"; + +setupJest(); +registerMappings(); + +describe("RDS mappings", () => { + describe("AWS::RDS::DBCluster", () => { + itShouldMapCfnElementToTerraformResource(CfnDBCluster, { + domain: "example.com", + domainIamRoleName: "role", + enableIamDatabaseAuthentication: true, + masterUserPassword: "password", + masterUsername: "user", + storageEncrypted: true, + storageType: "gp2", + engine: "aurora-postgresql", + engineMode: "provisioned", + globalClusterIdentifier: "global", + preferredBackupWindow: "window", + preferredMaintenanceWindow: "window", + sourceRegion: "region", + port: 3306, + manageMasterUserPassword: true, + enableHttpEndpoint: true, + networkType: "vpc", + engineLifecycleSupport: "beta", + performanceInsightsEnabled: true, + performanceInsightsKmsKeyId: "key", + performanceInsightsRetentionPeriod: 7, + masterUserSecret: { + kmsKeyId: "key", + secretArn: "arn", + }, + kmsKeyId: "key", + iops: 1000, + dbSystemId: "system", + associatedRoles: [ + { + roleArn: "role", + } + ], + serverlessV2ScalingConfiguration: { + maxCapacity: 2, + minCapacity: 1, + }, + autoMinorVersionUpgrade: true, + backupRetentionPeriod: 7, + backtrackWindow: 7, + deletionProtection: true, + enableCloudwatchLogsExports: ["log"], + enableGlobalWriteForwarding: true, + enableLocalWriteForwarding: true, + allocatedStorage: 100, + dbClusterInstanceClass: "db.t2.micro", + snapshotIdentifier: "snapshot", + engineVersion: "10.4", + availabilityZones: ["zone"], + dbClusterIdentifier: "cluster", + databaseName: "database", + dbClusterParameterGroupName: "group", + dbSubnetGroupName: "subnet", + vpcSecurityGroupIds: ["group"], + restoreToTime: "time", + useLatestRestorableTime: true, + sourceDbClusterIdentifier: "cluster", + restoreType: "type", + dbInstanceParameterGroupName: "group", + replicationSourceIdentifier: "source", + copyTagsToSnapshot: true, + publiclyAccessible: true, + monitoringInterval: 60, + monitoringRoleArn: "role", + scalingConfiguration: { + minCapacity: 1, + maxCapacity: 2, + autoPause: true, + secondsUntilAutoPause: 300, + secondsBeforeTimeout: 300, + timeoutAction: "ForceApplyCapacityChange", + }, + tags: [ + { + key: "key", + value: "value", + } + ], + + }, tf_aws.rdsCluster.RdsCluster, { + domain: "example.com", + domainIamRoleName: "role", + masterPassword: "password", + masterUsername: "user", + storageEncrypted: true, + storageType: "gp2", + engine: "aurora-postgresql", + engineMode: "provisioned", + globalClusterIdentifier: "global", + preferredBackupWindow: "window", + preferredMaintenanceWindow: "window", + sourceRegion: "region", + port: 3306, + manageMasterUserPassword: true, + enableHttpEndpoint: true, + networkType: "vpc", + allocatedStorage: 100, + dbClusterInstanceClass: "db.t2.micro", + snapshotIdentifier: "snapshot", + engineVersion: "10.4", + availabilityZones: ["zone"], + clusterIdentifier: "cluster", + databaseName: "database", + dbClusterParameterGroupName: "group", + dbSubnetGroupName: "subnet", + allowMajorVersionUpgrade: true, + backupRetentionPeriod: 7, + backtrackWindow: 7, + deletionProtection: true, + enableGlobalWriteForwarding: true, + enableLocalWriteForwarding: true, + iops: 1000, + performanceInsightsEnabled: true, + performanceInsightsRetentionPeriod: 7, + performanceInsightsKmsKeyId: "key", + port: 3306, + + }) + }) +}); diff --git a/src/__tests__/mappings/s3.spec.ts b/src/__tests__/mappings/s3.spec.ts index 767b3c6..c21c01e 100644 --- a/src/__tests__/mappings/s3.spec.ts +++ b/src/__tests__/mappings/s3.spec.ts @@ -3,6 +3,11 @@ import { CfnBucketPolicy } from "aws-cdk-lib/aws-s3"; import { App, Fn } from "cdktf"; import { resolve } from "cdktf/lib/_tokens.js"; import { synthesizeElementAndTestStability } from "../helpers.js"; +import { registerMappings } from "../../mappings/index.js"; +import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; + +registerMappings(); +setupJest(); describe("S3 mappings", () => { it("Should map AWS::S3::BucketPolicy", () => { diff --git a/src/__tests__/utils.spec.ts b/src/__tests__/utils.spec.ts new file mode 100644 index 0000000..a652593 --- /dev/null +++ b/src/__tests__/utils.spec.ts @@ -0,0 +1,148 @@ +import { AccessTracker } from '../mappings/utils.js'; + +const testObj = { + prop1: 'value1', + prop2: { + nestedProp1: 'nestedValue1', + nestedProp2: 'nestedValue2', + }, + prop3: [1, 2, 3], + prop4: { + deepNested: { + level1: 'deep1', + level2: 'deep2', + }, + }, +}; + +describe('AccessTracker', () => { + let tracker: AccessTracker; + + beforeEach(() => { + tracker = new AccessTracker(testObj); + }); + + it('isAllPropertiesAccessed returns false initially', () => { + expect(tracker.isAllPropertiesAccessed()).toBe(false); + }); + + it("should not mutate the original object", () => { + tracker.proxy.prop1; + expect(testObj).toEqual({ + prop1: 'value1', + prop2: { + nestedProp1: 'nestedValue1', + nestedProp2: 'nestedValue2', + }, + prop3: [1, 2, 3], + prop4: { + deepNested: { + level1: 'deep1', + level2: 'deep2', + }, + }, + }); + }) + + it('accessing properties marks them as accessed', () => { + tracker.proxy.prop1; + tracker.proxy.prop2; + expect(tracker.getAccessedProperties()).members(['prop1', 'prop2']); + }); + + it("accessing nested properties marks them as accessed", () => { + tracker.proxy.prop2.nestedProp1; + expect(tracker.getAccessedProperties()).members(["prop2.nestedProp1", "prop2"]); + }) + + it('getUnaccessedProperties returns unaccessed properties', () => { + tracker.proxy.prop1; + expect(tracker.getUnaccessedProperties()).toEqual([ + 'prop2', + 'prop2.nestedProp1', + 'prop2.nestedProp2', + 'prop3', + 'prop3.0', + 'prop3.1', + 'prop3.2', + 'prop4', + 'prop4.deepNested', + 'prop4.deepNested.level1', + 'prop4.deepNested.level2', + ]); + }); + + it('isAllPropertiesAccessed returns true when all properties are accessed', () => { + tracker.proxy.prop1; + tracker.proxy.prop2.nestedProp1; + tracker.proxy.prop2.nestedProp2; + tracker.proxy.prop3[0]; + tracker.proxy.prop3[1]; + tracker.proxy.prop3[2]; + tracker.proxy.prop4.deepNested; + tracker.proxy.prop4.deepNested.level1; + tracker.proxy.prop4.deepNested.level2; + expect(tracker.isAllPropertiesAccessed()).toBe(true); + }); + + + it('hasProperty returns true for existing properties', () => { + expect(tracker.hasProperty('prop1')).toBe(true); + expect(tracker.hasProperty('prop2.nestedProp1')).toBe(true); + }); + + it('hasProperty returns false for non-existing properties', () => { + expect(tracker.hasProperty('nonExistentProp')).toBe(false); + }); + + it('removePropertiesUnderPath removes specified properties', () => { + tracker.removePropertiesUnderPath('prop2'); + expect(tracker.hasProperty('prop2')).toBe(false); + expect(tracker.hasProperty('prop2.nestedProp')).toBe(false); + }); + + it('touchPath marks properties as accessed', () => { + tracker.touchPath('prop2'); + expect(tracker.getAccessedProperties()).members(['prop2', 'prop2.nestedProp1', 'prop2.nestedProp2']); + }); + + it('removePropertiesUnderPath removes properties using wildcard', () => { + tracker.removePropertiesUnderPath('prop2.*'); + expect(tracker.hasProperty('prop2')).toBe(true); + expect(tracker.hasProperty('prop2.nestedProp1')).toBe(false); + expect(tracker.hasProperty('prop2.nestedProp2')).toBe(false); + }); + + it('removePropertiesUnderPath removes deep nested properties using wildcard', () => { + tracker.removePropertiesUnderPath('prop4.*'); + expect(tracker.hasProperty('prop4')).toBe(true); + expect(tracker.hasProperty('prop4.deepNested.level1')).toBe(false); + expect(tracker.hasProperty('prop4.deepNested.level2')).toBe(false); + expect(tracker.hasProperty('prop1')).toBe(true); + }); + + it('touchPath marks properties as accessed using wildcard', () => { + tracker.touchPath('prop2'); + expect(tracker.getAccessedProperties()).members(['prop2', 'prop2.nestedProp1', 'prop2.nestedProp2']); + }); + + it('touchPath marks deep nested properties as accessed using wildcard', () => { + tracker.touchPath('prop4'); + expect(tracker.getAccessedProperties()).toContain('prop4'); + expect(tracker.getAccessedProperties()).toContain('prop4.deepNested'); + expect(tracker.getAccessedProperties()).toContain('prop4.deepNested.level1'); + expect(tracker.getAccessedProperties()).toContain('prop4.deepNested.level2'); + }); + + it('touchPath should work correctly with multiple wildcards', () => { + tracker.touchPath('*.deepNested.*'); + expect(tracker.getAccessedProperties()).members(['prop4.deepNested.level1', 'prop4.deepNested.level2']); + }); + + it('removePropertiesUnderPath should work correctly with multiple wildcards', () => { + tracker.removePropertiesUnderPath('*.deepNested.*'); + expect(tracker.hasProperty('prop4.deepNested.level1')).toBe(false); + expect(tracker.hasProperty('prop4.deepNested.level2')).toBe(false); + expect(tracker.hasProperty('prop4.deepNested')).toBe(true); + }) +}); diff --git a/src/lib/core/awscc/supported-types.ts b/src/lib/core/awscc/supported-types.ts index c07bd94..e073c08 100644 --- a/src/lib/core/awscc/supported-types.ts +++ b/src/lib/core/awscc/supported-types.ts @@ -1,829 +1,928 @@ // generated - this file is generated and can be updated by running the fetch:types script export default new Set([ - "AWS::ACMPCA::Certificate", - "AWS::ACMPCA::CertificateAuthority", - "AWS::ACMPCA::CertificateAuthorityActivation", - "AWS::APS::RuleGroupsNamespace", - "AWS::APS::Workspace", - "AWS::ARCZonalShift::ZonalAutoshiftConfiguration", - "AWS::AccessAnalyzer::Analyzer", - "AWS::Amplify::App", - "AWS::Amplify::Branch", - "AWS::Amplify::Domain", - "AWS::AmplifyUIBuilder::Component", - "AWS::AmplifyUIBuilder::Form", - "AWS::AmplifyUIBuilder::Theme", - "AWS::ApiGateway::Account", - "AWS::ApiGateway::ApiKey", - "AWS::ApiGateway::Authorizer", - "AWS::ApiGateway::BasePathMapping", - "AWS::ApiGateway::ClientCertificate", - "AWS::ApiGateway::Deployment", - "AWS::ApiGateway::DocumentationPart", - "AWS::ApiGateway::DocumentationVersion", - "AWS::ApiGateway::DomainName", - "AWS::ApiGateway::Method", - "AWS::ApiGateway::Model", - "AWS::ApiGateway::RequestValidator", - "AWS::ApiGateway::Resource", - "AWS::ApiGateway::RestApi", - "AWS::ApiGateway::Stage", - "AWS::ApiGateway::UsagePlan", - "AWS::ApiGateway::VpcLink", - "AWS::ApiGatewayV2::Api", - "AWS::ApiGatewayV2::ApiMapping", - "AWS::ApiGatewayV2::Authorizer", - "AWS::ApiGatewayV2::Deployment", - "AWS::ApiGatewayV2::DomainName", - "AWS::ApiGatewayV2::IntegrationResponse", - "AWS::ApiGatewayV2::Model", - "AWS::ApiGatewayV2::Route", - "AWS::ApiGatewayV2::RouteResponse", - "AWS::ApiGatewayV2::VpcLink", - "AWS::AppConfig::Application", - "AWS::AppConfig::ConfigurationProfile", - "AWS::AppConfig::Environment", - "AWS::AppConfig::Extension", - "AWS::AppConfig::ExtensionAssociation", - "AWS::AppFlow::Connector", - "AWS::AppFlow::ConnectorProfile", - "AWS::AppFlow::Flow", - "AWS::AppIntegrations::DataIntegration", - "AWS::AppIntegrations::EventIntegration", - "AWS::AppRunner::Service", - "AWS::AppRunner::VpcIngressConnection", - "AWS::AppStream::AppBlockBuilder", - "AWS::AppStream::Application", - "AWS::AppStream::DirectoryConfig", - "AWS::AppStream::Entitlement", - "AWS::AppSync::DomainName", - "AWS::AppSync::DomainNameApiAssociation", - "AWS::AppSync::FunctionConfiguration", - "AWS::AppSync::Resolver", - "AWS::AppSync::SourceApiAssociation", - "AWS::ApplicationAutoScaling::ScalableTarget", - "AWS::ApplicationAutoScaling::ScalingPolicy", - "AWS::ApplicationInsights::Application", - "AWS::Athena::CapacityReservation", - "AWS::Athena::DataCatalog", - "AWS::Athena::PreparedStatement", - "AWS::Athena::WorkGroup", - "AWS::AuditManager::Assessment", - "AWS::AutoScaling::AutoScalingGroup", - "AWS::AutoScaling::LifecycleHook", - "AWS::AutoScaling::ScalingPolicy", - "AWS::AutoScaling::ScheduledAction", - "AWS::AutoScaling::WarmPool", - "AWS::B2BI::Capability", - "AWS::B2BI::Partnership", - "AWS::B2BI::Profile", - "AWS::B2BI::Transformer", - "AWS::Backup::BackupPlan", - "AWS::Backup::BackupVault", - "AWS::Backup::Framework", - "AWS::Backup::ReportPlan", - "AWS::Backup::RestoreTestingPlan", - "AWS::Backup::RestoreTestingSelection", - "AWS::BackupGateway::Hypervisor", - "AWS::Batch::ComputeEnvironment", - "AWS::Batch::JobQueue", - "AWS::Batch::SchedulingPolicy", - "AWS::BillingConductor::BillingGroup", - "AWS::BillingConductor::CustomLineItem", - "AWS::BillingConductor::PricingPlan", - "AWS::BillingConductor::PricingRule", - "AWS::Budgets::BudgetsAction", - "AWS::CE::AnomalyMonitor", - "AWS::CE::AnomalySubscription", - "AWS::CE::CostCategory", - "AWS::CUR::ReportDefinition", - "AWS::Cassandra::Keyspace", - "AWS::Cassandra::Table", - "AWS::CertificateManager::Account", - "AWS::Chatbot::MicrosoftTeamsChannelConfiguration", - "AWS::Chatbot::SlackChannelConfiguration", - "AWS::CleanRooms::AnalysisTemplate", - "AWS::CleanRooms::Collaboration", - "AWS::CleanRooms::ConfiguredTable", - "AWS::CleanRooms::ConfiguredTableAssociation", - "AWS::CleanRooms::Membership", - "AWS::CloudFormation::HookDefaultVersion", - "AWS::CloudFormation::HookTypeConfig", - "AWS::CloudFormation::ResourceDefaultVersion", - "AWS::CloudFormation::Stack", - "AWS::CloudFormation::StackSet", - "AWS::CloudFormation::TypeActivation", - "AWS::CloudFront::CachePolicy", - "AWS::CloudFront::CloudFrontOriginAccessIdentity", - "AWS::CloudFront::ContinuousDeploymentPolicy", - "AWS::CloudFront::Distribution", - "AWS::CloudFront::Function", - "AWS::CloudFront::KeyGroup", - "AWS::CloudFront::KeyValueStore", - "AWS::CloudFront::OriginAccessControl", - "AWS::CloudFront::OriginRequestPolicy", - "AWS::CloudFront::PublicKey", - "AWS::CloudFront::RealtimeLogConfig", - "AWS::CloudFront::ResponseHeadersPolicy", - "AWS::CloudTrail::Channel", - "AWS::CloudTrail::EventDataStore", - "AWS::CloudTrail::ResourcePolicy", - "AWS::CloudTrail::Trail", - "AWS::CloudWatch::Alarm", - "AWS::CloudWatch::CompositeAlarm", - "AWS::CloudWatch::MetricStream", - "AWS::CodeArtifact::Domain", - "AWS::CodeArtifact::Repository", - "AWS::CodeBuild::Fleet", - "AWS::CodeDeploy::Application", - "AWS::CodeGuruProfiler::ProfilingGroup", - "AWS::CodePipeline::CustomActionType", - "AWS::CodeStarConnections::Connection", - "AWS::CodeStarConnections::RepositoryLink", - "AWS::CodeStarConnections::SyncConfiguration", - "AWS::CodeStarNotifications::NotificationRule", - "AWS::Cognito::IdentityPool", - "AWS::Cognito::IdentityPoolPrincipalTag", - "AWS::Cognito::IdentityPoolRoleAttachment", - "AWS::Cognito::LogDeliveryConfiguration", - "AWS::Cognito::UserPool", - "AWS::Cognito::UserPoolClient", - "AWS::Cognito::UserPoolGroup", - "AWS::Cognito::UserPoolRiskConfigurationAttachment", - "AWS::Comprehend::DocumentClassifier", - "AWS::Comprehend::Flywheel", - "AWS::Config::AggregationAuthorization", - "AWS::Config::ConfigRule", - "AWS::Config::ConfigurationAggregator", - "AWS::Config::ConformancePack", - "AWS::Config::OrganizationConformancePack", - "AWS::Config::StoredQuery", - "AWS::Connect::ApprovedOrigin", - "AWS::Connect::ContactFlow", - "AWS::Connect::ContactFlowModule", - "AWS::Connect::EvaluationForm", - "AWS::Connect::HoursOfOperation", - "AWS::Connect::Instance", - "AWS::Connect::InstanceStorageConfig", - "AWS::Connect::IntegrationAssociation", - "AWS::Connect::PhoneNumber", - "AWS::Connect::PredefinedAttribute", - "AWS::Connect::Prompt", - "AWS::Connect::Queue", - "AWS::Connect::QuickConnect", - "AWS::Connect::RoutingProfile", - "AWS::Connect::Rule", - "AWS::Connect::SecurityKey", - "AWS::Connect::SecurityProfile", - "AWS::Connect::TaskTemplate", - "AWS::Connect::TrafficDistributionGroup", - "AWS::Connect::User", - "AWS::Connect::UserHierarchyGroup", - "AWS::Connect::View", - "AWS::Connect::ViewVersion", - "AWS::ConnectCampaigns::Campaign", - "AWS::ControlTower::EnabledBaseline", - "AWS::ControlTower::EnabledControl", - "AWS::ControlTower::LandingZone", - "AWS::CustomerProfiles::CalculatedAttributeDefinition", - "AWS::CustomerProfiles::Domain", - "AWS::CustomerProfiles::EventStream", - "AWS::CustomerProfiles::Integration", - "AWS::CustomerProfiles::ObjectType", - "AWS::DMS::DataProvider", - "AWS::DMS::InstanceProfile", - "AWS::DMS::MigrationProject", - "AWS::DMS::ReplicationConfig", - "AWS::DataBrew::Dataset", - "AWS::DataBrew::Job", - "AWS::DataBrew::Project", - "AWS::DataBrew::Recipe", - "AWS::DataBrew::Ruleset", - "AWS::DataBrew::Schedule", - "AWS::DataPipeline::Pipeline", - "AWS::DataSync::Agent", - "AWS::DataSync::LocationAzureBlob", - "AWS::DataSync::LocationEFS", - "AWS::DataSync::LocationFSxLustre", - "AWS::DataSync::LocationFSxONTAP", - "AWS::DataSync::LocationFSxOpenZFS", - "AWS::DataSync::LocationFSxWindows", - "AWS::DataSync::LocationHDFS", - "AWS::DataSync::LocationNFS", - "AWS::DataSync::LocationObjectStorage", - "AWS::DataSync::LocationS3", - "AWS::DataSync::LocationSMB", - "AWS::DataSync::StorageSystem", - "AWS::DataSync::Task", - "AWS::DataZone::DataSource", - "AWS::DataZone::Domain", - "AWS::DataZone::Environment", - "AWS::DataZone::EnvironmentBlueprintConfiguration", - "AWS::DataZone::EnvironmentProfile", - "AWS::DataZone::Project", - "AWS::DataZone::SubscriptionTarget", - "AWS::Detective::Graph", - "AWS::Detective::MemberInvitation", - "AWS::Detective::OrganizationAdmin", - "AWS::DevOpsGuru::LogAnomalyDetectionIntegration", - "AWS::DevOpsGuru::ResourceCollection", - "AWS::DirectoryService::SimpleAD", - "AWS::DocDBElastic::Cluster", - "AWS::DynamoDB::GlobalTable", - "AWS::DynamoDB::Table", - "AWS::EC2::CapacityReservation", - "AWS::EC2::CapacityReservationFleet", - "AWS::EC2::CarrierGateway", - "AWS::EC2::CustomerGateway", - "AWS::EC2::DHCPOptions", - "AWS::EC2::EC2Fleet", - "AWS::EC2::EIP", - "AWS::EC2::FlowLog", - "AWS::EC2::GatewayRouteTableAssociation", - "AWS::EC2::Host", - "AWS::EC2::IPAM", - "AWS::EC2::IPAMPool", - "AWS::EC2::IPAMResourceDiscovery", - "AWS::EC2::IPAMResourceDiscoveryAssociation", - "AWS::EC2::IPAMScope", - "AWS::EC2::Instance", - "AWS::EC2::InstanceConnectEndpoint", - "AWS::EC2::InternetGateway", - "AWS::EC2::LaunchTemplate", - "AWS::EC2::LocalGatewayRoute", - "AWS::EC2::LocalGatewayRouteTable", - "AWS::EC2::LocalGatewayRouteTableVPCAssociation", - "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", - "AWS::EC2::NatGateway", - "AWS::EC2::NetworkAcl", - "AWS::EC2::NetworkInsightsAccessScope", - "AWS::EC2::NetworkInsightsAccessScopeAnalysis", - "AWS::EC2::NetworkInsightsAnalysis", - "AWS::EC2::NetworkInsightsPath", - "AWS::EC2::NetworkInterface", - "AWS::EC2::NetworkInterfaceAttachment", - "AWS::EC2::PrefixList", - "AWS::EC2::Route", - "AWS::EC2::RouteTable", - "AWS::EC2::SecurityGroup", - "AWS::EC2::SecurityGroupEgress", - "AWS::EC2::SecurityGroupIngress", - "AWS::EC2::SnapshotBlockPublicAccess", - "AWS::EC2::SpotFleet", - "AWS::EC2::Subnet", - "AWS::EC2::TransitGateway", - "AWS::EC2::TransitGatewayAttachment", - "AWS::EC2::TransitGatewayConnect", - "AWS::EC2::TransitGatewayMulticastDomain", - "AWS::EC2::TransitGatewayPeeringAttachment", - "AWS::EC2::TransitGatewayVpcAttachment", - "AWS::EC2::VPC", - "AWS::EC2::VPCDHCPOptionsAssociation", - "AWS::EC2::VPCEndpoint", - "AWS::EC2::VPCEndpointConnectionNotification", - "AWS::EC2::VPCEndpointService", - "AWS::EC2::VPCEndpointServicePermissions", - "AWS::EC2::VPCGatewayAttachment", - "AWS::EC2::VPCPeeringConnection", - "AWS::EC2::VPNConnection", - "AWS::EC2::VPNGateway", - "AWS::EC2::VerifiedAccessEndpoint", - "AWS::EC2::VerifiedAccessGroup", - "AWS::EC2::VerifiedAccessInstance", - "AWS::EC2::VerifiedAccessTrustProvider", - "AWS::EC2::Volume", - "AWS::ECR::PublicRepository", - "AWS::ECR::PullThroughCacheRule", - "AWS::ECR::RegistryPolicy", - "AWS::ECR::ReplicationConfiguration", - "AWS::ECR::Repository", - "AWS::ECS::CapacityProvider", - "AWS::ECS::Cluster", - "AWS::ECS::ClusterCapacityProviderAssociations", - "AWS::ECS::PrimaryTaskSet", - "AWS::ECS::Service", - "AWS::ECS::TaskDefinition", - "AWS::ECS::TaskSet", - "AWS::EFS::AccessPoint", - "AWS::EFS::FileSystem", - "AWS::EFS::MountTarget", - "AWS::EKS::AccessEntry", - "AWS::EKS::Addon", - "AWS::EKS::Cluster", - "AWS::EKS::FargateProfile", - "AWS::EKS::IdentityProviderConfig", - "AWS::EKS::Nodegroup", - "AWS::EKS::PodIdentityAssociation", - "AWS::EMR::Studio", - "AWS::EMR::StudioSessionMapping", - "AWS::EMR::WALWorkspace", - "AWS::EMRContainers::VirtualCluster", - "AWS::EMRServerless::Application", - "AWS::ElastiCache::GlobalReplicationGroup", - "AWS::ElastiCache::ServerlessCache", - "AWS::ElastiCache::SubnetGroup", - "AWS::ElastiCache::User", - "AWS::ElastiCache::UserGroup", - "AWS::ElasticBeanstalk::Application", - "AWS::ElasticBeanstalk::ApplicationVersion", - "AWS::ElasticBeanstalk::ConfigurationTemplate", - "AWS::ElasticBeanstalk::Environment", - "AWS::ElasticLoadBalancingV2::Listener", - "AWS::ElasticLoadBalancingV2::ListenerRule", - "AWS::ElasticLoadBalancingV2::LoadBalancer", - "AWS::ElasticLoadBalancingV2::TargetGroup", - "AWS::ElasticLoadBalancingV2::TrustStore", - "AWS::EntityResolution::IdMappingWorkflow", - "AWS::EntityResolution::MatchingWorkflow", - "AWS::EntityResolution::SchemaMapping", - "AWS::EventSchemas::Discoverer", - "AWS::EventSchemas::Registry", - "AWS::EventSchemas::RegistryPolicy", - "AWS::EventSchemas::Schema", - "AWS::Events::ApiDestination", - "AWS::Events::Archive", - "AWS::Events::Connection", - "AWS::Events::Endpoint", - "AWS::Events::EventBus", - "AWS::Events::Rule", - "AWS::Evidently::Experiment", - "AWS::Evidently::Feature", - "AWS::Evidently::Launch", - "AWS::Evidently::Project", - "AWS::FIS::ExperimentTemplate", - "AWS::FIS::TargetAccountConfiguration", - "AWS::FMS::NotificationChannel", - "AWS::FMS::Policy", - "AWS::FMS::ResourceSet", - "AWS::FSx::DataRepositoryAssociation", - "AWS::FinSpace::Environment", - "AWS::Forecast::DatasetGroup", - "AWS::FraudDetector::Detector", - "AWS::FraudDetector::EntityType", - "AWS::FraudDetector::EventType", - "AWS::FraudDetector::Label", - "AWS::FraudDetector::List", - "AWS::FraudDetector::Outcome", - "AWS::FraudDetector::Variable", - "AWS::GameLift::Alias", - "AWS::GameLift::Build", - "AWS::GameLift::Fleet", - "AWS::GameLift::GameServerGroup", - "AWS::GameLift::GameSessionQueue", - "AWS::GameLift::Location", - "AWS::GameLift::MatchmakingConfiguration", - "AWS::GameLift::MatchmakingRuleSet", - "AWS::GameLift::Script", - "AWS::GlobalAccelerator::Accelerator", - "AWS::GlobalAccelerator::EndpointGroup", - "AWS::GlobalAccelerator::Listener", - "AWS::Glue::Registry", - "AWS::Glue::Schema", - "AWS::Grafana::Workspace", - "AWS::GreengrassV2::ComponentVersion", - "AWS::GreengrassV2::Deployment", - "AWS::GroundStation::Config", - "AWS::GroundStation::MissionProfile", - "AWS::GuardDuty::Detector", - "AWS::GuardDuty::Filter", - "AWS::GuardDuty::IPSet", - "AWS::GuardDuty::Member", - "AWS::GuardDuty::ThreatIntelSet", - "AWS::HealthLake::FHIRDatastore", - "AWS::IAM::Group", - "AWS::IAM::GroupPolicy", - "AWS::IAM::InstanceProfile", - "AWS::IAM::ManagedPolicy", - "AWS::IAM::OIDCProvider", - "AWS::IAM::Role", - "AWS::IAM::RolePolicy", - "AWS::IAM::SAMLProvider", - "AWS::IAM::ServerCertificate", - "AWS::IAM::ServiceLinkedRole", - "AWS::IAM::User", - "AWS::IAM::UserPolicy", - "AWS::IAM::VirtualMFADevice", - "AWS::IVS::Channel", - "AWS::IVS::PlaybackKeyPair", - "AWS::IVS::RecordingConfiguration", - "AWS::IVS::Stage", - "AWS::IVS::StreamKey", - "AWS::IVSChat::LoggingConfiguration", - "AWS::IVSChat::Room", - "AWS::IdentityStore::Group", - "AWS::ImageBuilder::DistributionConfiguration", - "AWS::ImageBuilder::ImagePipeline", - "AWS::ImageBuilder::InfrastructureConfiguration", - "AWS::ImageBuilder::LifecyclePolicy", - "AWS::Inspector::AssessmentTarget", - "AWS::InspectorV2::CisScanConfiguration", - "AWS::InspectorV2::Filter", - "AWS::InternetMonitor::Monitor", - "AWS::IoT::AccountAuditConfiguration", - "AWS::IoT::Authorizer", - "AWS::IoT::BillingGroup", - "AWS::IoT::CACertificate", - "AWS::IoT::Certificate", - "AWS::IoT::CertificateProvider", - "AWS::IoT::CustomMetric", - "AWS::IoT::Dimension", - "AWS::IoT::DomainConfiguration", - "AWS::IoT::FleetMetric", - "AWS::IoT::Logging", - "AWS::IoT::MitigationAction", - "AWS::IoT::Policy", - "AWS::IoT::ProvisioningTemplate", - "AWS::IoT::ResourceSpecificLogging", - "AWS::IoT::RoleAlias", - "AWS::IoT::ScheduledAudit", - "AWS::IoT::SecurityProfile", - "AWS::IoT::SoftwarePackage", - "AWS::IoT::SoftwarePackageVersion", - "AWS::IoT::Thing", - "AWS::IoT::ThingGroup", - "AWS::IoT::ThingType", - "AWS::IoT::TopicRule", - "AWS::IoT::TopicRuleDestination", - "AWS::IoTAnalytics::Channel", - "AWS::IoTAnalytics::Dataset", - "AWS::IoTAnalytics::Datastore", - "AWS::IoTAnalytics::Pipeline", - "AWS::IoTCoreDeviceAdvisor::SuiteDefinition", - "AWS::IoTEvents::AlarmModel", - "AWS::IoTEvents::DetectorModel", - "AWS::IoTEvents::Input", - "AWS::IoTFleetHub::Application", - "AWS::IoTFleetWise::Campaign", - "AWS::IoTFleetWise::DecoderManifest", - "AWS::IoTFleetWise::Fleet", - "AWS::IoTFleetWise::ModelManifest", - "AWS::IoTFleetWise::SignalCatalog", - "AWS::IoTFleetWise::Vehicle", - "AWS::IoTSiteWise::AccessPolicy", - "AWS::IoTSiteWise::Asset", - "AWS::IoTSiteWise::AssetModel", - "AWS::IoTSiteWise::Dashboard", - "AWS::IoTSiteWise::Gateway", - "AWS::IoTSiteWise::Portal", - "AWS::IoTSiteWise::Project", - "AWS::IoTTwinMaker::ComponentType", - "AWS::IoTTwinMaker::Entity", - "AWS::IoTTwinMaker::Scene", - "AWS::IoTTwinMaker::Workspace", - "AWS::IoTWireless::Destination", - "AWS::IoTWireless::FuotaTask", - "AWS::IoTWireless::MulticastGroup", - "AWS::IoTWireless::NetworkAnalyzerConfiguration", - "AWS::IoTWireless::PartnerAccount", - "AWS::IoTWireless::WirelessDevice", - "AWS::IoTWireless::WirelessDeviceImportTask", - "AWS::IoTWireless::WirelessGateway", - "AWS::KMS::Alias", - "AWS::KMS::Key", - "AWS::KMS::ReplicaKey", - "AWS::KafkaConnect::Connector", - "AWS::Kendra::DataSource", - "AWS::Kendra::Faq", - "AWS::Kendra::Index", - "AWS::KendraRanking::ExecutionPlan", - "AWS::Kinesis::Stream", - "AWS::KinesisAnalyticsV2::Application", - "AWS::KinesisFirehose::DeliveryStream", - "AWS::KinesisVideo::SignalingChannel", - "AWS::KinesisVideo::Stream", - "AWS::LakeFormation::Tag", - "AWS::Lambda::CodeSigningConfig", - "AWS::Lambda::EventInvokeConfig", - "AWS::Lambda::EventSourceMapping", - "AWS::Lambda::Function", - "AWS::Lambda::Url", - "AWS::Lambda::Version", - "AWS::Lex::Bot", - "AWS::Lex::BotAlias", - "AWS::Lex::ResourcePolicy", - "AWS::LicenseManager::Grant", - "AWS::LicenseManager::License", - "AWS::Lightsail::Alarm", - "AWS::Lightsail::Bucket", - "AWS::Lightsail::Certificate", - "AWS::Lightsail::Container", - "AWS::Lightsail::Database", - "AWS::Lightsail::Disk", - "AWS::Lightsail::Distribution", - "AWS::Lightsail::Instance", - "AWS::Lightsail::LoadBalancer", - "AWS::Lightsail::LoadBalancerTlsCertificate", - "AWS::Lightsail::StaticIp", - "AWS::Location::APIKey", - "AWS::Location::GeofenceCollection", - "AWS::Location::Map", - "AWS::Location::PlaceIndex", - "AWS::Location::RouteCalculator", - "AWS::Location::Tracker", - "AWS::Logs::AccountPolicy", - "AWS::Logs::Delivery", - "AWS::Logs::DeliveryDestination", - "AWS::Logs::DeliverySource", - "AWS::Logs::Destination", - "AWS::Logs::LogAnomalyDetector", - "AWS::Logs::LogGroup", - "AWS::Logs::MetricFilter", - "AWS::Logs::QueryDefinition", - "AWS::Logs::ResourcePolicy", - "AWS::Logs::SubscriptionFilter", - "AWS::LookoutEquipment::InferenceScheduler", - "AWS::LookoutMetrics::AnomalyDetector", - "AWS::LookoutVision::Project", - "AWS::M2::Application", - "AWS::M2::Environment", - "AWS::MSK::BatchScramSecret", - "AWS::MSK::Cluster", - "AWS::MSK::ClusterPolicy", - "AWS::MSK::Configuration", - "AWS::MSK::Replicator", - "AWS::MSK::VpcConnection", - "AWS::MWAA::Environment", - "AWS::Macie::AllowList", - "AWS::Macie::CustomDataIdentifier", - "AWS::Macie::FindingsFilter", - "AWS::Macie::Session", - "AWS::ManagedBlockchain::Accessor", - "AWS::MediaConnect::Bridge", - "AWS::MediaConnect::BridgeOutput", - "AWS::MediaConnect::BridgeSource", - "AWS::MediaConnect::Flow", - "AWS::MediaConnect::FlowEntitlement", - "AWS::MediaConnect::FlowOutput", - "AWS::MediaConnect::FlowSource", - "AWS::MediaConnect::FlowVpcInterface", - "AWS::MediaLive::Multiplex", - "AWS::MediaLive::Multiplexprogram", - "AWS::MediaPackage::Channel", - "AWS::MediaPackage::OriginEndpoint", - "AWS::MediaPackage::PackagingGroup", - "AWS::MediaPackageV2::Channel", - "AWS::MediaPackageV2::ChannelGroup", - "AWS::MediaPackageV2::ChannelPolicy", - "AWS::MediaPackageV2::OriginEndpoint", - "AWS::MediaPackageV2::OriginEndpointPolicy", - "AWS::MediaTailor::Channel", - "AWS::MediaTailor::ChannelPolicy", - "AWS::MediaTailor::LiveSource", - "AWS::MediaTailor::PlaybackConfiguration", - "AWS::MediaTailor::SourceLocation", - "AWS::MediaTailor::VodSource", - "AWS::MemoryDB::ACL", - "AWS::MemoryDB::Cluster", - "AWS::MemoryDB::ParameterGroup", - "AWS::MemoryDB::SubnetGroup", - "AWS::MemoryDB::User", - "AWS::Neptune::DBCluster", - "AWS::NeptuneGraph::Graph", - "AWS::NeptuneGraph::PrivateGraphEndpoint", - "AWS::NetworkFirewall::Firewall", - "AWS::NetworkFirewall::FirewallPolicy", - "AWS::NetworkFirewall::LoggingConfiguration", - "AWS::NetworkFirewall::RuleGroup", - "AWS::NetworkFirewall::TLSInspectionConfiguration", - "AWS::NetworkManager::ConnectAttachment", - "AWS::NetworkManager::ConnectPeer", - "AWS::NetworkManager::CoreNetwork", - "AWS::NetworkManager::Device", - "AWS::NetworkManager::GlobalNetwork", - "AWS::NetworkManager::Link", - "AWS::NetworkManager::Site", - "AWS::NetworkManager::SiteToSiteVpnAttachment", - "AWS::NetworkManager::TransitGatewayPeering", - "AWS::NetworkManager::TransitGatewayRouteTableAttachment", - "AWS::NetworkManager::VpcAttachment", - "AWS::NimbleStudio::LaunchProfile", - "AWS::NimbleStudio::StreamingImage", - "AWS::NimbleStudio::Studio", - "AWS::NimbleStudio::StudioComponent", - "AWS::OSIS::Pipeline", - "AWS::Oam::Link", - "AWS::Oam::Sink", - "AWS::Omics::AnnotationStore", - "AWS::Omics::RunGroup", - "AWS::Omics::VariantStore", - "AWS::Omics::Workflow", - "AWS::OpenSearchServerless::AccessPolicy", - "AWS::OpenSearchServerless::Collection", - "AWS::OpenSearchServerless::LifecyclePolicy", - "AWS::OpenSearchServerless::SecurityConfig", - "AWS::OpenSearchServerless::SecurityPolicy", - "AWS::OpenSearchServerless::VpcEndpoint", - "AWS::OpenSearchService::Domain", - "AWS::OpsWorksCM::Server", - "AWS::Organizations::Account", - "AWS::Organizations::Organization", - "AWS::Organizations::OrganizationalUnit", - "AWS::Organizations::Policy", - "AWS::Organizations::ResourcePolicy", - "AWS::PCAConnectorAD::Connector", - "AWS::PCAConnectorAD::DirectoryRegistration", - "AWS::PCAConnectorAD::Template", - "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", - "AWS::Panorama::ApplicationInstance", - "AWS::Panorama::Package", - "AWS::Panorama::PackageVersion", - "AWS::Personalize::Dataset", - "AWS::Pinpoint::InAppTemplate", - "AWS::Pipes::Pipe", - "AWS::Proton::EnvironmentAccountConnection", - "AWS::Proton::EnvironmentTemplate", - "AWS::Proton::ServiceTemplate", - "AWS::QLDB::Stream", - "AWS::QuickSight::Analysis", - "AWS::QuickSight::Dashboard", - "AWS::QuickSight::DataSet", - "AWS::QuickSight::DataSource", - "AWS::QuickSight::RefreshSchedule", - "AWS::QuickSight::Template", - "AWS::QuickSight::Theme", - "AWS::QuickSight::Topic", - "AWS::QuickSight::VPCConnection", - "AWS::RAM::Permission", - "AWS::RDS::CustomDBEngineVersion", - "AWS::RDS::DBCluster", - "AWS::RDS::DBClusterParameterGroup", - "AWS::RDS::DBInstance", - "AWS::RDS::DBParameterGroup", - "AWS::RDS::DBProxy", - "AWS::RDS::DBProxyEndpoint", - "AWS::RDS::DBProxyTargetGroup", - "AWS::RDS::DBSubnetGroup", - "AWS::RDS::EventSubscription", - "AWS::RDS::GlobalCluster", - "AWS::RDS::Integration", - "AWS::RDS::OptionGroup", - "AWS::RUM::AppMonitor", - "AWS::Redshift::Cluster", - "AWS::Redshift::ClusterParameterGroup", - "AWS::Redshift::ClusterSubnetGroup", - "AWS::Redshift::EndpointAccess", - "AWS::Redshift::EndpointAuthorization", - "AWS::Redshift::EventSubscription", - "AWS::Redshift::ScheduledAction", - "AWS::RedshiftServerless::Namespace", - "AWS::RedshiftServerless::Workgroup", - "AWS::RefactorSpaces::Route", - "AWS::Rekognition::Collection", - "AWS::Rekognition::Project", - "AWS::Rekognition::StreamProcessor", - "AWS::ResilienceHub::App", - "AWS::ResilienceHub::ResiliencyPolicy", - "AWS::ResourceExplorer2::DefaultViewAssociation", - "AWS::ResourceExplorer2::Index", - "AWS::ResourceExplorer2::View", - "AWS::ResourceGroups::Group", - "AWS::RoboMaker::Fleet", - "AWS::RoboMaker::Robot", - "AWS::RoboMaker::RobotApplication", - "AWS::RoboMaker::SimulationApplication", - "AWS::RolesAnywhere::CRL", - "AWS::RolesAnywhere::Profile", - "AWS::RolesAnywhere::TrustAnchor", - "AWS::Route53::CidrCollection", - "AWS::Route53::HealthCheck", - "AWS::Route53::HostedZone", - "AWS::Route53::KeySigningKey", - "AWS::Route53RecoveryControl::ControlPanel", - "AWS::Route53RecoveryControl::RoutingControl", - "AWS::Route53RecoveryControl::SafetyRule", - "AWS::Route53RecoveryReadiness::Cell", - "AWS::Route53RecoveryReadiness::ReadinessCheck", - "AWS::Route53RecoveryReadiness::RecoveryGroup", - "AWS::Route53RecoveryReadiness::ResourceSet", - "AWS::Route53Resolver::FirewallDomainList", - "AWS::Route53Resolver::FirewallRuleGroup", - "AWS::Route53Resolver::FirewallRuleGroupAssociation", - "AWS::Route53Resolver::OutpostResolver", - "AWS::Route53Resolver::ResolverRule", - "AWS::S3::AccessGrant", - "AWS::S3::AccessGrantsInstance", - "AWS::S3::AccessGrantsLocation", - "AWS::S3::AccessPoint", - "AWS::S3::Bucket", - "AWS::S3::BucketPolicy", - "AWS::S3::MultiRegionAccessPointPolicy", - "AWS::S3::StorageLens", - "AWS::S3::StorageLensGroup", - "AWS::S3Express::BucketPolicy", - "AWS::S3ObjectLambda::AccessPoint", - "AWS::S3ObjectLambda::AccessPointPolicy", - "AWS::S3Outposts::AccessPoint", - "AWS::S3Outposts::Bucket", - "AWS::S3Outposts::BucketPolicy", - "AWS::SES::ConfigurationSet", - "AWS::SES::ConfigurationSetEventDestination", - "AWS::SES::ContactList", - "AWS::SES::DedicatedIpPool", - "AWS::SES::EmailIdentity", - "AWS::SES::Template", - "AWS::SES::VdmAttributes", - "AWS::SNS::Topic", - "AWS::SNS::TopicInlinePolicy", - "AWS::SQS::Queue", - "AWS::SQS::QueueInlinePolicy", - "AWS::SSM::Association", - "AWS::SSM::Document", - "AWS::SSM::Parameter", - "AWS::SSM::PatchBaseline", - "AWS::SSM::ResourceDataSync", - "AWS::SSM::ResourcePolicy", - "AWS::SSMContacts::Contact", - "AWS::SSMContacts::ContactChannel", - "AWS::SSMContacts::Plan", - "AWS::SSMContacts::Rotation", - "AWS::SSMIncidents::ReplicationSet", - "AWS::SSMIncidents::ResponsePlan", - "AWS::SSO::InstanceAccessControlAttributeConfiguration", - "AWS::SSO::PermissionSet", - "AWS::SageMaker::AppImageConfig", - "AWS::SageMaker::Device", - "AWS::SageMaker::DeviceFleet", - "AWS::SageMaker::Domain", - "AWS::SageMaker::FeatureGroup", - "AWS::SageMaker::Image", - "AWS::SageMaker::ImageVersion", - "AWS::SageMaker::InferenceComponent", - "AWS::SageMaker::InferenceExperiment", - "AWS::SageMaker::ModelCard", - "AWS::SageMaker::ModelPackage", - "AWS::SageMaker::ModelPackageGroup", - "AWS::SageMaker::MonitoringSchedule", - "AWS::SageMaker::Pipeline", - "AWS::SageMaker::Project", - "AWS::SageMaker::Space", - "AWS::SageMaker::UserProfile", - "AWS::Scheduler::Schedule", - "AWS::Scheduler::ScheduleGroup", - "AWS::SecretsManager::Secret", - "AWS::SecurityHub::AutomationRule", - "AWS::SecurityHub::Hub", - "AWS::SecurityHub::Standard", - "AWS::ServiceCatalog::CloudFormationProvisionedProduct", - "AWS::ServiceCatalog::ServiceAction", - "AWS::ServiceCatalogAppRegistry::Application", - "AWS::ServiceCatalogAppRegistry::AttributeGroup", - "AWS::Shield::DRTAccess", - "AWS::Shield::ProactiveEngagement", - "AWS::Shield::Protection", - "AWS::Shield::ProtectionGroup", - "AWS::Signer::SigningProfile", - "AWS::SimSpaceWeaver::Simulation", - "AWS::StepFunctions::Activity", - "AWS::StepFunctions::StateMachine", - "AWS::StepFunctions::StateMachineAlias", - "AWS::SupportApp::AccountAlias", - "AWS::SupportApp::SlackChannelConfiguration", - "AWS::SupportApp::SlackWorkspaceConfiguration", - "AWS::Synthetics::Canary", - "AWS::Synthetics::Group", - "AWS::SystemsManagerSAP::Application", - "AWS::Timestream::Database", - "AWS::Timestream::ScheduledQuery", - "AWS::Timestream::Table", - "AWS::Transfer::Agreement", - "AWS::Transfer::Certificate", - "AWS::Transfer::Connector", - "AWS::Transfer::Profile", - "AWS::Transfer::Workflow", - "AWS::VerifiedPermissions::IdentitySource", - "AWS::VerifiedPermissions::Policy", - "AWS::VerifiedPermissions::PolicyStore", - "AWS::VerifiedPermissions::PolicyTemplate", - "AWS::VoiceID::Domain", - "AWS::VpcLattice::AccessLogSubscription", - "AWS::VpcLattice::AuthPolicy", - "AWS::VpcLattice::Listener", - "AWS::VpcLattice::ResourcePolicy", - "AWS::VpcLattice::Rule", - "AWS::VpcLattice::Service", - "AWS::VpcLattice::ServiceNetwork", - "AWS::VpcLattice::ServiceNetworkServiceAssociation", - "AWS::VpcLattice::ServiceNetworkVpcAssociation", - "AWS::VpcLattice::TargetGroup", - "AWS::WAFv2::IPSet", - "AWS::WAFv2::LoggingConfiguration", - "AWS::WAFv2::RegexPatternSet", - "AWS::WAFv2::RuleGroup", - "AWS::WAFv2::WebACL", - "AWS::WAFv2::WebACLAssociation", - "AWS::Wisdom::Assistant", - "AWS::Wisdom::AssistantAssociation", - "AWS::Wisdom::KnowledgeBase", - "AWS::WorkSpacesThinClient::Environment", - "AWS::WorkSpacesWeb::BrowserSettings", - "AWS::WorkSpacesWeb::IdentityProvider", - "AWS::WorkSpacesWeb::IpAccessSettings", - "AWS::WorkSpacesWeb::NetworkSettings", - "AWS::WorkSpacesWeb::Portal", - "AWS::WorkSpacesWeb::TrustStore", - "AWS::WorkSpacesWeb::UserAccessLoggingSettings", - "AWS::WorkSpacesWeb::UserSettings", - "AWS::XRay::Group", - "AWS::XRay::ResourcePolicy", - "AWS::XRay::SamplingRule", + "AWS::ACMPCA::CertificateAuthority", + "AWS::ACMPCA::CertificateAuthorityActivation", + "AWS::APS::RuleGroupsNamespace", + "AWS::APS::Scraper", + "AWS::APS::Workspace", + "AWS::ARCZonalShift::ZonalAutoshiftConfiguration", + "AWS::AccessAnalyzer::Analyzer", + "AWS::Amplify::App", + "AWS::Amplify::Branch", + "AWS::Amplify::Domain", + "AWS::AmplifyUIBuilder::Component", + "AWS::AmplifyUIBuilder::Form", + "AWS::AmplifyUIBuilder::Theme", + "AWS::ApiGateway::Account", + "AWS::ApiGateway::ApiKey", + "AWS::ApiGateway::Authorizer", + "AWS::ApiGateway::BasePathMapping", + "AWS::ApiGateway::ClientCertificate", + "AWS::ApiGateway::Deployment", + "AWS::ApiGateway::DocumentationPart", + "AWS::ApiGateway::DocumentationVersion", + "AWS::ApiGateway::DomainName", + "AWS::ApiGateway::GatewayResponse", + "AWS::ApiGateway::Method", + "AWS::ApiGateway::Model", + "AWS::ApiGateway::RequestValidator", + "AWS::ApiGateway::Resource", + "AWS::ApiGateway::RestApi", + "AWS::ApiGateway::Stage", + "AWS::ApiGateway::UsagePlan", + "AWS::ApiGateway::VpcLink", + "AWS::ApiGatewayV2::Api", + "AWS::ApiGatewayV2::ApiMapping", + "AWS::ApiGatewayV2::Authorizer", + "AWS::ApiGatewayV2::Deployment", + "AWS::ApiGatewayV2::DomainName", + "AWS::ApiGatewayV2::IntegrationResponse", + "AWS::ApiGatewayV2::Model", + "AWS::ApiGatewayV2::Route", + "AWS::ApiGatewayV2::RouteResponse", + "AWS::ApiGatewayV2::VpcLink", + "AWS::AppConfig::Application", + "AWS::AppConfig::ConfigurationProfile", + "AWS::AppConfig::Environment", + "AWS::AppConfig::Extension", + "AWS::AppConfig::ExtensionAssociation", + "AWS::AppFlow::Connector", + "AWS::AppFlow::ConnectorProfile", + "AWS::AppFlow::Flow", + "AWS::AppIntegrations::Application", + "AWS::AppIntegrations::DataIntegration", + "AWS::AppIntegrations::EventIntegration", + "AWS::AppRunner::Service", + "AWS::AppRunner::VpcIngressConnection", + "AWS::AppStream::AppBlockBuilder", + "AWS::AppStream::Application", + "AWS::AppStream::DirectoryConfig", + "AWS::AppStream::Entitlement", + "AWS::AppSync::DomainName", + "AWS::AppSync::DomainNameApiAssociation", + "AWS::AppSync::FunctionConfiguration", + "AWS::AppSync::Resolver", + "AWS::AppSync::SourceApiAssociation", + "AWS::AppTest::TestCase", + "AWS::ApplicationAutoScaling::ScalableTarget", + "AWS::ApplicationAutoScaling::ScalingPolicy", + "AWS::ApplicationInsights::Application", + "AWS::ApplicationSignals::ServiceLevelObjective", + "AWS::Athena::CapacityReservation", + "AWS::Athena::DataCatalog", + "AWS::Athena::PreparedStatement", + "AWS::Athena::WorkGroup", + "AWS::AuditManager::Assessment", + "AWS::AutoScaling::AutoScalingGroup", + "AWS::AutoScaling::LifecycleHook", + "AWS::AutoScaling::ScalingPolicy", + "AWS::AutoScaling::ScheduledAction", + "AWS::AutoScaling::WarmPool", + "AWS::B2BI::Capability", + "AWS::B2BI::Partnership", + "AWS::B2BI::Profile", + "AWS::B2BI::Transformer", + "AWS::BCMDataExports::Export", + "AWS::Backup::BackupPlan", + "AWS::Backup::BackupVault", + "AWS::Backup::Framework", + "AWS::Backup::ReportPlan", + "AWS::Backup::RestoreTestingPlan", + "AWS::Backup::RestoreTestingSelection", + "AWS::BackupGateway::Hypervisor", + "AWS::Batch::ComputeEnvironment", + "AWS::Batch::JobQueue", + "AWS::Batch::SchedulingPolicy", + "AWS::Bedrock::Agent", + "AWS::Bedrock::AgentAlias", + "AWS::Bedrock::DataSource", + "AWS::Bedrock::Flow", + "AWS::Bedrock::FlowAlias", + "AWS::Bedrock::FlowVersion", + "AWS::Bedrock::Guardrail", + "AWS::Bedrock::KnowledgeBase", + "AWS::Bedrock::Prompt", + "AWS::Bedrock::PromptVersion", + "AWS::BillingConductor::BillingGroup", + "AWS::BillingConductor::CustomLineItem", + "AWS::BillingConductor::PricingPlan", + "AWS::BillingConductor::PricingRule", + "AWS::Budgets::BudgetsAction", + "AWS::CE::AnomalyMonitor", + "AWS::CE::AnomalySubscription", + "AWS::CE::CostCategory", + "AWS::CUR::ReportDefinition", + "AWS::Cassandra::Keyspace", + "AWS::Cassandra::Table", + "AWS::CertificateManager::Account", + "AWS::Chatbot::MicrosoftTeamsChannelConfiguration", + "AWS::Chatbot::SlackChannelConfiguration", + "AWS::CleanRooms::AnalysisTemplate", + "AWS::CleanRooms::Collaboration", + "AWS::CleanRooms::ConfiguredTable", + "AWS::CleanRooms::ConfiguredTableAssociation", + "AWS::CleanRooms::IdMappingTable", + "AWS::CleanRooms::IdNamespaceAssociation", + "AWS::CleanRooms::Membership", + "AWS::CleanRooms::PrivacyBudgetTemplate", + "AWS::CleanRoomsML::TrainingDataset", + "AWS::CloudFormation::HookDefaultVersion", + "AWS::CloudFormation::HookTypeConfig", + "AWS::CloudFormation::ResourceDefaultVersion", + "AWS::CloudFormation::Stack", + "AWS::CloudFormation::StackSet", + "AWS::CloudFormation::TypeActivation", + "AWS::CloudFront::CachePolicy", + "AWS::CloudFront::CloudFrontOriginAccessIdentity", + "AWS::CloudFront::ContinuousDeploymentPolicy", + "AWS::CloudFront::Distribution", + "AWS::CloudFront::Function", + "AWS::CloudFront::KeyGroup", + "AWS::CloudFront::KeyValueStore", + "AWS::CloudFront::OriginAccessControl", + "AWS::CloudFront::OriginRequestPolicy", + "AWS::CloudFront::PublicKey", + "AWS::CloudFront::RealtimeLogConfig", + "AWS::CloudFront::ResponseHeadersPolicy", + "AWS::CloudTrail::Channel", + "AWS::CloudTrail::EventDataStore", + "AWS::CloudTrail::ResourcePolicy", + "AWS::CloudTrail::Trail", + "AWS::CloudWatch::Alarm", + "AWS::CloudWatch::CompositeAlarm", + "AWS::CloudWatch::Dashboard", + "AWS::CloudWatch::MetricStream", + "AWS::CodeArtifact::Domain", + "AWS::CodeArtifact::PackageGroup", + "AWS::CodeArtifact::Repository", + "AWS::CodeBuild::Fleet", + "AWS::CodeConnections::Connection", + "AWS::CodeDeploy::Application", + "AWS::CodeGuruProfiler::ProfilingGroup", + "AWS::CodePipeline::CustomActionType", + "AWS::CodePipeline::Pipeline", + "AWS::CodeStarConnections::Connection", + "AWS::CodeStarConnections::RepositoryLink", + "AWS::CodeStarConnections::SyncConfiguration", + "AWS::CodeStarNotifications::NotificationRule", + "AWS::Cognito::IdentityPool", + "AWS::Cognito::IdentityPoolPrincipalTag", + "AWS::Cognito::IdentityPoolRoleAttachment", + "AWS::Cognito::LogDeliveryConfiguration", + "AWS::Cognito::UserPool", + "AWS::Cognito::UserPoolClient", + "AWS::Cognito::UserPoolGroup", + "AWS::Cognito::UserPoolResourceServer", + "AWS::Cognito::UserPoolRiskConfigurationAttachment", + "AWS::Cognito::UserPoolUICustomizationAttachment", + "AWS::Comprehend::DocumentClassifier", + "AWS::Comprehend::Flywheel", + "AWS::Config::AggregationAuthorization", + "AWS::Config::ConfigRule", + "AWS::Config::ConfigurationAggregator", + "AWS::Config::ConformancePack", + "AWS::Config::OrganizationConformancePack", + "AWS::Config::StoredQuery", + "AWS::Connect::ApprovedOrigin", + "AWS::Connect::ContactFlow", + "AWS::Connect::ContactFlowModule", + "AWS::Connect::EvaluationForm", + "AWS::Connect::HoursOfOperation", + "AWS::Connect::Instance", + "AWS::Connect::InstanceStorageConfig", + "AWS::Connect::IntegrationAssociation", + "AWS::Connect::PhoneNumber", + "AWS::Connect::PredefinedAttribute", + "AWS::Connect::Prompt", + "AWS::Connect::Queue", + "AWS::Connect::QuickConnect", + "AWS::Connect::RoutingProfile", + "AWS::Connect::Rule", + "AWS::Connect::SecurityKey", + "AWS::Connect::SecurityProfile", + "AWS::Connect::TaskTemplate", + "AWS::Connect::TrafficDistributionGroup", + "AWS::Connect::User", + "AWS::Connect::UserHierarchyGroup", + "AWS::Connect::View", + "AWS::Connect::ViewVersion", + "AWS::ConnectCampaigns::Campaign", + "AWS::ControlTower::EnabledBaseline", + "AWS::ControlTower::EnabledControl", + "AWS::ControlTower::LandingZone", + "AWS::CustomerProfiles::CalculatedAttributeDefinition", + "AWS::CustomerProfiles::Domain", + "AWS::CustomerProfiles::EventStream", + "AWS::CustomerProfiles::Integration", + "AWS::CustomerProfiles::ObjectType", + "AWS::DMS::DataProvider", + "AWS::DMS::InstanceProfile", + "AWS::DMS::MigrationProject", + "AWS::DMS::ReplicationConfig", + "AWS::DataBrew::Dataset", + "AWS::DataBrew::Job", + "AWS::DataBrew::Project", + "AWS::DataBrew::Recipe", + "AWS::DataBrew::Ruleset", + "AWS::DataBrew::Schedule", + "AWS::DataPipeline::Pipeline", + "AWS::DataSync::Agent", + "AWS::DataSync::LocationAzureBlob", + "AWS::DataSync::LocationEFS", + "AWS::DataSync::LocationFSxLustre", + "AWS::DataSync::LocationFSxONTAP", + "AWS::DataSync::LocationFSxOpenZFS", + "AWS::DataSync::LocationFSxWindows", + "AWS::DataSync::LocationHDFS", + "AWS::DataSync::LocationNFS", + "AWS::DataSync::LocationObjectStorage", + "AWS::DataSync::LocationS3", + "AWS::DataSync::LocationSMB", + "AWS::DataSync::StorageSystem", + "AWS::DataSync::Task", + "AWS::DataZone::DataSource", + "AWS::DataZone::Domain", + "AWS::DataZone::Environment", + "AWS::DataZone::EnvironmentBlueprintConfiguration", + "AWS::DataZone::EnvironmentProfile", + "AWS::DataZone::GroupProfile", + "AWS::DataZone::Project", + "AWS::DataZone::ProjectMembership", + "AWS::DataZone::SubscriptionTarget", + "AWS::DataZone::UserProfile", + "AWS::Deadline::Farm", + "AWS::Deadline::Fleet", + "AWS::Deadline::LicenseEndpoint", + "AWS::Deadline::Monitor", + "AWS::Deadline::Queue", + "AWS::Deadline::QueueEnvironment", + "AWS::Deadline::StorageProfile", + "AWS::Detective::Graph", + "AWS::Detective::MemberInvitation", + "AWS::Detective::OrganizationAdmin", + "AWS::DevOpsGuru::LogAnomalyDetectionIntegration", + "AWS::DevOpsGuru::ResourceCollection", + "AWS::DirectoryService::SimpleAD", + "AWS::DocDBElastic::Cluster", + "AWS::DynamoDB::GlobalTable", + "AWS::DynamoDB::Table", + "AWS::EC2::CapacityReservation", + "AWS::EC2::CapacityReservationFleet", + "AWS::EC2::CarrierGateway", + "AWS::EC2::CustomerGateway", + "AWS::EC2::DHCPOptions", + "AWS::EC2::EC2Fleet", + "AWS::EC2::EIP", + "AWS::EC2::FlowLog", + "AWS::EC2::GatewayRouteTableAssociation", + "AWS::EC2::Host", + "AWS::EC2::IPAM", + "AWS::EC2::IPAMPool", + "AWS::EC2::IPAMResourceDiscovery", + "AWS::EC2::IPAMResourceDiscoveryAssociation", + "AWS::EC2::IPAMScope", + "AWS::EC2::Instance", + "AWS::EC2::InstanceConnectEndpoint", + "AWS::EC2::InternetGateway", + "AWS::EC2::LaunchTemplate", + "AWS::EC2::LocalGatewayRoute", + "AWS::EC2::LocalGatewayRouteTable", + "AWS::EC2::LocalGatewayRouteTableVPCAssociation", + "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", + "AWS::EC2::NatGateway", + "AWS::EC2::NetworkAcl", + "AWS::EC2::NetworkInsightsAccessScope", + "AWS::EC2::NetworkInsightsAccessScopeAnalysis", + "AWS::EC2::NetworkInsightsAnalysis", + "AWS::EC2::NetworkInsightsPath", + "AWS::EC2::NetworkInterface", + "AWS::EC2::NetworkInterfaceAttachment", + "AWS::EC2::PrefixList", + "AWS::EC2::Route", + "AWS::EC2::RouteTable", + "AWS::EC2::SecurityGroup", + "AWS::EC2::SecurityGroupEgress", + "AWS::EC2::SecurityGroupIngress", + "AWS::EC2::SnapshotBlockPublicAccess", + "AWS::EC2::SpotFleet", + "AWS::EC2::Subnet", + "AWS::EC2::TransitGateway", + "AWS::EC2::TransitGatewayAttachment", + "AWS::EC2::TransitGatewayConnect", + "AWS::EC2::TransitGatewayMulticastDomain", + "AWS::EC2::TransitGatewayPeeringAttachment", + "AWS::EC2::TransitGatewayVpcAttachment", + "AWS::EC2::VPC", + "AWS::EC2::VPCDHCPOptionsAssociation", + "AWS::EC2::VPCEndpoint", + "AWS::EC2::VPCEndpointConnectionNotification", + "AWS::EC2::VPCEndpointService", + "AWS::EC2::VPCEndpointServicePermissions", + "AWS::EC2::VPCGatewayAttachment", + "AWS::EC2::VPCPeeringConnection", + "AWS::EC2::VPNConnection", + "AWS::EC2::VPNGateway", + "AWS::EC2::VerifiedAccessEndpoint", + "AWS::EC2::VerifiedAccessGroup", + "AWS::EC2::VerifiedAccessInstance", + "AWS::EC2::VerifiedAccessTrustProvider", + "AWS::EC2::Volume", + "AWS::ECR::PublicRepository", + "AWS::ECR::PullThroughCacheRule", + "AWS::ECR::RegistryPolicy", + "AWS::ECR::ReplicationConfiguration", + "AWS::ECR::Repository", + "AWS::ECR::RepositoryCreationTemplate", + "AWS::ECS::CapacityProvider", + "AWS::ECS::Cluster", + "AWS::ECS::ClusterCapacityProviderAssociations", + "AWS::ECS::PrimaryTaskSet", + "AWS::ECS::Service", + "AWS::ECS::TaskDefinition", + "AWS::ECS::TaskSet", + "AWS::EFS::AccessPoint", + "AWS::EFS::FileSystem", + "AWS::EFS::MountTarget", + "AWS::EKS::AccessEntry", + "AWS::EKS::Addon", + "AWS::EKS::Cluster", + "AWS::EKS::FargateProfile", + "AWS::EKS::IdentityProviderConfig", + "AWS::EKS::Nodegroup", + "AWS::EKS::PodIdentityAssociation", + "AWS::EMR::Studio", + "AWS::EMR::StudioSessionMapping", + "AWS::EMR::WALWorkspace", + "AWS::EMRContainers::VirtualCluster", + "AWS::EMRServerless::Application", + "AWS::ElastiCache::GlobalReplicationGroup", + "AWS::ElastiCache::ParameterGroup", + "AWS::ElastiCache::ServerlessCache", + "AWS::ElastiCache::SubnetGroup", + "AWS::ElastiCache::User", + "AWS::ElastiCache::UserGroup", + "AWS::ElasticBeanstalk::Application", + "AWS::ElasticBeanstalk::ApplicationVersion", + "AWS::ElasticBeanstalk::ConfigurationTemplate", + "AWS::ElasticBeanstalk::Environment", + "AWS::ElasticLoadBalancingV2::Listener", + "AWS::ElasticLoadBalancingV2::ListenerRule", + "AWS::ElasticLoadBalancingV2::LoadBalancer", + "AWS::ElasticLoadBalancingV2::TargetGroup", + "AWS::ElasticLoadBalancingV2::TrustStore", + "AWS::EntityResolution::IdMappingWorkflow", + "AWS::EntityResolution::IdNamespace", + "AWS::EntityResolution::MatchingWorkflow", + "AWS::EntityResolution::PolicyStatement", + "AWS::EntityResolution::SchemaMapping", + "AWS::EventSchemas::Discoverer", + "AWS::EventSchemas::Registry", + "AWS::EventSchemas::RegistryPolicy", + "AWS::EventSchemas::Schema", + "AWS::Events::ApiDestination", + "AWS::Events::Archive", + "AWS::Events::Connection", + "AWS::Events::Endpoint", + "AWS::Events::EventBus", + "AWS::Events::Rule", + "AWS::Evidently::Experiment", + "AWS::Evidently::Feature", + "AWS::Evidently::Launch", + "AWS::Evidently::Project", + "AWS::FIS::ExperimentTemplate", + "AWS::FIS::TargetAccountConfiguration", + "AWS::FMS::NotificationChannel", + "AWS::FMS::Policy", + "AWS::FMS::ResourceSet", + "AWS::FSx::DataRepositoryAssociation", + "AWS::FinSpace::Environment", + "AWS::Forecast::DatasetGroup", + "AWS::FraudDetector::Detector", + "AWS::FraudDetector::EntityType", + "AWS::FraudDetector::EventType", + "AWS::FraudDetector::Label", + "AWS::FraudDetector::List", + "AWS::FraudDetector::Outcome", + "AWS::FraudDetector::Variable", + "AWS::GameLift::Alias", + "AWS::GameLift::Build", + "AWS::GameLift::ContainerGroupDefinition", + "AWS::GameLift::Fleet", + "AWS::GameLift::GameServerGroup", + "AWS::GameLift::GameSessionQueue", + "AWS::GameLift::Location", + "AWS::GameLift::MatchmakingConfiguration", + "AWS::GameLift::MatchmakingRuleSet", + "AWS::GameLift::Script", + "AWS::GlobalAccelerator::Accelerator", + "AWS::GlobalAccelerator::CrossAccountAttachment", + "AWS::GlobalAccelerator::EndpointGroup", + "AWS::GlobalAccelerator::Listener", + "AWS::Glue::Database", + "AWS::Glue::Registry", + "AWS::Glue::Schema", + "AWS::Glue::Trigger", + "AWS::Grafana::Workspace", + "AWS::GreengrassV2::ComponentVersion", + "AWS::GreengrassV2::Deployment", + "AWS::GroundStation::Config", + "AWS::GroundStation::MissionProfile", + "AWS::GuardDuty::Detector", + "AWS::GuardDuty::Filter", + "AWS::GuardDuty::IPSet", + "AWS::GuardDuty::MalwareProtectionPlan", + "AWS::GuardDuty::Member", + "AWS::GuardDuty::ThreatIntelSet", + "AWS::HealthLake::FHIRDatastore", + "AWS::IAM::Group", + "AWS::IAM::GroupPolicy", + "AWS::IAM::InstanceProfile", + "AWS::IAM::ManagedPolicy", + "AWS::IAM::OIDCProvider", + "AWS::IAM::Role", + "AWS::IAM::RolePolicy", + "AWS::IAM::SAMLProvider", + "AWS::IAM::ServerCertificate", + "AWS::IAM::ServiceLinkedRole", + "AWS::IAM::User", + "AWS::IAM::UserPolicy", + "AWS::IAM::VirtualMFADevice", + "AWS::IVS::Channel", + "AWS::IVS::EncoderConfiguration", + "AWS::IVS::PlaybackKeyPair", + "AWS::IVS::PlaybackRestrictionPolicy", + "AWS::IVS::PublicKey", + "AWS::IVS::RecordingConfiguration", + "AWS::IVS::Stage", + "AWS::IVS::StorageConfiguration", + "AWS::IVS::StreamKey", + "AWS::IVSChat::LoggingConfiguration", + "AWS::IVSChat::Room", + "AWS::IdentityStore::Group", + "AWS::ImageBuilder::DistributionConfiguration", + "AWS::ImageBuilder::ImagePipeline", + "AWS::ImageBuilder::InfrastructureConfiguration", + "AWS::ImageBuilder::LifecyclePolicy", + "AWS::Inspector::AssessmentTarget", + "AWS::InspectorV2::CisScanConfiguration", + "AWS::InspectorV2::Filter", + "AWS::InternetMonitor::Monitor", + "AWS::IoT::AccountAuditConfiguration", + "AWS::IoT::Authorizer", + "AWS::IoT::BillingGroup", + "AWS::IoT::CACertificate", + "AWS::IoT::Certificate", + "AWS::IoT::CertificateProvider", + "AWS::IoT::CustomMetric", + "AWS::IoT::Dimension", + "AWS::IoT::DomainConfiguration", + "AWS::IoT::FleetMetric", + "AWS::IoT::Logging", + "AWS::IoT::MitigationAction", + "AWS::IoT::Policy", + "AWS::IoT::ProvisioningTemplate", + "AWS::IoT::ResourceSpecificLogging", + "AWS::IoT::RoleAlias", + "AWS::IoT::ScheduledAudit", + "AWS::IoT::SecurityProfile", + "AWS::IoT::SoftwarePackage", + "AWS::IoT::SoftwarePackageVersion", + "AWS::IoT::Thing", + "AWS::IoT::ThingGroup", + "AWS::IoT::ThingType", + "AWS::IoT::TopicRule", + "AWS::IoT::TopicRuleDestination", + "AWS::IoTAnalytics::Channel", + "AWS::IoTAnalytics::Dataset", + "AWS::IoTAnalytics::Datastore", + "AWS::IoTAnalytics::Pipeline", + "AWS::IoTCoreDeviceAdvisor::SuiteDefinition", + "AWS::IoTEvents::AlarmModel", + "AWS::IoTEvents::DetectorModel", + "AWS::IoTEvents::Input", + "AWS::IoTFleetHub::Application", + "AWS::IoTFleetWise::Campaign", + "AWS::IoTFleetWise::DecoderManifest", + "AWS::IoTFleetWise::Fleet", + "AWS::IoTFleetWise::ModelManifest", + "AWS::IoTFleetWise::SignalCatalog", + "AWS::IoTFleetWise::Vehicle", + "AWS::IoTSiteWise::AccessPolicy", + "AWS::IoTSiteWise::Asset", + "AWS::IoTSiteWise::AssetModel", + "AWS::IoTSiteWise::Dashboard", + "AWS::IoTSiteWise::Gateway", + "AWS::IoTSiteWise::Portal", + "AWS::IoTSiteWise::Project", + "AWS::IoTTwinMaker::ComponentType", + "AWS::IoTTwinMaker::Entity", + "AWS::IoTTwinMaker::Scene", + "AWS::IoTTwinMaker::Workspace", + "AWS::IoTWireless::Destination", + "AWS::IoTWireless::FuotaTask", + "AWS::IoTWireless::MulticastGroup", + "AWS::IoTWireless::NetworkAnalyzerConfiguration", + "AWS::IoTWireless::PartnerAccount", + "AWS::IoTWireless::WirelessDevice", + "AWS::IoTWireless::WirelessDeviceImportTask", + "AWS::IoTWireless::WirelessGateway", + "AWS::KMS::Alias", + "AWS::KMS::Key", + "AWS::KMS::ReplicaKey", + "AWS::KafkaConnect::Connector", + "AWS::KafkaConnect::CustomPlugin", + "AWS::KafkaConnect::WorkerConfiguration", + "AWS::Kendra::DataSource", + "AWS::Kendra::Faq", + "AWS::Kendra::Index", + "AWS::KendraRanking::ExecutionPlan", + "AWS::Kinesis::Stream", + "AWS::KinesisAnalyticsV2::Application", + "AWS::KinesisFirehose::DeliveryStream", + "AWS::KinesisVideo::SignalingChannel", + "AWS::KinesisVideo::Stream", + "AWS::LakeFormation::Tag", + "AWS::Lambda::Alias", + "AWS::Lambda::CodeSigningConfig", + "AWS::Lambda::EventInvokeConfig", + "AWS::Lambda::EventSourceMapping", + "AWS::Lambda::Function", + "AWS::Lambda::Url", + "AWS::LaunchWizard::Deployment", + "AWS::Lex::Bot", + "AWS::Lex::BotAlias", + "AWS::Lex::ResourcePolicy", + "AWS::LicenseManager::Grant", + "AWS::LicenseManager::License", + "AWS::Lightsail::Alarm", + "AWS::Lightsail::Bucket", + "AWS::Lightsail::Certificate", + "AWS::Lightsail::Container", + "AWS::Lightsail::Database", + "AWS::Lightsail::Disk", + "AWS::Lightsail::Distribution", + "AWS::Lightsail::Instance", + "AWS::Lightsail::LoadBalancer", + "AWS::Lightsail::LoadBalancerTlsCertificate", + "AWS::Lightsail::StaticIp", + "AWS::Location::APIKey", + "AWS::Location::GeofenceCollection", + "AWS::Location::Map", + "AWS::Location::PlaceIndex", + "AWS::Location::RouteCalculator", + "AWS::Location::Tracker", + "AWS::Logs::AccountPolicy", + "AWS::Logs::Delivery", + "AWS::Logs::DeliveryDestination", + "AWS::Logs::DeliverySource", + "AWS::Logs::Destination", + "AWS::Logs::LogAnomalyDetector", + "AWS::Logs::LogGroup", + "AWS::Logs::MetricFilter", + "AWS::Logs::QueryDefinition", + "AWS::Logs::ResourcePolicy", + "AWS::Logs::SubscriptionFilter", + "AWS::LookoutEquipment::InferenceScheduler", + "AWS::LookoutMetrics::AnomalyDetector", + "AWS::LookoutVision::Project", + "AWS::M2::Application", + "AWS::M2::Environment", + "AWS::MSK::BatchScramSecret", + "AWS::MSK::Cluster", + "AWS::MSK::ClusterPolicy", + "AWS::MSK::Configuration", + "AWS::MSK::Replicator", + "AWS::MSK::VpcConnection", + "AWS::MWAA::Environment", + "AWS::Macie::AllowList", + "AWS::Macie::CustomDataIdentifier", + "AWS::Macie::FindingsFilter", + "AWS::Macie::Session", + "AWS::ManagedBlockchain::Accessor", + "AWS::MediaConnect::Bridge", + "AWS::MediaConnect::BridgeOutput", + "AWS::MediaConnect::BridgeSource", + "AWS::MediaConnect::Flow", + "AWS::MediaConnect::FlowEntitlement", + "AWS::MediaConnect::FlowOutput", + "AWS::MediaConnect::FlowSource", + "AWS::MediaConnect::FlowVpcInterface", + "AWS::MediaLive::ChannelPlacementGroup", + "AWS::MediaLive::CloudWatchAlarmTemplate", + "AWS::MediaLive::CloudWatchAlarmTemplateGroup", + "AWS::MediaLive::Cluster", + "AWS::MediaLive::EventBridgeRuleTemplate", + "AWS::MediaLive::EventBridgeRuleTemplateGroup", + "AWS::MediaLive::Multiplex", + "AWS::MediaLive::Multiplexprogram", + "AWS::MediaLive::Network", + "AWS::MediaLive::SdiSource", + "AWS::MediaLive::SignalMap", + "AWS::MediaPackage::Channel", + "AWS::MediaPackage::OriginEndpoint", + "AWS::MediaPackage::PackagingGroup", + "AWS::MediaPackageV2::Channel", + "AWS::MediaPackageV2::ChannelGroup", + "AWS::MediaPackageV2::ChannelPolicy", + "AWS::MediaPackageV2::OriginEndpoint", + "AWS::MediaPackageV2::OriginEndpointPolicy", + "AWS::MediaTailor::Channel", + "AWS::MediaTailor::ChannelPolicy", + "AWS::MediaTailor::LiveSource", + "AWS::MediaTailor::PlaybackConfiguration", + "AWS::MediaTailor::SourceLocation", + "AWS::MediaTailor::VodSource", + "AWS::MemoryDB::ACL", + "AWS::MemoryDB::Cluster", + "AWS::MemoryDB::ParameterGroup", + "AWS::MemoryDB::SubnetGroup", + "AWS::MemoryDB::User", + "AWS::Neptune::DBCluster", + "AWS::NeptuneGraph::Graph", + "AWS::NeptuneGraph::PrivateGraphEndpoint", + "AWS::NetworkFirewall::Firewall", + "AWS::NetworkFirewall::FirewallPolicy", + "AWS::NetworkFirewall::LoggingConfiguration", + "AWS::NetworkFirewall::RuleGroup", + "AWS::NetworkFirewall::TLSInspectionConfiguration", + "AWS::NetworkManager::ConnectAttachment", + "AWS::NetworkManager::ConnectPeer", + "AWS::NetworkManager::CoreNetwork", + "AWS::NetworkManager::Device", + "AWS::NetworkManager::GlobalNetwork", + "AWS::NetworkManager::Link", + "AWS::NetworkManager::Site", + "AWS::NetworkManager::SiteToSiteVpnAttachment", + "AWS::NetworkManager::TransitGatewayPeering", + "AWS::NetworkManager::TransitGatewayRouteTableAttachment", + "AWS::NetworkManager::VpcAttachment", + "AWS::NimbleStudio::LaunchProfile", + "AWS::NimbleStudio::StreamingImage", + "AWS::NimbleStudio::Studio", + "AWS::NimbleStudio::StudioComponent", + "AWS::OSIS::Pipeline", + "AWS::Oam::Link", + "AWS::Oam::Sink", + "AWS::Omics::AnnotationStore", + "AWS::Omics::RunGroup", + "AWS::Omics::VariantStore", + "AWS::Omics::Workflow", + "AWS::OpenSearchServerless::AccessPolicy", + "AWS::OpenSearchServerless::Collection", + "AWS::OpenSearchServerless::LifecyclePolicy", + "AWS::OpenSearchServerless::SecurityConfig", + "AWS::OpenSearchServerless::SecurityPolicy", + "AWS::OpenSearchServerless::VpcEndpoint", + "AWS::OpenSearchService::Domain", + "AWS::OpsWorksCM::Server", + "AWS::Organizations::Account", + "AWS::Organizations::Organization", + "AWS::Organizations::OrganizationalUnit", + "AWS::Organizations::Policy", + "AWS::Organizations::ResourcePolicy", + "AWS::PCAConnectorAD::Connector", + "AWS::PCAConnectorAD::DirectoryRegistration", + "AWS::PCAConnectorAD::Template", + "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", + "AWS::PCAConnectorSCEP::Challenge", + "AWS::PCAConnectorSCEP::Connector", + "AWS::Panorama::ApplicationInstance", + "AWS::Panorama::Package", + "AWS::Panorama::PackageVersion", + "AWS::PaymentCryptography::Alias", + "AWS::PaymentCryptography::Key", + "AWS::Personalize::Dataset", + "AWS::Pinpoint::InAppTemplate", + "AWS::Pipes::Pipe", + "AWS::Proton::EnvironmentAccountConnection", + "AWS::Proton::EnvironmentTemplate", + "AWS::Proton::ServiceTemplate", + "AWS::QBusiness::Application", + "AWS::QBusiness::DataSource", + "AWS::QBusiness::Index", + "AWS::QBusiness::Plugin", + "AWS::QBusiness::Retriever", + "AWS::QBusiness::WebExperience", + "AWS::QLDB::Stream", + "AWS::QuickSight::Analysis", + "AWS::QuickSight::Dashboard", + "AWS::QuickSight::DataSet", + "AWS::QuickSight::DataSource", + "AWS::QuickSight::RefreshSchedule", + "AWS::QuickSight::Template", + "AWS::QuickSight::Theme", + "AWS::QuickSight::Topic", + "AWS::QuickSight::VPCConnection", + "AWS::RAM::Permission", + "AWS::RDS::CustomDBEngineVersion", + "AWS::RDS::DBCluster", + "AWS::RDS::DBClusterParameterGroup", + "AWS::RDS::DBInstance", + "AWS::RDS::DBParameterGroup", + "AWS::RDS::DBProxy", + "AWS::RDS::DBProxyEndpoint", + "AWS::RDS::DBProxyTargetGroup", + "AWS::RDS::DBSubnetGroup", + "AWS::RDS::EventSubscription", + "AWS::RDS::GlobalCluster", + "AWS::RDS::Integration", + "AWS::RDS::OptionGroup", + "AWS::RUM::AppMonitor", + "AWS::Redshift::Cluster", + "AWS::Redshift::ClusterParameterGroup", + "AWS::Redshift::ClusterSubnetGroup", + "AWS::Redshift::EndpointAccess", + "AWS::Redshift::EndpointAuthorization", + "AWS::Redshift::EventSubscription", + "AWS::Redshift::ScheduledAction", + "AWS::RedshiftServerless::Namespace", + "AWS::RedshiftServerless::Workgroup", + "AWS::RefactorSpaces::Route", + "AWS::Rekognition::Collection", + "AWS::Rekognition::Project", + "AWS::Rekognition::StreamProcessor", + "AWS::ResilienceHub::App", + "AWS::ResilienceHub::ResiliencyPolicy", + "AWS::ResourceExplorer2::DefaultViewAssociation", + "AWS::ResourceExplorer2::Index", + "AWS::ResourceExplorer2::View", + "AWS::ResourceGroups::Group", + "AWS::RoboMaker::Fleet", + "AWS::RoboMaker::Robot", + "AWS::RoboMaker::RobotApplication", + "AWS::RoboMaker::SimulationApplication", + "AWS::RolesAnywhere::CRL", + "AWS::RolesAnywhere::Profile", + "AWS::RolesAnywhere::TrustAnchor", + "AWS::Route53::CidrCollection", + "AWS::Route53::HealthCheck", + "AWS::Route53::HostedZone", + "AWS::Route53::KeySigningKey", + "AWS::Route53Profiles::Profile", + "AWS::Route53Profiles::ProfileAssociation", + "AWS::Route53Profiles::ProfileResourceAssociation", + "AWS::Route53RecoveryControl::ControlPanel", + "AWS::Route53RecoveryControl::RoutingControl", + "AWS::Route53RecoveryControl::SafetyRule", + "AWS::Route53RecoveryReadiness::Cell", + "AWS::Route53RecoveryReadiness::ReadinessCheck", + "AWS::Route53RecoveryReadiness::RecoveryGroup", + "AWS::Route53RecoveryReadiness::ResourceSet", + "AWS::Route53Resolver::FirewallDomainList", + "AWS::Route53Resolver::FirewallRuleGroup", + "AWS::Route53Resolver::FirewallRuleGroupAssociation", + "AWS::Route53Resolver::OutpostResolver", + "AWS::Route53Resolver::ResolverRule", + "AWS::S3::AccessGrant", + "AWS::S3::AccessGrantsInstance", + "AWS::S3::AccessGrantsLocation", + "AWS::S3::AccessPoint", + "AWS::S3::Bucket", + "AWS::S3::BucketPolicy", + "AWS::S3::MultiRegionAccessPointPolicy", + "AWS::S3::StorageLens", + "AWS::S3::StorageLensGroup", + "AWS::S3Express::BucketPolicy", + "AWS::S3ObjectLambda::AccessPoint", + "AWS::S3ObjectLambda::AccessPointPolicy", + "AWS::S3Outposts::AccessPoint", + "AWS::S3Outposts::Bucket", + "AWS::S3Outposts::BucketPolicy", + "AWS::SES::ConfigurationSet", + "AWS::SES::ConfigurationSetEventDestination", + "AWS::SES::ContactList", + "AWS::SES::DedicatedIpPool", + "AWS::SES::EmailIdentity", + "AWS::SES::MailManagerAddonInstance", + "AWS::SES::MailManagerAddonSubscription", + "AWS::SES::MailManagerArchive", + "AWS::SES::MailManagerIngressPoint", + "AWS::SES::MailManagerRelay", + "AWS::SES::MailManagerRuleSet", + "AWS::SES::MailManagerTrafficPolicy", + "AWS::SES::Template", + "AWS::SES::VdmAttributes", + "AWS::SNS::Subscription", + "AWS::SNS::Topic", + "AWS::SNS::TopicInlinePolicy", + "AWS::SQS::Queue", + "AWS::SQS::QueueInlinePolicy", + "AWS::SSM::Association", + "AWS::SSM::Document", + "AWS::SSM::Parameter", + "AWS::SSM::PatchBaseline", + "AWS::SSM::ResourceDataSync", + "AWS::SSM::ResourcePolicy", + "AWS::SSMContacts::Contact", + "AWS::SSMContacts::ContactChannel", + "AWS::SSMContacts::Plan", + "AWS::SSMContacts::Rotation", + "AWS::SSMIncidents::ReplicationSet", + "AWS::SSMIncidents::ResponsePlan", + "AWS::SSMQuickSetup::ConfigurationManager", + "AWS::SSO::Application", + "AWS::SSO::Instance", + "AWS::SSO::InstanceAccessControlAttributeConfiguration", + "AWS::SSO::PermissionSet", + "AWS::SageMaker::AppImageConfig", + "AWS::SageMaker::Cluster", + "AWS::SageMaker::Device", + "AWS::SageMaker::DeviceFleet", + "AWS::SageMaker::Domain", + "AWS::SageMaker::FeatureGroup", + "AWS::SageMaker::Image", + "AWS::SageMaker::ImageVersion", + "AWS::SageMaker::InferenceComponent", + "AWS::SageMaker::InferenceExperiment", + "AWS::SageMaker::MlflowTrackingServer", + "AWS::SageMaker::ModelCard", + "AWS::SageMaker::ModelPackage", + "AWS::SageMaker::ModelPackageGroup", + "AWS::SageMaker::MonitoringSchedule", + "AWS::SageMaker::Pipeline", + "AWS::SageMaker::Project", + "AWS::SageMaker::Space", + "AWS::SageMaker::UserProfile", + "AWS::Scheduler::Schedule", + "AWS::Scheduler::ScheduleGroup", + "AWS::SecretsManager::ResourcePolicy", + "AWS::SecretsManager::Secret", + "AWS::SecurityHub::AutomationRule", + "AWS::SecurityHub::ConfigurationPolicy", + "AWS::SecurityHub::FindingAggregator", + "AWS::SecurityHub::Hub", + "AWS::SecurityHub::Insight", + "AWS::SecurityHub::OrganizationConfiguration", + "AWS::SecurityHub::PolicyAssociation", + "AWS::SecurityHub::SecurityControl", + "AWS::SecurityHub::Standard", + "AWS::SecurityLake::AwsLogSource", + "AWS::SecurityLake::DataLake", + "AWS::SecurityLake::Subscriber", + "AWS::SecurityLake::SubscriberNotification", + "AWS::ServiceCatalog::CloudFormationProvisionedProduct", + "AWS::ServiceCatalog::ServiceAction", + "AWS::ServiceCatalogAppRegistry::Application", + "AWS::ServiceCatalogAppRegistry::AttributeGroup", + "AWS::Shield::DRTAccess", + "AWS::Shield::ProactiveEngagement", + "AWS::Shield::Protection", + "AWS::Shield::ProtectionGroup", + "AWS::Signer::SigningProfile", + "AWS::SimSpaceWeaver::Simulation", + "AWS::StepFunctions::Activity", + "AWS::StepFunctions::StateMachine", + "AWS::StepFunctions::StateMachineAlias", + "AWS::SupportApp::AccountAlias", + "AWS::SupportApp::SlackChannelConfiguration", + "AWS::SupportApp::SlackWorkspaceConfiguration", + "AWS::Synthetics::Canary", + "AWS::Synthetics::Group", + "AWS::SystemsManagerSAP::Application", + "AWS::Timestream::Database", + "AWS::Timestream::InfluxDBInstance", + "AWS::Timestream::ScheduledQuery", + "AWS::Timestream::Table", + "AWS::Transfer::Agreement", + "AWS::Transfer::Certificate", + "AWS::Transfer::Connector", + "AWS::Transfer::Profile", + "AWS::Transfer::Workflow", + "AWS::VerifiedPermissions::IdentitySource", + "AWS::VerifiedPermissions::Policy", + "AWS::VerifiedPermissions::PolicyStore", + "AWS::VerifiedPermissions::PolicyTemplate", + "AWS::VoiceID::Domain", + "AWS::VpcLattice::AccessLogSubscription", + "AWS::VpcLattice::AuthPolicy", + "AWS::VpcLattice::Listener", + "AWS::VpcLattice::ResourcePolicy", + "AWS::VpcLattice::Rule", + "AWS::VpcLattice::Service", + "AWS::VpcLattice::ServiceNetwork", + "AWS::VpcLattice::ServiceNetworkServiceAssociation", + "AWS::VpcLattice::ServiceNetworkVpcAssociation", + "AWS::VpcLattice::TargetGroup", + "AWS::WAFv2::IPSet", + "AWS::WAFv2::LoggingConfiguration", + "AWS::WAFv2::RegexPatternSet", + "AWS::WAFv2::RuleGroup", + "AWS::WAFv2::WebACL", + "AWS::WAFv2::WebACLAssociation", + "AWS::Wisdom::Assistant", + "AWS::Wisdom::AssistantAssociation", + "AWS::Wisdom::KnowledgeBase", + "AWS::WorkSpaces::WorkspacesPool", + "AWS::WorkSpacesThinClient::Environment", + "AWS::WorkSpacesWeb::BrowserSettings", + "AWS::WorkSpacesWeb::IdentityProvider", + "AWS::WorkSpacesWeb::IpAccessSettings", + "AWS::WorkSpacesWeb::NetworkSettings", + "AWS::WorkSpacesWeb::Portal", + "AWS::WorkSpacesWeb::TrustStore", + "AWS::WorkSpacesWeb::UserAccessLoggingSettings", + "AWS::WorkSpacesWeb::UserSettings", + "AWS::XRay::Group", + "AWS::XRay::ResourcePolicy", + "AWS::XRay::SamplingRule" ]); diff --git a/src/lib/core/cdk-adaptor-stack.ts b/src/lib/core/cdk-adaptor-stack.ts index ff8ef07..85378a4 100644 --- a/src/lib/core/cdk-adaptor-stack.ts +++ b/src/lib/core/cdk-adaptor-stack.ts @@ -35,7 +35,7 @@ import { conditional, propertyAccess } from "cdktf/lib/tfExpression.js"; import { TokenMap } from "cdktf/lib/tokens/private/token-map.js"; import { toSnakeCase } from "codemaker"; import { Construct, ConstructOrder, IConstruct } from "constructs"; -import { findMapping, Mapping } from "../../mappings/utils.js"; +import {AccessTracker, findMapping, Mapping} from "../../mappings/utils.js"; import { CloudFormationOutput, CloudFormationResource, CloudFormationTemplate } from "./cfn.js"; import { reparentConstruct } from "./construct-helpers.js"; import { TerraformSynthesizer } from "./terraform-synthesizer.js"; @@ -430,7 +430,18 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { const newScope = (terraformStack == undefined ? this : currentElement.node.scope) as Construct; - const res = m.resource(newScope, currentElement.node.id, props); + const proxy = new AccessTracker(props); + + if (m.unsupportedProps != null) { + for (const prop of m.unsupportedProps) { + if (proxy.hasProperty(prop)) { + throw new Error(`Unsupported property ${prop} for resource ${resource.Type}`); + } + proxy.removePropertiesUnderPath(prop); + } + } + + const res = m.resource(newScope, currentElement.node.id, proxy.proxy, proxy); if (currentElement instanceof CfnResource && res) { res.node.addDependency(...currentElement.obtainDependencies()); res.node.addDependency(...currentElement.node.dependencies); @@ -454,14 +465,9 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { ); } - const keys = Object.keys(props).filter((k) => props[k] !== undefined); - if (keys.length > 0) { + if (!proxy.isAllPropertiesAccessed()) { throw new Error( - `cannot map some properties of ${resource.Type}: ${ - JSON.stringify( - props, - ) - }`, + `The following props were not mapped for ${resource.Type}: ${proxy.getUnaccessedProperties().join(", ")}`, ); } @@ -658,6 +664,10 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { return; } + case "AWS::StackName": { + return this.node.id; + } + case "AWS::URLSuffix": { return this.awsPartition.dnsSuffix; } diff --git a/src/lib/core/type-utils.ts b/src/lib/core/type-utils.ts index 222f975..529c7a8 100644 --- a/src/lib/core/type-utils.ts +++ b/src/lib/core/type-utils.ts @@ -1,5 +1,5 @@ export type Writeable = { -readonly [P in keyof T]: T[P] }; export type Exact = IfEquals; -type IfEquals = (() => G extends T ? 1 : 2) extends (() => G extends U ? 1 : 2) ? Y +export type IfEquals = (() => G extends T ? 1 : 2) extends (() => G extends U ? 1 : 2) ? Y : N; export type NotAny = 0 extends (1 & T) ? never : T; diff --git a/src/mappings/helper.ts b/src/mappings/helper.ts index af1e508..6b5b307 100644 --- a/src/mappings/helper.ts +++ b/src/mappings/helper.ts @@ -2,6 +2,7 @@ import { camelCase } from "camel-case"; import { TerraformResource } from "cdktf"; import { Construct } from "constructs"; import createDebug from "debug"; +import {AccessTracker} from "./utils.js"; export const mapperDebug = createDebug("cdktf-aws-adaptor:mapper:debug"); export const mapperTrace = createDebug("cdktf-aws-adaptor:mapper:trace"); @@ -64,6 +65,7 @@ export type ResourceMapper = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: any; }, + proxy: AccessTracker<{[key: string]: any}> ) => T | void; export function createGuessingResourceMapper( diff --git a/src/mappings/index.ts b/src/mappings/index.ts index f38a3a1..0d0d470 100644 --- a/src/mappings/index.ts +++ b/src/mappings/index.ts @@ -15,6 +15,7 @@ import { registerSnsMappings } from "./services/sns.js"; import { registerSqsMappings } from "./services/sqs.js"; import { registerStepFunctinMappings } from "./services/stepfunctions.js"; import { registerMapping } from "./utils.js"; +import {registerEcsMappings} from "./services/eks.js"; export function registerMappings() { registerMapping("AWS::CloudFormation::CustomResource", { @@ -40,6 +41,7 @@ export function registerMappings() { registerSqsMappings(); registerSnsMappings(); registerStepFunctinMappings(); + registerEcsMappings(); } registerMappings(); diff --git a/src/mappings/services/apigateway.ts b/src/mappings/services/apigateway.ts index bd6177c..87ed75d 100644 --- a/src/mappings/services/apigateway.ts +++ b/src/mappings/services/apigateway.ts @@ -177,6 +177,9 @@ export function registerApiGatewayMappings() { return new Apigatewayv2DomainName(scope, id, deleteUndefinedKeys(config)); }, + unsupportedProps: [ + "DomainNameConfigurations.*.CertificateName", + ], attributes: { Ref: res => res.id, RegionalHostedZoneId: res => res.domainNameConfiguration?.hostedZoneId, @@ -235,6 +238,7 @@ export function registerApiGatewayMappings() { return new Apigatewayv2Integration(scope, id, deleteUndefinedKeys(config)); }, attributes: { + IntegrationId: res => res.id, Id: res => res.id, Ref: res => res.id, }, diff --git a/src/mappings/services/appsync.ts b/src/mappings/services/appsync.ts index 95aecbf..7a3265a 100644 --- a/src/mappings/services/appsync.ts +++ b/src/mappings/services/appsync.ts @@ -1,24 +1,22 @@ -import { AppsyncApiKey } from "@cdktf/provider-aws/lib/appsync-api-key/index.js"; -import { AppsyncDatasource } from "@cdktf/provider-aws/lib/appsync-datasource/index.js"; -import { AppsyncDomainNameApiAssociation } from "@cdktf/provider-aws/lib/appsync-domain-name-api-association/index.js"; -import { AppsyncFunction } from "@cdktf/provider-aws/lib/appsync-function/index.js"; -import { AppsyncGraphqlApi } from "@cdktf/provider-aws/lib/appsync-graphql-api/index.js"; -import { AppsyncResolver } from "@cdktf/provider-aws/lib/appsync-resolver/index.js"; +import {AppsyncApiKey} from "@cdktf/provider-aws/lib/appsync-api-key/index.js"; +import {AppsyncDatasource} from "@cdktf/provider-aws/lib/appsync-datasource/index.js"; +import {AppsyncDomainNameApiAssociation} from "@cdktf/provider-aws/lib/appsync-domain-name-api-association/index.js"; +import {AppsyncFunction} from "@cdktf/provider-aws/lib/appsync-function/index.js"; +import {AppsyncGraphqlApi} from "@cdktf/provider-aws/lib/appsync-graphql-api/index.js"; +import {AppsyncResolver} from "@cdktf/provider-aws/lib/appsync-resolver/index.js"; import { CfnApiKey, CfnDataSource, CfnDomainNameApiAssociation, CfnFunctionConfiguration, CfnGraphQLApi, - CfnGraphQLSchemaProps, CfnResolver, } from "aws-cdk-lib/aws-appsync"; -import { Fn, TerraformStack } from "cdktf"; -import { resolve } from "cdktf/lib/_tokens.js"; -import { Construct } from "constructs"; -import { AwsTerraformAdaptorStack } from "../../lib/core/cdk-adaptor-stack.js"; -import { AdaptCfnProps } from "../cfn-mapper-types.js"; -import { deleteUndefinedKeys, getDeletableObject, registerMapping, registerMappingTyped } from "../utils.js"; +import {Fn, TerraformStack} from "cdktf"; +import {resolve} from "cdktf/lib/_tokens.js"; +import {Construct} from "constructs"; +import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; +import {deleteUndefinedKeys, registerMapping, registerMappingTyped} from "../utils.js"; const appsyncApiMapping = new Map(); @@ -152,14 +150,13 @@ export function registerAppSyncMappings() { */ registerMapping("AWS::AppSync::GraphQLSchema", { resource(scope, id, props) { - const schemaProps = getDeletableObject(props) as AdaptCfnProps; - const api = getAppsyncMapping(scope, schemaProps.ApiId); + const api = getAppsyncMapping(scope, props.ApiId); if (!api) { throw new Error("Unable to find GraphQLApi for GraphQLSchema."); } - if (schemaProps.Definition) { - api.schema = schemaProps.Definition; + if (props.Definition) { + api.schema = props.Definition; } }, attributes: {}, diff --git a/src/mappings/services/cloudfront.ts b/src/mappings/services/cloudfront.ts index be81f1e..ed3f52f 100644 --- a/src/mappings/services/cloudfront.ts +++ b/src/mappings/services/cloudfront.ts @@ -21,7 +21,7 @@ export function registerCloudfrontMappings() { }); registerMappingTyped(CfnDistribution, CloudfrontDistribution, { - resource: (scope, id, props) => { + resource: (scope, id, props, proxy) => { if (props.DistributionConfig.S3Origin != null) { throw new Error("Legacy S3Origin is not supported"); } @@ -66,6 +66,9 @@ export function registerCloudfrontMappings() { viewerProtocolPolicy: behavior.ViewerProtocolPolicy!, }); const aliases = [...(props.DistributionConfig.Aliases || []), ...(props.DistributionConfig.CNAMEs || [])]; + proxy.touchPath("DistributionConfig.OriginGroups.Quantity"); + proxy.touchPath("DistributionConfig.OriginGroups.Items.*.FailoverCriteria.StatusCodes.Quantity"); + proxy.touchPath("DistributionConfig.OriginGroups.Items.*.Members.Quantity"); const config: CloudfrontDistributionConfig = { aliases, tags: Object.fromEntries( diff --git a/src/mappings/services/cognito.ts b/src/mappings/services/cognito.ts index d3697c6..e4c92ef 100644 --- a/src/mappings/services/cognito.ts +++ b/src/mappings/services/cognito.ts @@ -109,7 +109,12 @@ export function registerCognitoMappings() { providerName: provider.ProviderName!, serverSideTokenCheck: provider.ServerSideTokenCheck, })), - + tags: Object.fromEntries( + identityPool?.IdentityPoolTags?.map(({ + Key: key, + Value: value, + }) => [key, value]) || [], + ), allowUnauthenticatedIdentities: identityPool.AllowUnauthenticatedIdentities, developerProviderName: identityPool.DeveloperProviderName, allowClassicFlow: identityPool.AllowClassicFlow, @@ -263,6 +268,10 @@ export function registerCognitoMappings() { pool.name = mapped.name || Names.uniqueResourceName(pool, { maxLength: 64 }); return pool; }, + unsupportedProps: [ + "AdminCreateUserConfig.UnusedAccountValidityDays", + "UserPoolAddOns.AdvancedSecurityAdditionalFlows" + ], attributes: { Ref: resource => resource.id, UserPoolId: resource => resource.id, diff --git a/src/mappings/services/dynamodb.ts b/src/mappings/services/dynamodb.ts index 7caf69c..1963c60 100644 --- a/src/mappings/services/dynamodb.ts +++ b/src/mappings/services/dynamodb.ts @@ -10,8 +10,9 @@ import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerDynamoDBMappings() { registerMappingTyped(CfnTable, DynamodbTable, { - resource(scope, id, tableProps) { + resource(scope, id, tableProps, proxy) { const globalIndexInsights: string[] = []; + proxy.touchPath("LocalSecondaryIndexes.*.KeySchema.*.AttributeName"); const mapped: DynamodbTableConfig = { name: tableProps.TableName!, // eslint-disable-next-line @typescript-eslint/naming-convention @@ -46,7 +47,6 @@ export function registerDynamoDBMappings() { name: attr.AttributeName, type: attr.AttributeType, })), - localSecondaryIndex: tableProps.LocalSecondaryIndexes?.map(index => ({ name: index.IndexName, rangeKey: index.KeySchema.find(key => key.KeyType === "RANGE")?.AttributeName as string, @@ -102,7 +102,7 @@ export function registerDynamoDBMappings() { ); } - if (tableProps.ContributorInsightsSpecification) { + if (tableProps.ContributorInsightsSpecification?.Enabled === true) { implicitDependencies.push( new DynamodbContributorInsights(scope, `${id}-contributor-insights`, { tableName: mapped.name, @@ -111,6 +111,7 @@ export function registerDynamoDBMappings() { } if (tableProps.ResourcePolicy) { + proxy.touchPath("ResourcePolicy.PolicyDocument"); implicitDependencies.push( new DynamodbResourcePolicy(scope, `${id}-resource-policy`, { policy: Fn.jsonencode(tableProps.ResourcePolicy.PolicyDocument), @@ -128,6 +129,7 @@ export function registerDynamoDBMappings() { // Support for this property is tracked by this issue // https://github.com/hashicorp/terraform-provider-aws/issues/37256 "OnDemandThroughput", + "SSESpecification.SSEType", ], attributes: { Arn: resource => resource.arn, diff --git a/src/mappings/services/ec2-vpc.ts b/src/mappings/services/ec2-vpc.ts index c97e4af..529b0f5 100644 --- a/src/mappings/services/ec2-vpc.ts +++ b/src/mappings/services/ec2-vpc.ts @@ -119,8 +119,8 @@ export function registerEC2VPCMappings() { // This has no resource representation in TF, see also: https://github.com/hashicorp/terraform-provider-aws/issues/5465#issuecomment-415575387 // so we add an aspect to simulate the behaviour it has const vpcId = props.VpcId; - delete props.VpcId; - delete props.InternetGatewayId; + props.VpcId; + props.InternetGatewayId; Aspects.of(scope).add({ visit: (node) => { @@ -166,7 +166,7 @@ export function registerEC2VPCMappings() { }); registerMappingTyped(CfnSecurityGroup, SecurityGroup, { - resource: (scope, id, cfnProps) => { + resource: (scope, id, cfnProps, proxy) => { const props: SecurityGroupConfig = { name: cfnProps.GroupName, vpcId: cfnProps.VpcId, @@ -182,6 +182,7 @@ export function registerEC2VPCMappings() { const securityGroup = new SecurityGroup(scope, id, deleteUndefinedKeys(props)); cfnProps.SecurityGroupIngress?.forEach((ingress, idx) => { + new VpcSecurityGroupIngressRule( securityGroup, `${idx}-ingress`, diff --git a/src/mappings/services/eks.ts b/src/mappings/services/eks.ts new file mode 100644 index 0000000..e7b7745 --- /dev/null +++ b/src/mappings/services/eks.ts @@ -0,0 +1,58 @@ +import {registerMappingTyped} from "../utils.js"; + +export function registerEcsMappings() { + // registerMapping("Custom::AWSCDK-EKS-Cluster", { + // resource: (scope, id, props) => { + // if (props?.Config?.EncryptionConfig && props?.Config?.EncryptionConfig.length > 1) { + // throw new Error("Only one encryptionConfig is allowed") + // } + // delete props.AssumeRoleArn + // delete props.AttributesRevision; + // delete props.ServiceToken + // const [encryptionConfig] = props.Config.encryptionConfig as Array; + // const accessConfig = props.Config.accessConfig as CfnCluster.AccessConfigProperty; + // // encryptionConfig[0].provider. + // + // const cluster = new EksCluster(scope, id, deleteUndefinedKeys({ + // name: props.Config.name, + // roleArn: props.Config.roleArn, + // version: props.Config.version, + // vpcConfig: { + // securityGroupIds: props.Config.resourcesVpcConfig.securityGroupIds, + // subnetIds: props.Config.resourcesVpcConfig.subnetIds, + // endpointPrivateAccess: props.Config.resourcesVpcConfig.endpointPrivateAccess, + // endpointPublicAccess: props.Config.resourcesVpcConfig.endpointPublicAccess, + // }, + // kubernetesNetworkConfig: { + // ipFamily: props.Config.kubernetesNetworkConfig.ipFamily, + // serviceIpv4Cidr: props.Config.kubernetesNetworkConfig.serviceIpv4Cidr, + // }, + // accessConfig: { + // authenticationMode: accessConfig?.authenticationMode, + // bootstrapClusterCreatorAdminPermissions: accessConfig?.bootstrapClusterCreatorAdminPermissions, + // }, + // encryptionConfig: { + // provider: { + // keyArn: (encryptionConfig?.provider as CfnCluster.ProviderProperty).keyArn!, + // }, + // resources: encryptionConfig?.resources!, + // }, + // })) + // delete props.Config + // return cluster; + // // console.log(props) + // }, + // attributes: { + // Ref: (resource: EksCluster) => resource.id, + // Endpoint: (resource: EksCluster) => resource.endpoint, + // Arn: (resource: EksCluster) => resource.arn, + // // CertificateAuthorityData: (resource: EksCluster) => resource.certificateAuthority., + // ClusterSecurityGroupId: (resource: EksCluster) => resource.vpcConfig.clusterSecurityGroupId, + // EncryptionConfigKeyArn: (resource: EksCluster) => resource.encryptionConfig.provider.keyArn, + // OpenIdConnectIssuerUrl: (resource: EksCluster) => resource.identity.get(0).oidc.get(0).issuer, + // OpenIdConnectIssuer: (resource: EksCluster) => resource.identity.get(0).oidc.get(0).issuer, + // } + // }) + + +} diff --git a/src/mappings/services/iam.ts b/src/mappings/services/iam.ts index d421d4e..8ac7f08 100644 --- a/src/mappings/services/iam.ts +++ b/src/mappings/services/iam.ts @@ -13,7 +13,10 @@ import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerIamMappings() { registerMappingTyped(CfnRole, IamRole, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { + + proxy.touchPath("AssumeRolePolicyDocument"); + proxy.touchPath("Policies.*.PolicyDocument"); const roleProps: IamRoleConfig = { name: props.RoleName, assumeRolePolicy: Fn.jsonencode(props.AssumeRolePolicyDocument), @@ -67,11 +70,12 @@ export function registerIamMappings() { }); registerMappingTyped(CfnPolicy, IamPolicy, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { const roleAttachments = props.Roles || []; const userAttachments = props.Users || []; const groupAttachments = props.Groups || []; + proxy.touchPath("PolicyDocument"); const policy = new IamPolicy( scope, id, diff --git a/src/mappings/services/logs.ts b/src/mappings/services/logs.ts index 0758c41..eca07fe 100644 --- a/src/mappings/services/logs.ts +++ b/src/mappings/services/logs.ts @@ -32,7 +32,7 @@ export function registerLogMappings() { ServiceToken, // eslint-disable-next-line @typescript-eslint/no-unused-vars SdkRetry, - } = getDeletableObject(props) as LogRetentionProps; + } = props as LogRetentionProps; // There is no such thing as a "LogRetention" resource and there never was // Instead, we try to create it before whatever it is that wants it diff --git a/src/mappings/services/rds.ts b/src/mappings/services/rds.ts new file mode 100644 index 0000000..52d145f --- /dev/null +++ b/src/mappings/services/rds.ts @@ -0,0 +1,82 @@ +// import {registerMappingTyped} from "../utils.js"; +// import {CfnDBCluster} from "aws-cdk-lib/aws-rds" +// import tf_aws from "@cdktf/provider-aws" +// import {IResolvable, Fn} from "cdktf"; +// +// export function registerMappingsRds() { +// registerMappingTyped(CfnDBCluster, tf_aws.rdsCluster.RdsCluster, { +// resource(scope, id, props) { +// const config: tf_aws.rdsCluster.RdsClusterConfig = { +// allocatedStorage: props?.AllocatedStorage, +// dbClusterInstanceClass: props?.DbClusterInstanceClass, +// snapshotIdentifier: props?.SnapshotIdentifier, +// engine: props!.Engine!, +// engineVersion: props?.EngineVersion, +// backtrackWindow: props?.BacktrackWindow, +// backupRetentionPeriod: props?.BackupRetentionPeriod, +// availabilityZones: props?.AvailabilityZones, +// clusterIdentifier: props?.DbClusterIdentifier, +// domain: props?.Domain, +// databaseName: props?.DatabaseName, +// dbClusterParameterGroupName: props?.DbClusterParameterGroupName, +// dbSubnetGroupName: props?.DbSubnetGroupName, +// vpcSecurityGroupIds: props?.VpcSecurityGroupIds, +// domainIamRoleName: props?.DomainIamRoleName, +// iamDatabaseAuthenticationEnabled: props?.EnableIamDatabaseAuthentication, +// masterPassword: props?.MasterUserPassword, +// masterUsername: props?.MasterUsername, +// storageEncrypted: props?.StorageEncrypted, +// storageType: props?.StorageType, +// engineMode: props?.EngineMode, +// enabledCloudwatchLogsExports: props?.EnableCloudwatchLogsExports, +// deletionProtection: props?.DeletionProtection, +// globalClusterIdentifier: props?.GlobalClusterIdentifier, +// preferredBackupWindow: props?.PreferredBackupWindow, +// preferredMaintenanceWindow: props?.PreferredMaintenanceWindow, +// sourceRegion: props?.SourceRegion, +// enableGlobalWriteForwarding: props?.EnableGlobalWriteForwarding, +// port: props?.Port, +// manageMasterUserPassword: props?.ManageMasterUserPassword, +// restoreToPointInTime: { +// restoreToTime: props?.RestoreToTime, +// useLatestRestorableTime: props?.UseLatestRestorableTime, +// sourceClusterIdentifier: props?.SourceDbClusterIdentifier, +// restoreType: props?.RestoreType, +// }, +// dbInstanceParameterGroupName: props?.DbInstanceParameterGroupName, +// enableHttpEndpoint: props?.EnableHttpEndpoint, +// replicationSourceIdentifier: props?.ReplicationSourceIdentifier, +// networkType: props?.NetworkType, +// enableLocalWriteForwarding: props?.EnableLocalWriteForwarding, +// engineLifecycleSupport: props?.EngineLifecycleSupport, +// performanceInsightsEnabled: props?.PerformanceInsightsEnabled, +// performanceInsightsKmsKeyId: props?.PerformanceInsightsKmsKeyId, +// performanceInsightsRetentionPeriod: props?.PerformanceInsightsRetentionPeriod, +// masterUserSecretKmsKeyId: props?.MasterUserSecret?.KmsKeyId, +// kmsKeyId: props?.KmsKeyId, +// iops: props?.Iops, +// dbSystemId: props?.DbSystemId, +// iamRoles: props?.AssociatedRoles?.map(role => role.RoleArn), +// serverlessv2ScalingConfiguration: { +// maxCapacity: props!.ServerlessV2ScalingConfiguration!.MaxCapacity!, +// minCapacity: props!.ServerlessV2ScalingConfiguration!.MinCapacity!, +// }, +// } +// +// return new tf_aws.rdsCluster.RdsCluster(scope, id, config); +// }, +// attributes: { +// Ref: (resource: tf_aws.rdsCluster.RdsCluster) => resource.id, +// DbClusterArn: (resource: tf_aws.rdsCluster.RdsCluster) => resource.arn, +// DbClusterResourceId: (resource: tf_aws.rdsCluster.RdsCluster) => resource.clusterResourceId, +// EndpointPort: (resource: tf_aws.rdsCluster.RdsCluster) => Fn.tostring(resource.port), +// EndpointAddress: (resource: tf_aws.rdsCluster.RdsCluster) => resource.endpoint, +// ReadEndpointAddress: (resource: tf_aws.rdsCluster.RdsCluster) => resource.readerEndpoint, +// StorageThroughput: (resource: tf_aws.rdsCluster.RdsCluster) => resource.iops, +// MasterUserSecretSecretArn: (resource: tf_aws.rdsCluster.RdsCluster) => resource.masterUserSecret.get(0).secretArn, +// ReadEndpoint: (resource: tf_aws.rdsCluster.RdsCluster) => resource.readerEndpoint as unknown as IResolvable, +// Endpoint: (resource: tf_aws.rdsCluster.RdsCluster) => resource.endpoint as unknown as IResolvable, +// }, +// unsupportedProps: [] +// }) +// } diff --git a/src/mappings/services/s3.ts b/src/mappings/services/s3.ts index 6ec2c92..f8e5e24 100644 --- a/src/mappings/services/s3.ts +++ b/src/mappings/services/s3.ts @@ -27,7 +27,8 @@ const BUCKET_WEB_SITE = Symbol("websiteEndpoint"); export function registerS3Mappings() { registerMappingTyped(CfnBucketPolicy, S3BucketPolicy, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { + proxy.touchPath("PolicyDocument"); return new S3BucketPolicy( scope, id, diff --git a/src/mappings/utils.ts b/src/mappings/utils.ts index 0311301..3fea72f 100644 --- a/src/mappings/utils.ts +++ b/src/mappings/utils.ts @@ -3,12 +3,13 @@ import { CloudcontrolapiResource } from "@cdktf/provider-aws/lib/cloudcontrolapi-resource/index.js"; import { CfnResource, IResolvable } from "aws-cdk-lib"; import { Fn, TerraformResource } from "cdktf"; -import { propertyAccess } from "cdktf/lib/tfExpression.js"; -import { Construct } from "constructs"; +import { propertyAccess} from "cdktf/lib/tfExpression.js"; +import {Construct} from "constructs"; import supportedAwsccResourceTypes from "../lib/core/awscc/supported-types.js"; import supportedTypes from "../lib/core/awscc/supported-types.js"; import { AdaptCfnProps, CfnAttributes } from "./cfn-mapper-types.js"; import { mapperDebug, mapperWarn, ResourceMapper } from "./helper.js"; +import * as mm from "minimatch" export function deleteUndefinedKeys(obj: T): T { for (const key in obj) { @@ -29,6 +30,7 @@ type AnyAttributeMapper = (attribute: string, resou export type Mapping = { resource: ResourceMapper; + unsupportedProps?: string[]; attributes: { [name: string]: AttributeMapper; } | AnyAttributeMapper; @@ -109,9 +111,8 @@ export interface CfnMapper< new(...args: never): TerraformResource; }, > { - resource(scope: Construct, id: string, props: CfnPropsForResourceClass): InstanceType; - - unsupportedProps?: (keyof Exclude, null | undefined>)[]; + resource(scope: Construct, id: string, props: CfnPropsForResourceClass, propProxy: AccessTracker>): InstanceType; + unsupportedProps?: string[]; attributes: { [key in keyof CfnAttributes>]: ( resource: InstanceType, @@ -137,38 +138,153 @@ export function registerMappingTyped< const resourceType = (cfClass as unknown as { CFN_RESOURCE_TYPE_NAME: string }).CFN_RESOURCE_TYPE_NAME; mapperDebug("registering mapping for", resourceType); registerMapping(resourceType, { - resource: (scope, id, props) => { - if (mapper.unsupportedProps) { - for (const prop of mapper.unsupportedProps) { - if (props[prop as string] != undefined) { - throw new Error(`The following prop is not supported for ${resourceType}: ${prop as string}`); - } - delete props[prop as string]; - } - } - const cfnProps = getDeletableObject(props) as CfnPropsForResourceClass; - const tfResource = mapper.resource(scope, id, cfnProps); - if (Object.keys(props).length > 0) { - throw new Error( - `The following props were not mapped for ${resourceType}: ${Object.keys(props).join(", ")}`, - ); - } + resource: (scope, id, _, proxy) => { + const tracker = proxy as AccessTracker>; + const tfResource = mapper.resource(scope, id, tracker.proxy, tracker); return tfResource as Tf; }, + unsupportedProps: mapper.unsupportedProps as string[], attributes: mapper.attributes as unknown as Mapping["attributes"], }); } -export function getDeletableObject< - T extends { - [key: string]: unknown; - }, ->(originalObj: T): T { - const obj = JSON.parse(JSON.stringify(originalObj)); - return new Proxy(obj, { - get: (target, prop) => { - delete originalObj[prop as keyof T]; - return obj[prop as keyof T]; - }, - }); +// // export function registerCustomResourceMapping< +// // TfClass extends { +// // new(...args: never): Tf; +// // }, +// // Tf extends TerraformResource, +// // >(resourceType: string, tfClass: TfClass, mapper: Mapping) { +// // registerMapping(resourceType, { +// // +// // }); +// // } + +// export function getDeletableObject< +// T extends { +// [key: string]: unknown; +// }, +// >(originalObj: T): T { +// const obj = JSON.parse(JSON.stringify(originalObj)); +// return new Proxy(obj, { +// get: (target, prop) => { +// delete originalObj[prop as keyof T]; +// return obj[prop as keyof T]; +// }, +// }); +// } + +export class AccessTracker { + private accessedProperties: Set = new Set(); + private properties: Set = new Set(); + + private obj: T; + public proxy: T; + + constructor(obj: T) { + this.obj = JSON.parse(JSON.stringify(obj)); + this.proxy = this.createProxy(obj); + this.properties = new Set(this.inspectProperties(obj)); + + // Lock the object to prevent further modifications + Object.freeze(this.obj); + } + + private createProxy(target: T, path: string[] = []): T { + if (typeof target !== "object" || target === null) { + throw new Error("Target is not an object"); + } + + return new Proxy(target, { + get: (obj, prop) => { + const propPath = [...path, prop.toString()].join("."); + if (path.length === 0 && !this.properties.has(propPath)) { + return + } + this.accessedProperties.add(propPath); + const value = obj[prop as keyof typeof obj]; + if (value && typeof value === "object") { + return this.createProxy(value as T, [...path, prop.toString()]); + } + return value; + } + }); + } + + private inspectProperties(obj: T, path: string[] = []): string[] { + const properties = []; + for (const key in obj) { + if (obj[key] === undefined) { + continue; + } + const propPath = [...path, key].join("."); + properties.push(propPath); + if (obj[key] && typeof obj[key] === "object") { + properties.push(...this.inspectProperties(obj[key] as T, [...path, key])); + } + } + return properties; + } + + public isAllPropertiesAccessed(): boolean { + for (const property of this.properties) { + if (!this.accessedProperties.has(property)) { + return false; + } + } + return true; + } + + public hasProperty(path: string): boolean { + const pattern = this.pathToReg(path); + for (const property of this.properties) { + if (pattern.test(property)) { + return true; + } + } + return false; + } + + /** + * Removes all properties under the given JSON path from the properties list + */ + public removePropertiesUnderPath(path: string): void { + const regExp = this.pathToReg(path); + for (const property of Array.from(this.properties)) { + if (regExp.test(property)) { + this.properties.delete(property); + this.accessedProperties.delete(property); + } + } + } + + private pathToReg(path: string): RegExp { + const parts = path.split("."); + const regParts = parts.map(part => + part === "*" ? "[^.]*" : part + ); + return new RegExp(`^${regParts.join("\\.")}`); + } + + public getUnaccessedProperties(): string[] { + return Array.from(this.properties).filter((property) => !this.accessedProperties.has(property)); + } + + public getAccessedProperties(): string[] { + return Array.from(this.accessedProperties); + } + + public touchPathReg(exp: RegExp): void { + for (const property of this.properties) { + if (exp.test(property)) { + this.accessedProperties.add(property); + } + } + } + + /** + * Touches all paths under the given JSON path + */ + public touchPath(path: string): void { + this.touchPathReg(this.pathToReg(path)); + } } diff --git a/vitest.config.js b/vitest.config.js index bec2578..62939de 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -8,7 +8,8 @@ const config = { coverage: { enabled: true, reporter: ["json", "html", "json-summary", "lcov"], - } + }, + include: ["src/**/*.spec.ts"], } } From be088a78595ab815b5ab804699901fed9b862540 Mon Sep 17 00:00:00 2001 From: John Conley <8932043+jfrconley@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:58:04 -0700 Subject: [PATCH 2/5] Finished work on improved construct reliability --- eslint.config.js | 4 + package.json | 7 +- pnpm-lock.yaml | 23 +- src/__tests__/access-tracker.spec.ts | 202 ++ src/__tests__/cdk-adaptor-stack.spec.ts | 6 +- src/__tests__/constructs/services/msk.spec.ts | 2 +- src/__tests__/helpers.ts | 69 +- .../__snapshots__/apigateway.spec.ts.snap | 10 +- .../__snapshots__/appsync.spec.ts.snap | 8 + .../__snapshots__/cloudfront.spec.ts.snap | 144 +- .../__snapshots__/cognito.spec.ts.snap | 5 + .../__snapshots__/dynamodb.spec.ts.snap | 4 + .../__snapshots__/ec2-vpc.spec.ts.snap | 75 + .../__snapshots__/events.spec.ts.snap | 158 ++ .../__snapshots__/lambda.spec.ts.snap | 253 ++- .../mappings/__snapshots__/logs.spec.ts.snap | 1 + .../mappings/__snapshots__/sns.spec.ts.snap | 126 ++ .../mappings/__snapshots__/sqs.spec.ts.snap | 88 + .../__snapshots__/stepfunctions.spec.ts.snap | 90 +- src/__tests__/mappings/apigateway.spec.ts | 51 +- src/__tests__/mappings/appsync.spec.ts | 51 +- src/__tests__/mappings/cloudfront.spec.ts | 241 ++- src/__tests__/mappings/cognito.spec.ts | 57 +- src/__tests__/mappings/dynamodb.spec.ts | 40 +- src/__tests__/mappings/ec2-vpc.spec.ts | 27 +- src/__tests__/mappings/eks.spec.ts | 27 +- src/__tests__/mappings/events.spec.ts | 14 + src/__tests__/mappings/iam.spec.ts | 12 +- src/__tests__/mappings/lambda.spec.ts | 181 +- src/__tests__/mappings/logs.spec.ts | 19 + src/__tests__/mappings/rds.spec.ts | 301 +-- src/__tests__/mappings/route53.spec.ts | 7 +- src/__tests__/mappings/s3.spec.ts | 4 +- src/__tests__/mappings/sns.spec.ts | 4 + src/__tests__/mappings/stepfunctions.spec.ts | 90 +- src/__tests__/utils.spec.ts | 148 -- src/lib/core/awscc/supported-types.ts | 1850 ++++++++--------- src/lib/core/cdk-adaptor-stack.ts | 66 +- src/lib/core/terraform-synthesizer.ts | 2 +- src/lib/core/type-utils.ts | 3 +- src/lib/stack-provider-singletons.ts | 3 + src/mappings/access-tracker.ts | 180 ++ src/mappings/helper.ts | 6 +- src/mappings/index.ts | 2 +- src/mappings/services/appsync.ts | 30 +- src/mappings/services/cloudfront.ts | 11 +- src/mappings/services/cognito.ts | 15 +- src/mappings/services/dynamodb.ts | 12 + src/mappings/services/ec2-vpc.ts | 20 +- src/mappings/services/eks.ts | 4 - src/mappings/services/events.ts | 6 + src/mappings/services/iam.ts | 1 - src/mappings/services/lambda.ts | 75 +- src/mappings/services/logs.ts | 2 +- src/mappings/services/rds.ts | 2 +- src/mappings/services/sns.ts | 12 +- src/mappings/services/sqs.ts | 3 +- src/mappings/services/stepfunctions.ts | 9 +- src/mappings/utils.ts | 154 +- 59 files changed, 3475 insertions(+), 1542 deletions(-) create mode 100644 src/__tests__/access-tracker.spec.ts create mode 100644 src/__tests__/mappings/__snapshots__/events.spec.ts.snap create mode 100644 src/__tests__/mappings/__snapshots__/sns.spec.ts.snap create mode 100644 src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap delete mode 100644 src/__tests__/utils.spec.ts create mode 100644 src/mappings/access-tracker.ts diff --git a/eslint.config.js b/eslint.config.js index 4bfd2d6..1cfe221 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -17,6 +17,10 @@ const compat = new FlatCompat({ */ export default [ { + languageOptions: { + sourceType: "module", + ecmaVersion: "latest", + }, plugins: { ts } diff --git a/package.json b/package.json index 2c0dd3e..af3ddce 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,6 @@ ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" - }, - "./constructs/aws-msk": { - "types": "./dist/constructs/services/msk/index.d.ts", - "import": "./dist/constructs/services/msk/index.js" } }, "repository": "https://github.com/nRFCloud/ts-json-schema-transformer", @@ -84,6 +80,7 @@ "codemaker": "^1.94.0", "debug": "^4.3.4", "minimatch": "^10.0.1", - "yargs": "^17.7.2" + "yargs": "^17.7.2", + "@cdktf/provider-archive": "10.2.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fa888e..4b57c7b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@cdktf/provider-archive': + specifier: 10.2.0 + version: 10.2.0(cdktf@0.20.8(constructs@10.3.0))(constructs@10.3.0) camel-case: specifier: ^4.1.2 version: 4.1.2 @@ -301,6 +304,13 @@ packages: '@cdktf/node-pty-prebuilt-multiarch@0.10.1-pre.10': resolution: {integrity: sha512-5ysQrHJvqYLYg407KvaDNu+xx68ZGaqeF0SohXe5e4yNqJhPFPUQ536rkReQcPc2yZiF5PDmmvf5T9MOacHpSQ==} + '@cdktf/provider-archive@10.2.0': + resolution: {integrity: sha512-rVfc1ji0X0lIV96AScR1YSDtTgr4rrUslXKb4/VgBj6xwoPdCpCWSlJbDi/okfktseGX3Tlzys19xC/qbUm29g==} + engines: {node: '>= 18.12.0'} + peerDependencies: + cdktf: ^0.20.0 + constructs: ^10.3.0 + '@cdktf/provider-aws@19.33.0': resolution: {integrity: sha512-21dhJPSMwTL/lLJacj7R+qnW7NrRFIWcvbSblKrAdNduMf24Th+9fcd8kTHoXv1jPGN9eC6kK/XOPxna6YHdrw==} engines: {node: '>= 18.12.0'} @@ -3180,8 +3190,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.7.0-dev.20240912: - resolution: {integrity: sha512-mDTEqq6tLag5w75BeGd1g9t64z7dlhTl/3x0CP1bG/638MXiBbvCoI5sbkcEY0UoYUxP7EeIi7ZI6HBd9lDPFw==} + typescript@5.7.0-dev.20240916: + resolution: {integrity: sha512-PvqtY2wVBTIlHc0+Vs3w3UNntEzSho0uNm56c8D3mFINC/WFcEyOszkwxjSKyqVwEv62zl6xg+p7Ilt3H6yOJA==} engines: {node: '>=14.17'} hasBin: true @@ -3994,6 +4004,11 @@ snapshots: nan: 2.18.0 prebuild-install: 7.1.1 + '@cdktf/provider-archive@10.2.0(cdktf@0.20.8(constructs@10.3.0))(constructs@10.3.0)': + dependencies: + cdktf: 0.20.8(constructs@10.3.0) + constructs: 10.3.0 + '@cdktf/provider-aws@19.33.0(cdktf@0.20.8(constructs@10.3.0))(constructs@10.3.0)': dependencies: cdktf: 0.20.8(constructs@10.3.0) @@ -5502,7 +5517,7 @@ snapshots: dependencies: semver: 7.6.0 shelljs: 0.8.5 - typescript: 5.7.0-dev.20240912 + typescript: 5.7.0-dev.20240916 dprint@0.35.4: dependencies: @@ -7335,7 +7350,7 @@ snapshots: typescript@5.3.3: {} - typescript@5.7.0-dev.20240912: {} + typescript@5.7.0-dev.20240916: {} unbox-primitive@1.0.2: dependencies: diff --git a/src/__tests__/access-tracker.spec.ts b/src/__tests__/access-tracker.spec.ts new file mode 100644 index 0000000..fa33ddc --- /dev/null +++ b/src/__tests__/access-tracker.spec.ts @@ -0,0 +1,202 @@ +import { AccessTracker } from "../mappings/access-tracker.js"; + +const testObj = { + prop1: "value1", + prop2: { + nestedProp1: "nestedValue1", + nestedProp2: "nestedValue2", + }, + prop3: [1, 2, 3], + prop4: { + deepNested: { + level1: "deep1", + level2: "deep2", + }, + }, +}; + +describe("AccessTracker", () => { + let tracker: AccessTracker; + + beforeEach(() => { + tracker = new AccessTracker(testObj); + }); + + it("isAllPropertiesAccessed returns false initially", () => { + expect(tracker.isAllPropertiesAccessed()).toBe(false); + }); + + it("should not mutate the original object", () => { + tracker.proxy.prop1; + expect(testObj).toEqual({ + prop1: "value1", + prop2: { + nestedProp1: "nestedValue1", + nestedProp2: "nestedValue2", + }, + prop3: [1, 2, 3], + prop4: { + deepNested: { + level1: "deep1", + level2: "deep2", + }, + }, + }); + }); + + it("accessing properties marks them as accessed", () => { + tracker.proxy.prop1; + tracker.proxy.prop2; + expect(tracker.getAccessedProperties()).members(["prop1", "prop2"]); + }); + + it("accessing nested properties marks them as accessed", () => { + tracker.proxy.prop2.nestedProp1; + expect(tracker.getAccessedProperties()).members(["prop2.nestedProp1", "prop2"]); + }); + + it("getUnaccessedProperties returns unaccessed properties", () => { + tracker.proxy.prop1; + expect(tracker.getUnaccessedProperties()).toEqual([ + "prop2", + "prop2.nestedProp1", + "prop2.nestedProp2", + "prop3", + "prop3.0", + "prop3.1", + "prop3.2", + "prop4", + "prop4.deepNested", + "prop4.deepNested.level1", + "prop4.deepNested.level2", + ]); + }); + + it("isAllPropertiesAccessed returns true when all properties are accessed", () => { + tracker.proxy.prop1; + tracker.proxy.prop2.nestedProp1; + tracker.proxy.prop2.nestedProp2; + tracker.proxy.prop3[0]; + tracker.proxy.prop3[1]; + tracker.proxy.prop3[2]; + tracker.proxy.prop4.deepNested; + tracker.proxy.prop4.deepNested.level1; + tracker.proxy.prop4.deepNested.level2; + expect(tracker.isAllPropertiesAccessed()).toBe(true); + }); + + it("hasProperty returns true for existing properties", () => { + expect(tracker.hasProperty("prop1")).toBe(true); + expect(tracker.hasProperty("prop2.nestedProp1")).toBe(true); + }); + + it("hasProperty returns false for non-existing properties", () => { + expect(tracker.hasProperty("nonExistentProp")).toBe(false); + }); + + it("removePropertiesUnderPath removes specified properties", () => { + tracker.removePropertiesUnderPath("prop2"); + expect(tracker.hasProperty("prop2")).toBe(false); + expect(tracker.hasProperty("prop2.nestedProp")).toBe(false); + }); + + it("touchPath marks properties as accessed", () => { + tracker.touchPath("prop2"); + expect(tracker.getAccessedProperties()).members(["prop2", "prop2.nestedProp1", "prop2.nestedProp2"]); + }); + + it("removePropertiesUnderPath removes properties using wildcard", () => { + tracker.removePropertiesUnderPath("prop2.*"); + expect(tracker.hasProperty("prop2")).toBe(true); + expect(tracker.hasProperty("prop2.nestedProp1")).toBe(false); + expect(tracker.hasProperty("prop2.nestedProp2")).toBe(false); + }); + + it("removePropertiesUnderPath removes deep nested properties using wildcard", () => { + tracker.removePropertiesUnderPath("prop4.*"); + expect(tracker.hasProperty("prop4")).toBe(true); + expect(tracker.hasProperty("prop4.deepNested.level1")).toBe(false); + expect(tracker.hasProperty("prop4.deepNested.level2")).toBe(false); + expect(tracker.hasProperty("prop1")).toBe(true); + }); + + it("touchPath marks properties as accessed using wildcard", () => { + tracker.touchPath("prop2"); + expect(tracker.getAccessedProperties()).members(["prop2", "prop2.nestedProp1", "prop2.nestedProp2"]); + }); + + it("touchPath marks deep nested properties as accessed using wildcard", () => { + tracker.touchPath("prop4"); + expect(tracker.getAccessedProperties()).toContain("prop4"); + expect(tracker.getAccessedProperties()).toContain("prop4.deepNested"); + expect(tracker.getAccessedProperties()).toContain("prop4.deepNested.level1"); + expect(tracker.getAccessedProperties()).toContain("prop4.deepNested.level2"); + }); + + it("touchPath should work correctly with multiple wildcards", () => { + tracker.touchPath("*.deepNested.*"); + expect(tracker.getAccessedProperties()).members(["prop4.deepNested.level1", "prop4.deepNested.level2"]); + }); + + it("removePropertiesUnderPath should work correctly with multiple wildcards", () => { + tracker.removePropertiesUnderPath("*.deepNested.*"); + expect(tracker.hasProperty("prop4.deepNested.level1")).toBe(false); + expect(tracker.hasProperty("prop4.deepNested.level2")).toBe(false); + expect(tracker.hasProperty("prop4.deepNested")).toBe(true); + }); + + it("should partially clone all correctly", () => { + const cloned = tracker.clone(); + expect(cloned).toStrictEqual(testObj); + }); + + it("should partially clone a set of paths", () => { + const cloned = tracker.partiallyClone(["prop1", "prop2.nestedProp1"]); + expect(cloned).toStrictEqual({ + prop1: "value1", + prop2: { + nestedProp1: "nestedValue1", + }, + }); + }); + + it("should partially clone a set of paths with wildcard", () => { + const cloned = tracker.partiallyClone(["prop2.*"]); + expect(cloned).toStrictEqual({ + prop2: { + nestedProp1: "nestedValue1", + nestedProp2: "nestedValue2", + }, + }); + }); + + it("should clone accessed properties correctly", () => { + tracker.proxy.prop1; + tracker.proxy.prop2.nestedProp1; + const cloned = tracker.cloneAccessed(); + expect(cloned).toStrictEqual({ + prop1: "value1", + prop2: { + nestedProp1: "nestedValue1", + }, + }); + }); + + it("should clone unaccessed properties correctly", () => { + tracker.proxy.prop1; + tracker.proxy.prop2.nestedProp1; + const cloned = tracker.cloneUnaccessed(); + expect(cloned).toStrictEqual({ + prop2: { + nestedProp2: "nestedValue2", + }, + prop3: [1, 2, 3], + prop4: { + deepNested: { + level1: "deep1", + level2: "deep2", + }, + }, + }); + }); +}); diff --git a/src/__tests__/cdk-adaptor-stack.spec.ts b/src/__tests__/cdk-adaptor-stack.spec.ts index 2adbfde..380e655 100644 --- a/src/__tests__/cdk-adaptor-stack.spec.ts +++ b/src/__tests__/cdk-adaptor-stack.spec.ts @@ -518,8 +518,12 @@ describe("Stack synthesis", () => { outdir: dirname, }); class TestStack1 extends AwsTerraformAdaptorStack { + public readonly bucket = new Bucket(this, "bucket", { + bucketName: "cdktf-test-bucket", + }); + public lambda = new Function(this, "lambda", { - code: Code.fromInline("console.log('yay')"), + code: Code.fromBucket(this.bucket, "test-lambda-asset"), handler: "index.handler", runtime: Runtime.NODEJS_LATEST, }); diff --git a/src/__tests__/constructs/services/msk.spec.ts b/src/__tests__/constructs/services/msk.spec.ts index 2bf00a9..84a98d1 100644 --- a/src/__tests__/constructs/services/msk.spec.ts +++ b/src/__tests__/constructs/services/msk.spec.ts @@ -10,7 +10,7 @@ import { registerMappings } from "../../../mappings/index.js"; setupJest(); registerMappings(); -describe("MSK Constructs", () => { +describe.skip("MSK Constructs", () => { it("Should provision an MSK Cluster", () => { class Stack extends AwsTerraformAdaptorStack { public readonly vpc = new Vpc(this, "vpc", {}); diff --git a/src/__tests__/helpers.ts b/src/__tests__/helpers.ts index df19bb4..cf63364 100644 --- a/src/__tests__/helpers.ts +++ b/src/__tests__/helpers.ts @@ -1,10 +1,19 @@ import { CfnElement, Fn } from "aws-cdk-lib"; -import { LocalBackend, TerraformElement, TerraformStack, TerraformVariable, Testing } from "cdktf"; +import { + LocalBackend, + TerraformElement, + TerraformMetaArguments, + TerraformStack, + TerraformVariable, + Testing, +} from "cdktf"; import { resolve } from "cdktf/lib/_tokens.js"; import { Construct } from "constructs"; import { Class } from "type-fest"; import { AwsTerraformAdaptorStack } from "../index.js"; -import {IfEquals} from "../lib/core/type-utils.js"; +import { UnsupportedPropertiesSpecifiedError } from "../lib/core/cdk-adaptor-stack.js"; +import { NotAny } from "../lib/core/type-utils.js"; +import { AccessTracker } from "../mappings/access-tracker.js"; export function synthesizeConstructAndTestStability>( constructClass: C, @@ -35,9 +44,17 @@ export function synthesizeConstructAndTestStability = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [K in keyof Required]: NotAny extends never ? any : DeepRequiredProperties; +}; + type DeepRequired = { - [K in keyof T]-?: IfEquals, any, DeepRequired, any>; -} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [K in keyof T]-?: NotAny extends never ? any : DeepRequired; +}; + +type BaseTfResourceProps = "id" | "tagsAll" | keyof TerraformMetaArguments; export function synthesizeElementAndTestStability< C extends CfnElement, @@ -48,7 +65,8 @@ export function synthesizeElementAndTestStability< constructClass: CC, props: DeepRequired[2]>, terraformClass: TC, - terraformProps: DeepRequired[2]>, + terraformProps: Omit[2]>, BaseTfResourceProps>, + unsupportedCfPropPaths: string[] = [], ) { class ConstructWrapper extends Construct { public readonly resource: C; @@ -68,9 +86,35 @@ export function synthesizeElementAndTestStability< } } - const output = synthesizeConstructAndTestStability(ConstructWrapper, props); + if (unsupportedCfPropPaths.length > 0) { + const propTracker = new AccessTracker(props); + const unsupportedProps = unsupportedCfPropPaths.map(path => propTracker.matchingProperties(path)).flat() + .map(prop => prop.toLowerCase()); + + // Attempt to create a new instance of the construct with the unsupported properties + // This should throw an error if the properties are not removed + try { + synthesizeConstructAndTestStability(ConstructWrapper, props); + throw new Error( + `Expected an error when creating an instance of ${constructClass.name} with unsupported properties: ${unsupportedProps}`, + ); + } catch (e) { + expect(e).toBeInstanceOf(UnsupportedPropertiesSpecifiedError); + + // Case insensitive comparison + expect((e as UnsupportedPropertiesSpecifiedError).unsupportedProps.map(prop => prop.toLowerCase())).members( + unsupportedProps, + ); + } + } + + const propProxy = new AccessTracker(props); + unsupportedCfPropPaths.forEach(path => propProxy.removePropertiesUnderPath(path)); + + const output = synthesizeConstructAndTestStability(ConstructWrapper, propProxy.clone()); const transformedResource = output.resource.node.tryFindChild("resource") as T; expectResourcePropertiesMatch(transformedResource, terraformClass, terraformProps); + return { ...output, resource: transformedResource as InstanceType, @@ -102,11 +146,18 @@ export function itShouldMapCfnElementToTerraformResource< TC extends Class, >( constructClass: CC, - props: ConstructorParameters[2], + props: DeepRequired[2]>, terraformClass: TC, - terraformProps: ConstructorParameters[2], + terraformProps: Omit[2]>, BaseTfResourceProps>, + unsupportedCfPropPaths: string[] = [], ) { it(`Should map ${(constructClass as unknown as { CFN_RESOURCE_TYPE_NAME: string }).CFN_RESOURCE_TYPE_NAME}`, () => { - synthesizeElementAndTestStability(constructClass, props, terraformClass, terraformProps); + synthesizeElementAndTestStability( + constructClass, + props, + terraformClass, + terraformProps, + unsupportedCfPropPaths, + ); }); } diff --git a/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap b/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap index 5ac3a39..ba6acb7 100644 --- a/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/apigateway.spec.ts.snap @@ -268,7 +268,11 @@ exports[`Apigateway mappings > Should map AWS::ApiGatewayV2::Stage 1`] = ` "route_settings": [ { "data_trace_enabled": true, - "route_key": "route-key" + "detailed_metrics_enabled": true, + "logging_level": "logging-level", + "route_key": "route-key", + "throttling_burst_limit": 60, + "throttling_rate_limit": 60 } ], "stage_variables": { @@ -397,7 +401,7 @@ exports[`Apigateway mappings > should map AWS::ApiGateway::Deployment 1`] = ` "resource": { "aws_cloudcontrolapi_resource": { "resource_22C949BF": { - "desired_state": "{\\"DeploymentCanarySettings\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"},\\"UseStageCache\\":true},\\"Description\\":\\"description\\",\\"RestApiId\\":\\"rest-api-id\\",\\"StageDescription\\":{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"CanarySetting\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"}},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DataTraceEnabled\\":true,\\"DocumentationVersion\\":\\"documentation-version\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MethodSettings\\":[{\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"DataTraceEnabled\\":true,\\"HttpMethod\\":\\"http-method\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MetricsEnabled\\":true,\\"ResourcePath\\":\\"resource-path\\",\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60}],\\"MetricsEnabled\\":true,\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60,\\"TracingEnabled\\":true},\\"StageName\\":\\"stage-name\\"}", + "desired_state": "{\\"DeploymentCanarySettings\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"},\\"UseStageCache\\":true},\\"Description\\":\\"description\\",\\"RestApiId\\":\\"rest-api-id\\",\\"StageDescription\\":{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\",\\"Format\\":\\"format\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"CanarySetting\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"},\\"UseStageCache\\":true},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DataTraceEnabled\\":true,\\"Description\\":\\"description\\",\\"DocumentationVersion\\":\\"documentation-version\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MethodSettings\\":[{\\"CacheDataEncrypted\\":true,\\"CacheTtlInSeconds\\":60,\\"CachingEnabled\\":true,\\"DataTraceEnabled\\":true,\\"HttpMethod\\":\\"http-method\\",\\"LoggingLevel\\":\\"logging-level\\",\\"MetricsEnabled\\":true,\\"ResourcePath\\":\\"resource-path\\",\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60}],\\"MetricsEnabled\\":true,\\"Tags\\":[{\\"Key\\":\\"tag\\",\\"Value\\":\\"tag-value\\"}],\\"ThrottlingBurstLimit\\":60,\\"ThrottlingRateLimit\\":60,\\"TracingEnabled\\":true,\\"Variables\\":{\\"stage-variable\\":\\"stage-variable-value\\"}},\\"StageName\\":\\"stage-name\\"}", "type_name": "AWS::ApiGateway::Deployment" } } @@ -437,7 +441,7 @@ exports[`Apigateway mappings > should map AWS::ApiGateway::Stage 1`] = ` "resource": { "aws_cloudcontrolapi_resource": { "resource_22C949BF": { - "desired_state": "{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CanarySetting\\":{\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"}},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DeploymentId\\":\\"deployment-id\\",\\"Description\\":\\"description\\",\\"DocumentationVersion\\":\\"documentation-version\\",\\"MethodSettings\\":[],\\"RestApiId\\":\\"rest-api-id\\",\\"StageName\\":\\"stage-name\\",\\"TracingEnabled\\":true}", + "desired_state": "{\\"AccessLogSetting\\":{\\"DestinationArn\\":\\"destination-arn\\",\\"Format\\":\\"format\\"},\\"CacheClusterEnabled\\":true,\\"CacheClusterSize\\":\\"cache-cluster-size\\",\\"CanarySetting\\":{\\"DeploymentId\\":\\"deployment-id\\",\\"PercentTraffic\\":50,\\"StageVariableOverrides\\":{\\"stage-variable\\":\\"stage-variable-value\\"},\\"UseStageCache\\":true},\\"ClientCertificateId\\":\\"client-certificate-id\\",\\"DeploymentId\\":\\"deployment-id\\",\\"Description\\":\\"description\\",\\"DocumentationVersion\\":\\"documentation-version\\",\\"RestApiId\\":\\"rest-api-id\\",\\"StageName\\":\\"stage-name\\",\\"Tags\\":[{\\"Key\\":\\"tag\\",\\"Value\\":\\"tag-value\\"}],\\"TracingEnabled\\":true,\\"Variables\\":{\\"stage-variable\\":\\"stage-variable-value\\"}}", "type_name": "AWS::ApiGateway::Stage" } } diff --git a/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap b/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap index 8183345..418fed5 100644 --- a/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/appsync.spec.ts.snap @@ -143,6 +143,12 @@ exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API with } ], "authentication_type": "API_KEY", + "enhanced_metrics_config": { + "data_source_level_metrics_behavior": "test-data-source-level-metrics-behavior", + "operation_level_metrics_config": "test-operation-level-metrics-config", + "resolver_level_metrics_behavior": "test-resolver-level-metrics-behavior" + }, + "introspection_config": "test-introspection-config", "lambda_authorizer_config": { "authorizer_result_ttl_in_seconds": 60, "authorizer_uri": "authorizer-uri", @@ -160,6 +166,8 @@ exports[`Appsync mappings > AWS::AppSync::GraphQLApi > Should translate API with "iat_ttl": 60, "issuer": "issuer" }, + "query_depth_limit": 60, + "resolver_count_limit": 68, "tags": { "tag-key": "tag-value" }, diff --git a/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap b/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap index e951cba..0cb47bd 100644 --- a/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/cloudfront.spec.ts.snap @@ -54,7 +54,7 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` "resource_22C949BF": { "aliases": [ "example.com", - "example.com" + "cnames.com" ], "comment": "My CloudFront distribution", "continuous_deployment_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", @@ -81,7 +81,10 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` "field_level_encryption_id": "1234567890abcdef1234567890abcdef", "forwarded_values": { "cookies": { - "forward": "none" + "forward": "none", + "whitelisted_names": [ + "*" + ] }, "headers": [ "*" @@ -144,7 +147,10 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` "field_level_encryption_id": "1234567890abcdef1234567890abcdef", "forwarded_values": { "cookies": { - "forward": "none" + "forward": "none", + "whitelisted_names": [ + "*" + ] }, "headers": [ "*" @@ -204,12 +210,13 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` "TLSv1.2" ] }, - "domain_name": "example.com", + "domain_name": "origins.com", "origin_access_control_id": "1234567890abcdef1234567890abcdef", "origin_id": "my-origin", "origin_path": "/mypath", "origin_shield": { - "enabled": true + "enabled": true, + "origin_shield_region": "us-east-1" }, "s3_origin_config": { "origin_access_identity": "origin-access-identity/cloudfront/E127EXAMPLE51Z" @@ -249,6 +256,8 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 1`] = ` }, "viewer_certificate": { "acm_certificate_arn": "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", + "cloudfront_default_certificate": true, + "iam_certificate_id": "1234567890abcdef1234567890abcdef1234567890abcdef", "minimum_protocol_version": "TLSv1.2_2019", "ssl_support_method": "sni-only" }, @@ -291,6 +300,20 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` "resource": { "aws_cloudfront_distribution": { "resource_22C949BF": { + "aliases": [ + "aliases.com", + "example.com" + ], + "comment": "My CloudFront distribution", + "continuous_deployment_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "custom_error_response": [ + { + "error_caching_min_ttl": 300, + "error_code": 404, + "response_code": 200, + "response_page_path": "/index.html" + } + ], "default_cache_behavior": { "allowed_methods": [ "GET", @@ -306,7 +329,10 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` "field_level_encryption_id": "1234567890abcdef1234567890abcdef", "forwarded_values": { "cookies": { - "forward": "none" + "forward": "none", + "whitelisted_names": [ + "*" + ] }, "headers": [ "*" @@ -344,7 +370,74 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` ], "viewer_protocol_policy": "redirect-to-https" }, + "default_root_object": "index.html", "enabled": true, + "http_version": "http2", + "is_ipv6_enabled": true, + "logging_config": { + "bucket": "my-logs.s3.amazonaws.com", + "include_cookies": true, + "prefix": "myprefix" + }, + "ordered_cache_behavior": [ + { + "allowed_methods": [ + "GET", + "HEAD" + ], + "cache_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "cached_methods": [ + "GET", + "HEAD" + ], + "compress": true, + "default_ttl": 3600, + "field_level_encryption_id": "1234567890abcdef1234567890abcdef", + "forwarded_values": { + "cookies": { + "forward": "none", + "whitelisted_names": [ + "*" + ] + }, + "headers": [ + "*" + ], + "query_string": false, + "query_string_cache_keys": [ + "*" + ] + }, + "function_association": [ + { + "event_type": "viewer-request", + "function_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" + } + ], + "lambda_function_association": [ + { + "event_type": "origin-request", + "include_body": true, + "lambda_arn": "arn:aws:lambda:us-east-1:111111111111:function:my-function" + } + ], + "max_ttl": 86400, + "min_ttl": 0, + "origin_request_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "path_pattern": "/images/*", + "realtime_log_config_arn": "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + "response_headers_policy_id": "658327ea-f89d-4fab-a63d-7e88639e58f6", + "smooth_streaming": true, + "target_origin_id": "my-target-origin", + "trusted_key_groups": [ + "1234567890abcdef1234567890abcdef" + ], + "trusted_signers": [ + "123" + ], + "viewer_protocol_policy": "redirect-to-https" + } + ], "origin": [ { "connection_attempts": 3, @@ -355,18 +448,46 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` "value": "MyCustomValue" } ], + "custom_origin_config": { + "http_port": 80, + "https_port": 443, + "origin_keepalive_timeout": 5, + "origin_protocol_policy": "https-only", + "origin_read_timeout": 30, + "origin_ssl_protocols": [ + "TLSv1.2" + ] + }, "domain_name": "example.com", "origin_access_control_id": "1234567890abcdef1234567890abcdef", "origin_id": "my-origin", "origin_path": "/mypath", "origin_shield": { - "enabled": true + "enabled": true, + "origin_shield_region": "us-east-1" }, "s3_origin_config": { "origin_access_identity": "origin-access-identity/cloudfront/E127EXAMPLE51Z" } } ], + "origin_group": [ + { + "failover_criteria": { + "status_codes": [ + 500, + 502 + ] + }, + "member": [ + { + "origin_id": "my-origin" + } + ], + "origin_id": "my-origin-group" + } + ], + "price_class": "PriceClass_100", "restrictions": { "geo_restriction": { "locations": [ @@ -377,11 +498,18 @@ exports[`CloudFront > Should map AWS::CloudFront::Distribution 2`] = ` "restriction_type": "whitelist" } }, + "staging": true, + "tags": { + "Name": "my-distribution" + }, "viewer_certificate": { "acm_certificate_arn": "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", + "cloudfront_default_certificate": true, + "iam_certificate_id": "1234567890abcdef1234567890abcdef1234567890abcdef", "minimum_protocol_version": "TLSv1.2_2019", "ssl_support_method": "sni-only" - } + }, + "web_acl_id": "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl" } } }, diff --git a/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap b/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap index 07867e0..cb219ad 100644 --- a/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/cognito.spec.ts.snap @@ -184,6 +184,10 @@ exports[`Cognito mappings > Should map AWS::Cognito::UserPool 1`] = ` "pre_authentication": "pre-authentication", "pre_sign_up": "pre-sign-up", "pre_token_generation": "pre-token-generation", + "pre_token_generation_config": { + "lambda_arn": "lambda-arn", + "lambda_version": "lambda-version" + }, "user_migration": "user-migration", "verify_auth_challenge_response": "verify-auth-challenge-response" }, @@ -191,6 +195,7 @@ exports[`Cognito mappings > Should map AWS::Cognito::UserPool 1`] = ` "name": "user-pool-name", "password_policy": { "minimum_length": 60, + "password_history_size": 60, "require_lowercase": true, "require_numbers": true, "require_symbols": true, diff --git a/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap b/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap index aa7b827..872b5f6 100644 --- a/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/dynamodb.spec.ts.snap @@ -30,6 +30,10 @@ exports[`DynamoDB mappings > Should map AWS::DynamoDB::Table 1`] = ` "resource_resource-resource-policy_BB2DAEEF": { "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\", \\"Principal\\" = {\\"Service\\" = \\"dynamodb.amazonaws.com\\"}, \\"Action\\" = \\"dynamodb:DescribeTable\\", \\"Resource\\" = \\"*\\"}]})}", "resource_arn": "\${aws_dynamodb_table.resource_22C949BF.arn}" + }, + "resource_resource-stream-resource-policy_1D45562B": { + "policy": "\${jsonencode({\\"Version\\" = \\"2012-10-17\\", \\"Statement\\" = [{\\"Effect\\" = \\"Allow\\", \\"Principal\\" = {\\"Service\\" = \\"dynamodb.amazonaws.com\\"}, \\"Action\\" = \\"dynamodb:DescribeTable\\", \\"Resource\\" = \\"*\\"}]})}", + "resource_arn": "\${aws_dynamodb_table.resource_22C949BF.stream_arn}" } }, "aws_dynamodb_table": { diff --git a/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap b/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap index 5c79f88..13a1506 100644 --- a/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/ec2-vpc.spec.ts.snap @@ -13,6 +13,9 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::InternetGateway 1`] = ` "resource": { "aws_internet_gateway": { "resource_22C949BF": { + "tags": { + "Name": "test-internet-gateway" + } } } }, @@ -90,6 +93,76 @@ exports[`EC2 VPC mappings > Should map AWS::EC2::Route 1`] = ` }" `; +exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroup 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_security_group": { + "resource_22C949BF": { + "description": "test-security-group-description", + "name": "test-security-group", + "tags": { + "Name": "test-security-group" + }, + "vpc_id": "test-vpc-id" + } + }, + "aws_vpc_security_group_egress_rule": { + "resource_0-egress_4775819E": { + "cidr_ipv4": "10.0.0.0/16", + "cidr_ipv6": "2001:db8:1234:1a00::/64", + "description": "test-security-group-egress-description", + "from_port": 0, + "ip_protocol": "-1", + "prefix_list_id": "destination-prefix-list-id", + "referenced_security_group_id": "destination-security-group-id", + "security_group_id": "\${aws_security_group.resource_22C949BF.id}", + "to_port": 0 + } + }, + "aws_vpc_security_group_ingress_rule": { + "resource_0-ingress_051257B0": { + "cidr_ipv4": "10.0.0.0/16", + "cidr_ipv6": "2001:db8:1234:1a00::/64", + "description": "test-security-group-ingress-description", + "from_port": 0, + "ip_protocol": "-1", + "prefix_list_id": "source-prefix-list-id", + "referenced_security_group_id": "source-security-group-id", + "security_group_id": "\${aws_security_group.resource_22C949BF.id}", + "to_port": 0 + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_security_group.resource_22C949BF.id, \\",\\", aws_security_group.resource_22C949BF.id, \\",\\", aws_security_group.resource_22C949BF.vpc_id])}", + "type": "string" + } + } +}" +`; + exports[`EC2 VPC mappings > Should map AWS::EC2::SecurityGroupEgress 1`] = ` "{ "provider": { @@ -330,6 +403,8 @@ exports[`EC2 VPC mappings > Should provision all the components of a VPC 1`] = ` }, "aws_internet_gateway": { "resource_IGW_222CDE0E": { + "tags": { + }, "vpc_id": "\${aws_vpc.resource_AACBEC77.id}" } }, diff --git a/src/__tests__/mappings/__snapshots__/events.spec.ts.snap b/src/__tests__/mappings/__snapshots__/events.spec.ts.snap new file mode 100644 index 0000000..9bfd3e0 --- /dev/null +++ b/src/__tests__/mappings/__snapshots__/events.spec.ts.snap @@ -0,0 +1,158 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Events mappings > Should map AWS::Events::Rule 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_cloudwatch_event_rule": { + "resource_22C949BF": { + "description": "test-rule-description", + "event_bus_name": "test-event-bus-name", + "event_pattern": "{\\"source\\":[\\"test-source\\"],\\"detail\\":{\\"foo\\":[\\"bar\\"]}}", + "is_enabled": true, + "name": "test-rule", + "role_arn": "test-role-arn", + "schedule_expression": "test-schedule-expression" + } + }, + "aws_cloudwatch_event_target": { + "resource_target0_EA0FDB3C": { + "arn": "test-target-arn", + "batch_target": { + "array_size": 1, + "job_attempts": 1, + "job_definition": "test-job-definition", + "job_name": "test-job-name" + }, + "dead_letter_config": { + "arn": "test-target-dead-letter-config-arn" + }, + "ecs_target": { + "capacity_provider_strategy": [ + { + "base": 1, + "capacity_provider": "test-target-ecs-capacity-provider", + "weight": 1 + } + ], + "enable_ecs_managed_tags": true, + "enable_execute_command": true, + "group": "test-target-ecs-group", + "launch_type": "test-target-ecs-launch-type", + "network_configuration": { + "assign_public_ip": true, + "security_groups": [ + "test-target-ecs-security-group" + ], + "subnets": [ + "test-target-ecs-subnet" + ] + }, + "ordered_placement_strategy": [ + { + "field": "test-target-ecs-placement-strategy-field", + "type": "test-target-ecs-placement-strategy-type" + } + ], + "placement_constraint": [ + { + "expression": "test-target-ecs-placement-constraint-expression", + "type": "test-target-ecs-placement-constraint-type" + } + ], + "platform_version": "test-target-ecs-platform-version", + "propagate_tags": "TASK_DEFINITION", + "tags": { + "test-target-ecs-tag-key": "test-target-ecs-tag-value" + }, + "task_count": 1, + "task_definition_arn": "test-target-ecs-task-definition-arn" + }, + "event_bus_name": "test-event-bus-name", + "http_target": { + "header_parameters": { + "test-header-parameter-key": "test-header-parameter-value" + }, + "path_parameter_values": [ + "test-path-parameter-value" + ], + "query_string_parameters": { + "test-query-string-parameter-key": "test-query-string-parameter-value" + } + }, + "input": "test-input", + "input_path": "test-input-path", + "input_transformer": { + "input_paths": { + "test-input-paths-map-key": "test-input-paths-map-value" + }, + "input_template": "test-input-template" + }, + "kinesis_target": { + "partition_key_path": "test-partition-key-path" + }, + "redshift_target": { + "database": "test-database", + "db_user": "test-db-user", + "secrets_manager_arn": "test-secret-manager-arn", + "sql": "test-sql", + "statement_name": "test-statement-name", + "with_event": true + }, + "retry_policy": { + "maximum_event_age_in_seconds": 1, + "maximum_retry_attempts": 1 + }, + "role_arn": "test-target-role-arn", + "rule": "\${aws_cloudwatch_event_rule.resource_22C949BF.id}", + "run_command_targets": [ + { + "key": "test-run-command-target-key", + "values": [ + "test-run-command-target-value" + ] + } + ], + "sagemaker_pipeline_target": { + "pipeline_parameter_list": [ + { + "name": "test-pipeline-parameter-name", + "value": "test-pipeline-parameter-value" + } + ] + }, + "sqs_target": { + "message_group_id": "test-message-group-id" + }, + "target_id": "test-target-id" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_cloudwatch_event_rule.resource_22C949BF.arn}", + "type": "string" + } + } +}" +`; diff --git a/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap b/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap index 23f16d7..9cfc658 100644 --- a/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/lambda.spec.ts.snap @@ -44,6 +44,7 @@ exports[`Lambda mappings > Should map AWS::Lambda::EventSourceMapping 1`] = ` "function_response_types": [ "functionResponseTypes" ], + "kms_key_arn": "kmsKeyArn", "maximum_batching_window_in_seconds": 1, "maximum_record_age_in_seconds": 1, "maximum_retry_attempts": 1, @@ -121,8 +122,7 @@ exports[`Lambda mappings > Should map AWS::Lambda::LayerVersion 1`] = ` "license_info": "my-license", "s3_bucket": "my-bucket", "s3_key": "my-key", - "s3_object_version": "my-version", - "skip_destroy": true + "s3_object_version": "my-version" } } }, @@ -165,7 +165,6 @@ exports[`Lambda mappings > Should map AWS::Lambda::LayerVersionPermission 1`] = "layer_name": "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1", "organization_id": "o-123456", "principal": "123456789012", - "skip_destroy": true, "statement_id": "teststackawstackresourceC278F851", "version_number": "\${tonumber(element(split(\\":\\", \\"arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1\\"), 7))}" } @@ -238,3 +237,251 @@ exports[`Lambda mappings > Should map AWS::Lambda::Permission 1`] = ` } }" `; + +exports[`Lambda mappings > should map CfnFunction to LambdaFunction 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_lambda_function": { + "resource_22C949BF": { + "architectures": [ + "x86_64" + ], + "code_signing_config_arn": "codeSigningConfigArn", + "dead_letter_config": { + "target_arn": "targetArn" + }, + "description": "description", + "environment": { + "variables": { + "key": "value" + } + }, + "ephemeral_storage": { + "size": 1 + }, + "file_system_config": { + "arn": "arn", + "local_mount_path": "localMountPath" + }, + "function_name": "functionName", + "handler": "handler", + "image_config": { + "command": [ + "command" + ], + "entry_point": [ + "entryPoint" + ], + "working_directory": "workingDirectory" + }, + "image_uri": "imageUri", + "kms_key_arn": "kmsKeyArn", + "layers": [ + "layers" + ], + "logging_config": { + "application_log_level": "applicationLogLevel", + "log_format": "logFormat", + "log_group": "logGroup", + "system_log_level": "systemLogLevel" + }, + "memory_size": 1, + "package_type": "packageType", + "publish": true, + "reserved_concurrent_executions": 1, + "role": "role", + "runtime": "runtime", + "s3_bucket": "s3Bucket", + "s3_key": "s3Key", + "s3_object_version": "s3ObjectVersion", + "snap_start": { + "apply_on": "1" + }, + "tags": { + "key": "value" + }, + "timeout": 1, + "tracing_config": { + "mode": "Active" + }, + "vpc_config": { + "ipv6_allowed_for_dual_stack": true, + "security_group_ids": [ + "securityGroupIds" + ], + "subnet_ids": [ + "subnetIds" + ] + } + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_lambda_function.resource_22C949BF.arn, \\",\\", \\"[object Object]\\", \\",\\", aws_lambda_function.resource_22C949BF.snap_start[0].apply_on, \\",\\", aws_lambda_function.resource_22C949BF.snap_start[0].optimization_status])}", + "type": "string" + } + } +}" +`; + +exports[`Lambda mappings > should map CfnFunction with inline zip file to LambdaFunction 1`] = ` +"{ + "provider": { + "archive": [ + { + } + ], + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "archive_file": { + "resource_inline-zip-archive_3EB43928": { + "output_path": "/var/folders/xq/d7cqhy255z12lx4c5kvwgrsm0000gn/T/c8f445aafa04b954f73da3e7bb70b92b9587014103.zip", + "provider": "archive", + "source": [ + { + "content": "zipFile", + "filename": "index.js" + } + ], + "type": "zip" + } + }, + "aws_lambda_function": { + "resource_22C949BF": { + "architectures": [ + "x86_64" + ], + "code_signing_config_arn": "codeSigningConfigArn", + "dead_letter_config": { + "target_arn": "targetArn" + }, + "description": "description", + "environment": { + "variables": { + "key": "value" + } + }, + "ephemeral_storage": { + "size": 1 + }, + "file_system_config": { + "arn": "arn", + "local_mount_path": "localMountPath" + }, + "function_name": "functionName", + "handler": "handler", + "image_config": { + "command": [ + "command" + ], + "entry_point": [ + "entryPoint" + ], + "working_directory": "workingDirectory" + }, + "image_uri": "imageUri", + "kms_key_arn": "kmsKeyArn", + "layers": [ + "layers" + ], + "logging_config": { + "application_log_level": "applicationLogLevel", + "log_format": "logFormat", + "log_group": "logGroup", + "system_log_level": "systemLogLevel" + }, + "memory_size": 1, + "package_type": "packageType", + "publish": true, + "reserved_concurrent_executions": 1, + "role": "role", + "runtime": "runtime", + "s3_bucket": "\${aws_s3_object.resource_inline-zip-object_57BC8C94.bucket}", + "s3_key": "\${aws_s3_object.resource_inline-zip-object_57BC8C94.key}", + "s3_object_version": "\${aws_s3_object.resource_inline-zip-object_57BC8C94.version_id}", + "snap_start": { + "apply_on": "1" + }, + "tags": { + "key": "value" + }, + "timeout": 1, + "tracing_config": { + "mode": "Active" + }, + "vpc_config": { + "ipv6_allowed_for_dual_stack": true, + "security_group_ids": [ + "securityGroupIds" + ], + "subnet_ids": [ + "subnetIds" + ] + } + } + }, + "aws_s3_bucket": { + "AssetBucket": { + } + }, + "aws_s3_object": { + "resource_inline-zip-object_57BC8C94": { + "bucket": "\${aws_s3_bucket.AssetBucket.bucket}", + "key": "c8f445aafa04b954f73da3e7bb70b92b9587014103-inline-zip-object", + "source": "\${archive_file.resource_inline-zip-archive_3EB43928.output_path}" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "archive": { + "source": "hashicorp/archive", + "version": "2.6.0" + }, + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_lambda_function.resource_22C949BF.arn, \\",\\", \\"[object Object]\\", \\",\\", aws_lambda_function.resource_22C949BF.snap_start[0].apply_on, \\",\\", aws_lambda_function.resource_22C949BF.snap_start[0].optimization_status])}", + "type": "string" + } + } +}" +`; diff --git a/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap b/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap index 616f7e9..30eff57 100644 --- a/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/logs.spec.ts.snap @@ -14,6 +14,7 @@ exports[`Logs mappings > Should map AWS::Logs::LogGroup 1`] = ` "aws_cloudwatch_log_group": { "resource_22C949BF": { "kms_key_id": "test-kms-key-id", + "log_group_class": "test-log-group-class", "name": "test-log-group-name", "retention_in_days": 1, "tags": { diff --git a/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap b/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap new file mode 100644 index 0000000..edf2cc3 --- /dev/null +++ b/src/__tests__/mappings/__snapshots__/sns.spec.ts.snap @@ -0,0 +1,126 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`SNS mappings > AWS:SNS:Subscription > should translate 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_sns_topic_subscription": { + "resource_22C949BF": { + "delivery_policy": "\${jsonencode({\\"deliveryPolicy\\" = true})}", + "endpoint": "example-endpoint.example", + "filter_policy": "\${jsonencode({\\"filterPolicy\\" = false})}", + "filter_policy_scope": "FilterPolicyScope", + "protocol": "https", + "raw_message_delivery": true, + "redrive_policy": "\${jsonencode({\\"redrivePolicy\\" = true})}", + "replay_policy": "\${jsonencode({\\"replayPolicy\\" = true})}", + "subscription_role_arn": "SubscriptionRoleArn", + "topic_arn": "ExampleArn" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sns_topic_subscription.resource_22C949BF.arn, \\",\\", aws_sns_topic_subscription.resource_22C949BF.id])}", + "type": "string" + } + } +}" +`; + +exports[`SNS mappings > AWS:SNS:Topic > Should translate 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_sns_topic": { + "resource_22C949BF": { + "application_failure_feedback_role_arn": "FailureFeedbackRoleArnapplication", + "application_success_feedback_role_arn": "SuccessFeedbackRoleArnapplication", + "application_success_feedback_sample_rate": 4, + "archive_policy": "\${jsonencode({\\"archivePolicy\\" = true})}", + "content_based_deduplication": true, + "display_name": "ExampleDisplayName", + "fifo_topic": true, + "firehose_failure_feedback_role_arn": "FailureFeedbackRoleArnfirehose", + "firehose_success_feedback_role_arn": "SuccessFeedbackRoleArnfirehose", + "firehose_success_feedback_sample_rate": 5, + "http_failure_feedback_role_arn": "FailureFeedbackRoleArnHttps", + "http_success_feedback_role_arn": "SuccessFeedbackRoleArnHttps", + "http_success_feedback_sample_rate": 1, + "kms_master_key_id": "ExampleKmsMasterKeyId", + "lambda_failure_feedback_role_arn": "FailureFeedbackRoleArnlambda", + "lambda_success_feedback_role_arn": "SuccessFeedbackRoleArnlambda", + "lambda_success_feedback_sample_rate": 3, + "name": "ExampleTopic", + "signature_version": 1, + "sqs_failure_feedback_role_arn": "FailureFeedbackRoleArnsqs", + "sqs_success_feedback_role_arn": "SuccessFeedbackRoleArnsqs", + "sqs_success_feedback_sample_rate": 2, + "tags": { + "ExampleKey": "ExampleValue" + }, + "tracing_config": "PASSTHROUGH" + } + }, + "aws_sns_topic_data_protection_policy": { + "resource_resource-data-protection-policy_668B61E5": { + "arn": "\${aws_sns_topic.resource_22C949BF.arn}", + "policy": "\${jsonencode({\\"dataProtectionPolicy\\" = true})}" + } + }, + "aws_sns_topic_subscription": { + "resource_subscription-https-example-endpointexample_78A1AFFF": { + "endpoint": "example-endpoint.example", + "protocol": "https", + "topic_arn": "\${aws_sns_topic.resource_22C949BF.arn}" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sns_topic.resource_22C949BF.arn, \\",\\", aws_sns_topic.resource_22C949BF.name])}", + "type": "string" + } + } +}" +`; diff --git a/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap b/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap new file mode 100644 index 0000000..68b1908 --- /dev/null +++ b/src/__tests__/mappings/__snapshots__/sqs.spec.ts.snap @@ -0,0 +1,88 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`SQS mappings > AWS:SQS:QueuePolicy > should translate to multiple SqsQueuePolicy 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_sqs_queue_policy": { + "resource_22C949BF": { + "depends_on": [ + "aws_sqs_queue_policy.resource_resource0_0E1F9B69" + ], + "policy": "\${jsonencode({\\"read\\" = true})}", + "queue_url": "https://sqs:us-east-2.amazonaws.com/444455556666/queue2" + }, + "resource_resource0_0E1F9B69": { + "policy": "\${jsonencode({\\"read\\" = true})}", + "queue_url": "https://sqs:us-east-2.amazonaws.com/444455556666/queue1" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_sqs_queue_policy.resource_22C949BF.id}", + "type": "string" + } + } +}" +`; + +exports[`SQS mappings > AWS:SQS:QueuePolicy > should translate to single SqsQueuePolicy 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_sqs_queue_policy": { + "resource_22C949BF": { + "policy": "\${jsonencode({\\"read\\" = true})}", + "queue_url": "https://sqs:us-east-2.amazonaws.com/444455556666/queue1" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${aws_sqs_queue_policy.resource_22C949BF.id}", + "type": "string" + } + } +}" +`; diff --git a/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap b/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap index f2e9c17..1346065 100644 --- a/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap +++ b/src/__tests__/mappings/__snapshots__/stepfunctions.spec.ts.snap @@ -1,12 +1,71 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with Object definition 1`] = ` +"{ + "provider": { + "aws": [ + { + "alias": "us_east_1", + "region": "us-east-1" + } + ] + }, + "resource": { + "aws_sfn_state_machine": { + "resource_22C949BF": { + "definition": "\${replace(replace(jsonencode({\\"StartAt\\" = \\"HelloWorld\\"}), \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "encryption_configuration": { + "kms_data_key_reuse_period_seconds": 123, + "kms_key_id": "kmsKeyId", + "type": "KMS" + }, + "logging_configuration": { + "include_execution_data": true, + "level": "ALL", + "log_destination": "logGroupArn:*" + }, + "name": "name", + "role_arn": "roleArn", + "tags": { + "key": "value" + }, + "tracing_configuration": { + "enabled": true + }, + "type": "STANDARD" + } + } + }, + "terraform": { + "backend": { + "local": { + "path": "/terraform.test-stack.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.65.0" + } + } + }, + "variable": { + "resource_refs_CDA17697": { + "default": "\${join(\\"\\", [aws_sfn_state_machine.resource_22C949BF.arn, \\",\\", aws_sfn_state_machine.resource_22C949BF.name, \\",\\", aws_sfn_state_machine.resource_22C949BF.revision_id])}", + "type": "string" + } + } +}" +`; + exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with S3 definition 1`] = ` "{ "data": { "aws_s3_bucket_object": { "resource_resource-definition_AA6652B4": { "bucket": "bucket", - "key": "key" + "key": "key", + "version_id": "version" } } }, @@ -21,7 +80,12 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans "resource": { "aws_sfn_state_machine": { "resource_22C949BF": { - "definition": "\${data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body}", + "definition": "\${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "encryption_configuration": { + "kms_data_key_reuse_period_seconds": 123, + "kms_key_id": "kmsKeyId", + "type": "KMS" + }, "logging_configuration": { "include_execution_data": true, "level": "ALL", @@ -74,7 +138,12 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans "resource": { "aws_sfn_state_machine": { "resource_22C949BF": { - "definition": "\${join(\\"\\", [\\"{\\\\\\"StartAt\\\\\\": \\\\\\"HelloWorld\\\\\\", \\\\\\"States\\\\\\": {}}\\"])}", + "definition": "\${replace(replace(join(\\"\\", [\\"{\\\\\\"StartAt\\\\\\": \\\\\\"HelloWorld\\\\\\", \\\\\\"States\\\\\\": {}}\\"]), \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "encryption_configuration": { + "kms_data_key_reuse_period_seconds": 123, + "kms_key_id": "kmsKeyId", + "type": "KMS" + }, "logging_configuration": { "include_execution_data": true, "level": "ALL", @@ -116,14 +185,6 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should translate with definition substitutions 1`] = ` "{ - "data": { - "aws_s3_bucket_object": { - "resource_resource-definition_AA6652B4": { - "bucket": "bucket", - "key": "key" - } - } - }, "provider": { "aws": [ { @@ -135,7 +196,12 @@ exports[`Step Functions mappings > AWS:StepFunctions:StateMachine > Should trans "resource": { "aws_sfn_state_machine": { "resource_22C949BF": { - "definition": "\${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "definition": "\${replace(replace(jsonencode({\\"StartAt\\" = \\"HelloWorld\\"}), \\"$\${MyFunction}\\", \\"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\\"), \\"$\${Task}\\", \\"TaskType\\")}", + "encryption_configuration": { + "kms_data_key_reuse_period_seconds": 123, + "kms_key_id": "kmsKeyId", + "type": "KMS" + }, "logging_configuration": { "include_execution_data": true, "level": "ALL", diff --git a/src/__tests__/mappings/apigateway.spec.ts b/src/__tests__/mappings/apigateway.spec.ts index 292ecf9..5ba1e39 100644 --- a/src/__tests__/mappings/apigateway.spec.ts +++ b/src/__tests__/mappings/apigateway.spec.ts @@ -43,6 +43,16 @@ describe("Apigateway mappings", () => { stageName: "stage-name", description: "description", stageDescription: { + description: "description", + variables: { + "stage-variable": "stage-variable-value", + }, + tags: [ + { + key: "tag", + value: "tag-value", + }, + ], creationStack: ["stack"], cacheClusterEnabled: true, cacheClusterSize: "cache-cluster-size", @@ -51,9 +61,11 @@ describe("Apigateway mappings", () => { stageVariableOverrides: { "stage-variable": "stage-variable-value", }, + useStageCache: true, }, accessLogSetting: { destinationArn: "destination-arn", + format: "format", }, cacheDataEncrypted: true, cacheTtlInSeconds: 60, @@ -94,6 +106,10 @@ describe("Apigateway mappings", () => { { typeName: "AWS::ApiGateway::Deployment", desiredState: expect.stringContaining(""), + roleArn: undefined, + typeVersionId: undefined, + schema: undefined, + timeouts: undefined, }, ); }); @@ -104,6 +120,7 @@ describe("Apigateway mappings", () => { { accessLogSetting: { destinationArn: "destination-arn", + format: "format", }, cacheClusterEnabled: true, cacheClusterSize: "cache-cluster-size", @@ -112,6 +129,8 @@ describe("Apigateway mappings", () => { stageVariableOverrides: { "stage-variable": "stage-variable-value", }, + deploymentId: "deployment-id", + useStageCache: true, }, clientCertificateId: "client-certificate-id", stageName: "stage-name", @@ -121,11 +140,24 @@ describe("Apigateway mappings", () => { methodSettings: [], restApiId: "rest-api-id", deploymentId: "deployment-id", + tags: [ + { + key: "tag", + value: "tag-value", + }, + ], + variables: { + "stage-variable": "stage-variable-value", + }, }, CloudcontrolapiResource, { typeName: "AWS::ApiGateway::Stage", desiredState: expect.stringContaining(""), + roleArn: undefined, + schema: undefined, + timeouts: undefined, + typeVersionId: undefined, }, ); }); @@ -146,7 +178,6 @@ describe("Apigateway mappings", () => { basePath: "base-path", domainName: "domain-name", stageName: "stage", - id: "id", }, ); }); @@ -177,16 +208,25 @@ describe("Apigateway mappings", () => { routeSettings: { DataTraceEnabled: true, RouteKey: "route-key", + DetailedMetricsEnabled: true, + LoggingLevel: "logging-level", + ThrottlingBurstLimit: 60, + ThrottlingRateLimit: 60, }, tags: { "tag": "tag-value", }, + accessPolicyId: "access-policy-id", }, Apigatewayv2Stage, { routeSettings: [{ dataTraceEnabled: true, routeKey: "route-key", + detailedMetricsEnabled: true, + loggingLevel: "logging-level", + throttlingBurstLimit: 60, + throttlingRateLimit: 60, }], tags: { "tag": "tag-value", @@ -212,6 +252,7 @@ describe("Apigateway mappings", () => { throttlingRateLimit: 60, }, }, + ["accessPolicyId"], ); itShouldMapCfnElementToTerraformResource( @@ -222,8 +263,7 @@ describe("Apigateway mappings", () => { certificateArn: "certificate-arn", endpointType: "REGIONAL", securityPolicy: "TLS_1_2", - // This property is not supported by terraform - // certificateName: "certificate-name", + certificateName: "certificate-name", ownershipVerificationCertificateArn: "ownership-verification-certificate-arn", }], mutualTlsAuthentication: { @@ -250,7 +290,9 @@ describe("Apigateway mappings", () => { securityPolicy: "TLS_1_2", ownershipVerificationCertificateArn: "ownership-verification-certificate-arn", }, + timeouts: undefined, }, + ["domainNameConfigurations.*.certificateName"], ); itShouldMapCfnElementToTerraformResource( @@ -327,6 +369,7 @@ describe("Apigateway mappings", () => { itShouldMapCfnElementToTerraformResource( CfnAuthorizerV2, { + identityValidationExpression: "identity-validation-expression", apiId: "api-id", authorizerCredentialsArn: "authorizer-credentials-arn", authorizerPayloadFormatVersion: "authorizer-payload-format-version", @@ -356,7 +399,9 @@ describe("Apigateway mappings", () => { authorizerResultTtlInSeconds: 60, authorizerType: "authorizer-type", authorizerUri: "authorizer-uri", + timeouts: undefined, }, + ["identityValidationExpression"], ); itShouldMapCfnElementToTerraformResource( diff --git a/src/__tests__/mappings/appsync.spec.ts b/src/__tests__/mappings/appsync.spec.ts index c538c7f..e22fe23 100644 --- a/src/__tests__/mappings/appsync.spec.ts +++ b/src/__tests__/mappings/appsync.spec.ts @@ -86,13 +86,32 @@ describe("Appsync mappings", () => { fieldLogLevel: "field-log-level", }, xrayEnabled: true, - // FIXME: uncomment when supported by the provider - // ownerContact: "owner-contact", - // mergedApiExecutionRoleArn: "merged-api-execution-role-arn", - // apiType: "GRAPHQL", + ownerContact: "owner-contact", + mergedApiExecutionRoleArn: "merged-api-execution-role-arn", + apiType: "GRAPHQL", + enhancedMetricsConfig: { + operationLevelMetricsConfig: "test-operation-level-metrics-config", + dataSourceLevelMetricsBehavior: "test-data-source-level-metrics-behavior", + resolverLevelMetricsBehavior: "test-resolver-level-metrics-behavior", + }, + environmentVariables: { + test: "test", + }, + introspectionConfig: "test-introspection-config", + queryDepthLimit: 60, + resolverCountLimit: 68, }, AppsyncGraphqlApi, { + schema: undefined, + introspectionConfig: "test-introspection-config", + queryDepthLimit: 60, + resolverCountLimit: 68, + enhancedMetricsConfig: { + operationLevelMetricsConfig: "test-operation-level-metrics-config", + dataSourceLevelMetricsBehavior: "test-data-source-level-metrics-behavior", + resolverLevelMetricsBehavior: "test-resolver-level-metrics-behavior", + }, name: "api-name", visibility: "PUBLIC", authenticationType: "API_KEY", @@ -144,6 +163,7 @@ describe("Appsync mappings", () => { "tag-key": "tag-value", }, }, + ["ownerContact", "apiType", "mergedApiExecutionRoleArn", "environmentVariables"], ); }); @@ -204,6 +224,7 @@ describe("Appsync mappings", () => { synthesizeElementAndTestStability( CfnDataSource, { + metricsConfig: "metrics-config", name: "name", apiId: "api-id", description: "description", @@ -308,6 +329,7 @@ describe("Appsync mappings", () => { region: "aws-region", }, }, + ["metricsConfig"], ); }); @@ -315,6 +337,7 @@ describe("Appsync mappings", () => { synthesizeElementAndTestStability( CfnResolver, { + metricsConfig: "metrics-config", apiId: "api-id", dataSourceName: "data-source-name", code: "code", @@ -343,9 +366,9 @@ describe("Appsync mappings", () => { typeName: "type-name", responseMappingTemplate: "response-mapping-template", // FIXME: uncomment when supported by the mapper - // codeS3Location: "code-s3-location", - // requestMappingTemplateS3Location: "request-mapping-template-s3-location", - // responseMappingTemplateS3Location: "response-mapping-template-s3-location", + codeS3Location: "code-s3-location", + requestMappingTemplateS3Location: "request-mapping-template-s3-location", + responseMappingTemplateS3Location: "response-mapping-template-s3-location", }, AppsyncResolver, { @@ -377,6 +400,12 @@ describe("Appsync mappings", () => { requestTemplate: "request-mapping-template", responseTemplate: "response-mapping-template", }, + [ + "requestMappingTemplateS3Location", + "responseMappingTemplateS3Location", + "codeS3Location", + "metricsConfig", + ], ); }); @@ -404,10 +433,9 @@ describe("Appsync mappings", () => { requestMappingTemplate: "request-mapping-template", responseMappingTemplate: "response-mapping-template", functionVersion: "function-version", - // FIXME: uncomment when supported by the mapper - // codeS3Location: "code-s3-location", - // requestMappingTemplateS3Location: "request-mapping-template-s3-location", - // responseMappingTemplateS3Location: "response-mapping-template-s3-location", + codeS3Location: "code-s3-location", + requestMappingTemplateS3Location: "request-mapping-template-s3-location", + responseMappingTemplateS3Location: "response-mapping-template-s3-location", }, AppsyncFunction, { @@ -432,6 +460,7 @@ describe("Appsync mappings", () => { conflictDetection: "conflict-detection", }, }, + ["codeS3Location", "requestMappingTemplateS3Location", "responseMappingTemplateS3Location"], ); }); diff --git a/src/__tests__/mappings/cloudfront.spec.ts b/src/__tests__/mappings/cloudfront.spec.ts index 281e5c1..d323d03 100644 --- a/src/__tests__/mappings/cloudfront.spec.ts +++ b/src/__tests__/mappings/cloudfront.spec.ts @@ -25,6 +25,17 @@ describe("CloudFront", () => { value: "my-distribution", }], distributionConfig: { + s3Origin: { + originAccessIdentity: "origin-access-identity/cloudfront/E127EXAMPLE51Z", + dnsName: "example.com", + }, + customOrigin: { + httpPort: 80, + httpsPort: 443, + originProtocolPolicy: "https-only", + originSslProtocols: ["TLSv1.2"], + dnsName: "example.com", + }, defaultCacheBehavior: { allowedMethods: ["GET", "HEAD"], cachedMethods: ["GET", "HEAD"], @@ -33,6 +44,7 @@ describe("CloudFront", () => { forwardedValues: { cookies: { forward: "none", + whitelistedNames: ["*"], }, queryString: false, headers: ["*"], @@ -86,6 +98,8 @@ describe("CloudFront", () => { }, }, viewerCertificate: { + iamCertificateId: "1234567890abcdef1234567890abcdef1234567890abcdef", + cloudFrontDefaultCertificate: true, acmCertificateArn: "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", minimumProtocolVersion: "TLSv1.2_2019", @@ -100,6 +114,7 @@ describe("CloudFront", () => { forwardedValues: { cookies: { forward: "none", + whitelistedNames: ["*"], }, queryString: false, headers: ["*"], @@ -133,7 +148,7 @@ describe("CloudFront", () => { ], }, ], - cnamEs: ["example.com"], + cnamEs: ["cnames.com"], continuousDeploymentPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", logging: { bucket: "my-logs.s3.amazonaws.com", @@ -164,7 +179,7 @@ describe("CloudFront", () => { }, webAclId: "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl", origins: [{ - domainName: "example.com", + domainName: "origins.com", id: "my-origin", connectionAttempts: 3, connectionTimeout: 10, @@ -179,6 +194,7 @@ describe("CloudFront", () => { originAccessControlId: "1234567890abcdef1234567890abcdef", originPath: "/mypath", originShield: { + originShieldRegion: "us-east-1", enabled: true, }, originCustomHeaders: [{ @@ -194,6 +210,8 @@ describe("CloudFront", () => { }, CloudfrontDistribution, { + retainOnDelete: undefined, + waitForDeployment: undefined, tags: { Name: "my-distribution", }, @@ -204,6 +222,7 @@ describe("CloudFront", () => { defaultTtl: 3600, forwardedValues: { cookies: { + whitelistedNames: ["*"], forward: "none", }, queryString: false, @@ -236,7 +255,7 @@ describe("CloudFront", () => { trustedSigners: ["1234567890abcdef1234567890abcdef"], viewerProtocolPolicy: "redirect-to-https", }, - aliases: ["example.com", "example.com"], + aliases: ["example.com", "cnames.com"], comment: "My CloudFront distribution", customErrorResponse: [ { @@ -262,6 +281,8 @@ describe("CloudFront", () => { "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", minimumProtocolVersion: "TLSv1.2_2019", sslSupportMethod: "sni-only", + iamCertificateId: "1234567890abcdef1234567890abcdef1234567890abcdef", + cloudfrontDefaultCertificate: true, }, orderedCacheBehavior: [ { @@ -272,6 +293,7 @@ describe("CloudFront", () => { forwardedValues: { cookies: { forward: "none", + whitelistedNames: ["*"], }, queryString: false, headers: ["*"], @@ -341,11 +363,12 @@ describe("CloudFront", () => { originReadTimeout: 30, originSslProtocols: ["TLSv1.2"], }, - domainName: "example.com", + domainName: "origins.com", originAccessControlId: "1234567890abcdef1234567890abcdef", originId: "my-origin", originPath: "/mypath", originShield: { + originShieldRegion: "us-east-1", enabled: true, }, s3OriginConfig: { @@ -355,12 +378,114 @@ describe("CloudFront", () => { ], staging: true, }, + ["distributionConfig.s3Origin", "distributionConfig.customOrigin"], ); itShouldMapCfnElementToTerraformResource( CfnDistribution, { + tags: [{ + key: "Name", + value: "my-distribution", + }], distributionConfig: { + s3Origin: { + originAccessIdentity: "origin-access-identity/cloudfront/E127EXAMPLE51Z", + dnsName: "example.com", + }, + customOrigin: { + httpPort: 80, + httpsPort: 443, + originProtocolPolicy: "https-only", + originSslProtocols: ["TLSv1.2"], + dnsName: "example.com", + }, + comment: "My CloudFront distribution", + customErrorResponses: [{ + errorCode: 404, + responseCode: 200, + responsePagePath: "/index.html", + errorCachingMinTtl: 300, + }], + defaultRootObject: "index.html", + httpVersion: "http2", + ipv6Enabled: true, + priceClass: "PriceClass_100", + aliases: ["aliases.com"], + continuousDeploymentPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + logging: { + bucket: "my-logs.s3.amazonaws.com", + includeCookies: true, + prefix: "myprefix", + }, + webAclId: "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl", + staging: true, + originGroups: { + items: [ + { + id: "my-origin-group", + failoverCriteria: { + statusCodes: { + items: [500, 502], + quantity: 2, + }, + }, + members: { + items: [ + { + originId: "my-origin", + }, + ], + quantity: 1, + }, + }, + ], + quantity: 1, + }, + cnamEs: ["example.com"], + cacheBehaviors: [ + { + allowedMethods: ["GET", "HEAD"], + cachedMethods: ["GET", "HEAD"], + compress: true, + defaultTtl: 3600, + forwardedValues: { + cookies: { + forward: "none", + whitelistedNames: ["*"], + }, + queryString: false, + headers: ["*"], + queryStringCacheKeys: ["*"], + }, + cachePolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + lambdaFunctionAssociations: [ + { + eventType: "origin-request", + lambdaFunctionArn: "arn:aws:lambda:us-east-1:111111111111:function:my-function", + includeBody: true, + }, + ], + fieldLevelEncryptionId: "1234567890abcdef1234567890abcdef", + maxTtl: 86400, + minTtl: 0, + originRequestPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + pathPattern: "/images/*", + realtimeLogConfigArn: "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + responseHeadersPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + smoothStreaming: true, + targetOriginId: "my-target-origin", + trustedKeyGroups: ["1234567890abcdef1234567890abcdef"], + functionAssociations: [ + { + eventType: "viewer-request", + functionArn: "arn:aws:lambda:us-east-1:111111111111:function:my-function", + }, + ], + trustedSigners: ["123"], + viewerProtocolPolicy: "redirect-to-https", + }, + ], defaultCacheBehavior: { allowedMethods: ["GET", "HEAD"], cachedMethods: ["GET", "HEAD"], @@ -368,6 +493,7 @@ describe("CloudFront", () => { defaultTtl: 3600, forwardedValues: { cookies: { + whitelistedNames: ["*"], forward: "none", }, queryString: false, @@ -412,8 +538,18 @@ describe("CloudFront", () => { "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", minimumProtocolVersion: "TLSv1.2_2019", sslSupportMethod: "sni-only", + iamCertificateId: "1234567890abcdef1234567890abcdef1234567890abcdef", + cloudFrontDefaultCertificate: true, }, origins: [{ + customOriginConfig: { + httpPort: 80, + httpsPort: 443, + originKeepaliveTimeout: 5, + originProtocolPolicy: "https-only", + originReadTimeout: 30, + originSslProtocols: ["TLSv1.2"], + }, domainName: "example.com", id: "my-origin", connectionAttempts: 3, @@ -421,6 +557,7 @@ describe("CloudFront", () => { originAccessControlId: "1234567890abcdef1234567890abcdef", originPath: "/mypath", originShield: { + originShieldRegion: "us-east-1", enabled: true, }, originCustomHeaders: [{ @@ -435,6 +572,89 @@ describe("CloudFront", () => { }, CloudfrontDistribution, { + tags: { + Name: "my-distribution", + }, + aliases: ["aliases.com", "example.com"], + comment: "My CloudFront distribution", + customErrorResponse: [ + { + errorCode: 404, + responseCode: 200, + responsePagePath: "/index.html", + errorCachingMinTtl: 300, + }, + ], + defaultRootObject: "index.html", + httpVersion: "http2", + isIpv6Enabled: true, + priceClass: "PriceClass_100", + continuousDeploymentPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + loggingConfig: { + bucket: "my-logs.s3.amazonaws.com", + includeCookies: true, + prefix: "myprefix", + }, + webAclId: "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/my-web-acl", + staging: true, + waitForDeployment: undefined, + retainOnDelete: undefined, + originGroup: [ + { + failoverCriteria: { + statusCodes: [500, 502], + }, + member: [ + { + originId: "my-origin", + }, + ], + originId: "my-origin-group", + }, + ], + orderedCacheBehavior: [ + { + allowedMethods: ["GET", "HEAD"], + cachedMethods: ["GET", "HEAD"], + compress: true, + defaultTtl: 3600, + forwardedValues: { + cookies: { + forward: "none", + whitelistedNames: ["*"], + }, + queryString: false, + headers: ["*"], + queryStringCacheKeys: ["*"], + }, + cachePolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + lambdaFunctionAssociation: [ + { + eventType: "origin-request", + lambdaArn: "arn:aws:lambda:us-east-1:111111111111:function:my-function", + includeBody: true, + }, + ], + fieldLevelEncryptionId: "1234567890abcdef1234567890abcdef", + maxTtl: 86400, + minTtl: 0, + originRequestPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + pathPattern: "/images/*", + realtimeLogConfigArn: "arn:aws:logs:us-east-1:111111111111:realtime-log-config/my-distribution", + responseHeadersPolicyId: "658327ea-f89d-4fab-a63d-7e88639e58f6", + smoothStreaming: true, + targetOriginId: "my-target-origin", + viewerProtocolPolicy: "redirect-to-https", + trustedKeyGroups: ["1234567890abcdef1234567890abcdef"], + trustedSigners: ["123"], + functionAssociation: [ + { + eventType: "viewer-request", + functionArn: "arn:aws:lambda:us-east-1:111111111111:function:my-function", + }, + ], + }, + ], defaultCacheBehavior: { allowedMethods: ["GET", "HEAD"], cachedMethods: ["GET", "HEAD"], @@ -443,6 +663,7 @@ describe("CloudFront", () => { forwardedValues: { cookies: { forward: "none", + whitelistedNames: ["*"], }, queryString: false, headers: ["*"], @@ -482,6 +703,8 @@ describe("CloudFront", () => { }, }, viewerCertificate: { + iamCertificateId: "1234567890abcdef1234567890abcdef1234567890abcdef", + cloudfrontDefaultCertificate: true, acmCertificateArn: "arn:aws:acm:us-east-1:111111111111:certificate/12345678-1234-1234-1234-123456789012", minimumProtocolVersion: "TLSv1.2_2019", @@ -502,13 +725,23 @@ describe("CloudFront", () => { originId: "my-origin", originPath: "/mypath", originShield: { + originShieldRegion: "us-east-1", enabled: true, }, s3OriginConfig: { originAccessIdentity: "origin-access-identity/cloudfront/E127EXAMPLE51Z", }, + customOriginConfig: { + httpPort: 80, + httpsPort: 443, + originKeepaliveTimeout: 5, + originProtocolPolicy: "https-only", + originReadTimeout: 30, + originSslProtocols: ["TLSv1.2"], + }, }, ], }, + ["distributionConfig.s3Origin", "distributionConfig.customOrigin"], ); }); diff --git a/src/__tests__/mappings/cognito.spec.ts b/src/__tests__/mappings/cognito.spec.ts index 85a5f13..2748c85 100644 --- a/src/__tests__/mappings/cognito.spec.ts +++ b/src/__tests__/mappings/cognito.spec.ts @@ -153,7 +153,7 @@ describe("Cognito mappings", () => { { value: "value", key: "key", - } + }, ], cognitoIdentityProviders: [ { @@ -169,25 +169,25 @@ describe("Cognito mappings", () => { "login-provider": "login-provider", }, openIdConnectProviderArns: ["open-id-connect-provider-arn"], - // FIXME: this is not supported by the provider yet - cognitoEvents: undefined, - pushSync: undefined, - cognitoStreams: undefined, - // cognitoEvents: { - // "event": "event", - // }, - // pushSync: { - // roleArn: "role-arn", - // applicationArns: ["application-arn"], - // }, - // cognitoStreams: { - // roleArn: "role-arn", - // streamName: "stream-name", - // streamingStatus: "ENABLED", - // }, + cognitoEvents: { + "event": "event", + }, + pushSync: { + roleArn: "role-arn", + applicationArns: ["application-arn"], + }, + cognitoStreams: { + roleArn: "role-arn", + streamName: "stream-name", + streamingStatus: "ENABLED", + }, }, CognitoIdentityPool, { + tags: { + key: "value", + }, + openidConnectProviderArns: ["open-id-connect-provider-arn"], allowClassicFlow: true, allowUnauthenticatedIdentities: true, cognitoIdentityProviders: [ @@ -204,6 +204,7 @@ describe("Cognito mappings", () => { "login-provider": "login-provider", }, }, + ["cognitoEvents", "pushSync", "cognitoStreams"], ); }); @@ -236,16 +237,13 @@ describe("Cognito mappings", () => { emailSubject: "email-subject", smsMessage: "sms-message", }, - // This is not supported by the provider yet - unusedAccountValidityDays: undefined, + unusedAccountValidityDays: 60, }, mfaConfiguration: "ON", userPoolAddOns: { - // This is not supported by the provider yet - advancedSecurityAdditionalFlows: undefined, - // advancedSecurityAdditionalFlows: { - // customAuthMode: "custom-auth-mode", - // }, + advancedSecurityAdditionalFlows: { + customAuthMode: "custom-auth-mode", + }, advancedSecurityMode: "OFF", }, accountRecoverySetting: { @@ -272,6 +270,10 @@ describe("Cognito mappings", () => { emailVerificationMessage: "email-verification-message", emailVerificationSubject: "email-verification-subject", lambdaConfig: { + preTokenGenerationConfig: { + lambdaArn: "lambda-arn", + lambdaVersion: "lambda-version", + }, createAuthChallenge: "create-auth-challenge", customMessage: "custom-message", defineAuthChallenge: "define-auth-challenge", @@ -308,6 +310,7 @@ describe("Cognito mappings", () => { requireSymbols: true, requireUppercase: true, minimumLength: 60, + passwordHistorySize: 60, }, }, verificationMessageTemplate: { @@ -372,6 +375,7 @@ describe("Cognito mappings", () => { requireSymbols: true, requireUppercase: true, temporaryPasswordValidityDays: 60, + passwordHistorySize: 60, }, smsVerificationMessage: undefined, verificationMessageTemplate: { @@ -439,11 +443,16 @@ describe("Cognito mappings", () => { lambdaArn: "lambda-arn", lambdaVersion: "lambda-version", }, + preTokenGenerationConfig: { + lambdaArn: "lambda-arn", + lambdaVersion: "lambda-version", + }, }, userPoolAddOns: { advancedSecurityMode: "OFF", }, }, + ["adminCreateUserConfig.unusedAccountValidityDays", "userPoolAddOns.advancedSecurityAdditionalFlows"], ); }); }); diff --git a/src/__tests__/mappings/dynamodb.spec.ts b/src/__tests__/mappings/dynamodb.spec.ts index bfe71a8..b97838a 100644 --- a/src/__tests__/mappings/dynamodb.spec.ts +++ b/src/__tests__/mappings/dynamodb.spec.ts @@ -45,6 +45,10 @@ describe("DynamoDB mappings", () => { readCapacityUnits: 1, writeCapacityUnits: 1, }, + onDemandThroughput: { + maxReadRequestUnits: 1, + maxWriteRequestUnits: 1, + }, }, ], resourcePolicy: { @@ -78,6 +82,21 @@ describe("DynamoDB mappings", () => { }, streamSpecification: { streamViewType: "NEW_IMAGE", + resourcePolicy: { + policyDocument: { + Version: "2012-10-17", + Statement: [ + { + Effect: "Allow", + Principal: { + Service: "dynamodb.amazonaws.com", + }, + Action: "dynamodb:DescribeTable", + Resource: "*", + }, + ], + }, + }, }, attributeDefinitions: [ { @@ -111,15 +130,14 @@ describe("DynamoDB mappings", () => { sseSpecification: { sseEnabled: true, kmsMasterKeyId: "test-kms-master-key-id", - // TODO: Uncomment when KMS is supported - sseType: undefined - // sseType: "KMS", + sseType: "KMS", }, contributorInsightsSpecification: { enabled: true, }, deletionProtectionEnabled: true, kinesisStreamSpecification: { + approximateCreationDateTimePrecision: "MILLISECONDS", streamArn: "test-stream-arn", }, importSourceSpecification: { @@ -137,9 +155,19 @@ describe("DynamoDB mappings", () => { }, }, }, + onDemandThroughput: { + maxReadRequestUnits: 1, + maxWriteRequestUnits: 1, + }, }, DynamodbTable, { + replica: undefined, + restoreDateTime: undefined, + timeouts: undefined, + restoreSourceName: undefined, + restoreSourceTableArn: undefined, + restoreToLatestTime: undefined, tags: { Name: "test-table", }, @@ -205,5 +233,11 @@ describe("DynamoDB mappings", () => { }, streamEnabled: true, }, + [ + "onDemandThroughput", + "sseSpecification.sseType", + "globalSecondaryIndexes.*.onDemandThroughput", + "kinesisStreamSpecification.approximateCreationDateTimePrecision", + ], ); }); diff --git a/src/__tests__/mappings/ec2-vpc.spec.ts b/src/__tests__/mappings/ec2-vpc.spec.ts index 5a7fe93..d933a1c 100644 --- a/src/__tests__/mappings/ec2-vpc.spec.ts +++ b/src/__tests__/mappings/ec2-vpc.spec.ts @@ -37,7 +37,19 @@ describe("EC2 VPC mappings", () => { }); }); - itShouldMapCfnElementToTerraformResource(CfnInternetGateway, {}, InternetGateway, {}); + itShouldMapCfnElementToTerraformResource( + CfnInternetGateway, + { + tags: [ + { + key: "Name", + value: "test-internet-gateway", + }, + ], + }, + InternetGateway, + {}, + ); itShouldMapCfnElementToTerraformResource( CfnSubnetRouteTableAssociation, @@ -49,6 +61,8 @@ describe("EC2 VPC mappings", () => { { subnetId: "subnet-id", routeTableId: "route-table-id", + gatewayId: undefined, + timeouts: undefined, }, ); @@ -114,6 +128,8 @@ describe("EC2 VPC mappings", () => { coreNetworkArn: "core-network-arn", localGatewayId: "local-gateway-id", vpcEndpointId: "vpc-endpoint-id", + egressOnlyGatewayId: "egress-only-internet-gateway-id", + timeouts: undefined, }, ); @@ -153,9 +169,9 @@ describe("EC2 VPC mappings", () => { cidrIp: "10.0.0.0/16", cidrIpv6: "2001:db8:1234:1a00::/64", sourceSecurityGroupId: "source-security-group-id", + sourcePrefixListId: "source-prefix-list-id", sourceSecurityGroupName: "source-security-group-name", sourceSecurityGroupOwnerId: "source-security-group-owner-id", - sourcePrefixListId: "source-prefix-list-id", }, ], }, @@ -165,6 +181,7 @@ describe("EC2 VPC mappings", () => { description: "test-security-group-description", vpcId: "test-vpc-id", }, + ["securityGroupIngress.*.sourceSecurityGroupName", "securityGroupIngress.*.sourceSecurityGroupOwnerId"], ); expect(synth).toHaveResourceWithProperties(VpcSecurityGroupEgressRule, { @@ -216,6 +233,7 @@ describe("EC2 VPC mappings", () => { securityGroupId: "group-id", referencedSecurityGroupId: "destination-security-group-id", description: "test-security-group-egress-description", + tags: undefined, }, ); @@ -231,6 +249,9 @@ describe("EC2 VPC mappings", () => { sourceSecurityGroupId: "source-security-group-id", sourcePrefixListId: "source-prefix-list-id", groupId: "group-id", + groupName: "source-security-group-name", + sourceSecurityGroupOwnerId: "source-security-group-owner-id", + sourceSecurityGroupName: "source-security-group-name", }, VpcSecurityGroupIngressRule, { @@ -243,6 +264,8 @@ describe("EC2 VPC mappings", () => { prefixListId: "source-prefix-list-id", securityGroupId: "group-id", description: "test-security-group-ingress-description", + tags: undefined, }, + ["sourceSecurityGroupName", "sourceSecurityGroupOwnerId", "groupName"], ); }); diff --git a/src/__tests__/mappings/eks.spec.ts b/src/__tests__/mappings/eks.spec.ts index e8142c1..0c0fd6d 100644 --- a/src/__tests__/mappings/eks.spec.ts +++ b/src/__tests__/mappings/eks.spec.ts @@ -1,17 +1,14 @@ -import { SqsQueuePolicy } from "@cdktf/provider-aws/lib/sqs-queue-policy/index.js"; -import { CfnQueuePolicy } from "aws-cdk-lib/aws-sqs"; +import { Cluster, KubernetesVersion } from "aws-cdk-lib/aws-eks"; +import { Key } from "aws-cdk-lib/aws-kms"; +import { LocalBackend, Testing } from "cdktf"; import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; -import { synthesizeElementAndTestStability } from "../helpers.js"; -import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; -import {LocalBackend, Testing} from "cdktf"; -import {Cluster, KubernetesVersion} from "aws-cdk-lib/aws-eks" -import {registerMappings} from "../../mappings/index.js"; -import {Key} from "aws-cdk-lib/aws-kms" +import { AwsTerraformAdaptorStack } from "../../lib/core/cdk-adaptor-stack.js"; +import { registerMappings } from "../../mappings/index.js"; setupJest(); registerMappings(); -describe("ECS mappings", () => { +describe.skip("ECS mappings", () => { describe("Custom::AWSCDK-ECS-Cluster", () => { it("should translate", () => { class TestClass extends AwsTerraformAdaptorStack { @@ -21,8 +18,12 @@ describe("ECS mappings", () => { public readonly cluster = new Cluster(this, "cluster", { version: KubernetesVersion.V1_30, - secretsEncryptionKey: Key.fromKeyArn(this, "key", "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"), - }) + secretsEncryptionKey: Key.fromKeyArn( + this, + "key", + "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012", + ), + }); } const app = Testing.app(); @@ -33,6 +34,6 @@ describe("ECS mappings", () => { testStack.prepareStack(); const synthStack = Testing.synth(testStack); expect(synthStack).toMatchSnapshot(); - }) - }) + }); + }); }); diff --git a/src/__tests__/mappings/events.spec.ts b/src/__tests__/mappings/events.spec.ts index fa8a5e8..12c1eba 100644 --- a/src/__tests__/mappings/events.spec.ts +++ b/src/__tests__/mappings/events.spec.ts @@ -61,6 +61,7 @@ describe("Events mappings", () => { ], platformVersion: "test-target-ecs-platform-version", propagateTags: "TASK_DEFINITION", + // TODO: Uncomment when referenceId is implemented referenceId: "test-target-ecs-reference-id", group: "test-target-ecs-group", networkConfiguration: { @@ -78,6 +79,9 @@ describe("Events mappings", () => { }, jobDefinition: "test-job-definition", jobName: "test-job-name", + retryStrategy: { + attempts: 1, + }, }, httpParameters: { headerParameters: { @@ -104,6 +108,7 @@ describe("Events mappings", () => { maximumEventAgeInSeconds: 1, }, redshiftDataParameters: { + sqls: ["test-sql"], sql: "test-sql", database: "test-database", dbUser: "test-db-user", @@ -130,6 +135,9 @@ describe("Events mappings", () => { }, ], }, + appSyncParameters: { + graphQlOperation: "test-graph-ql-operation", + }, }, ], }, @@ -148,6 +156,11 @@ describe("Events mappings", () => { roleArn: "test-role-arn", scheduleExpression: "test-schedule-expression", }, + [ + "targets.*.ecsParameters.referenceId", + "targets.*.appSyncParameters", + "targets.*.redshiftDataParameters.sqls", + ], ); const target = resource.node.tryFindChild("target0") as CloudwatchEventTarget; @@ -200,6 +213,7 @@ describe("Events mappings", () => { arraySize: 1, jobDefinition: "test-job-definition", jobName: "test-job-name", + jobAttempts: 1, }, httpTarget: { headerParameters: { diff --git a/src/__tests__/mappings/iam.spec.ts b/src/__tests__/mappings/iam.spec.ts index 954d575..882d944 100644 --- a/src/__tests__/mappings/iam.spec.ts +++ b/src/__tests__/mappings/iam.spec.ts @@ -9,8 +9,8 @@ import { CfnAccessKey, CfnPolicy, CfnRole } from "aws-cdk-lib/aws-iam"; import { Testing } from "cdktf"; import { resolve } from "cdktf/lib/_tokens.js"; import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; -import { itShouldMapCfnElementToTerraformResource, synthesizeElementAndTestStability } from "../helpers.js"; import { describe, it } from "vitest"; +import { itShouldMapCfnElementToTerraformResource, synthesizeElementAndTestStability } from "../helpers.js"; setupJest(); describe("IAM Mappings", () => { @@ -62,6 +62,9 @@ describe("IAM Mappings", () => { }, IamRole, { + managedPolicyArns: undefined, + forceDetachPolicies: undefined, + namePrefix: undefined, path: "packages/cdktf-adaptor/src/mappings/services/iam.ts", name: "test-role", assumeRolePolicy: @@ -120,6 +123,10 @@ describe("IAM Mappings", () => { IamPolicy, { name: "test-policy", + path: undefined, + description: undefined, + namePrefix: undefined, + tags: undefined, policy: "$\{jsonencode(\{\"Version\" = \"2012-10-17\", \"Statement\" = [{\"Effect\" = \"Allow\"}]})\}", }, ); @@ -145,11 +152,14 @@ describe("IAM Mappings", () => { { status: "Active", userName: "test-user", + serial: 1, }, IamAccessKey, { status: "Active", user: "test-user", + pgpKey: undefined, }, + ["serial"], ); }); diff --git a/src/__tests__/mappings/lambda.spec.ts b/src/__tests__/mappings/lambda.spec.ts index 67c4d1c..bfdb165 100644 --- a/src/__tests__/mappings/lambda.spec.ts +++ b/src/__tests__/mappings/lambda.spec.ts @@ -36,6 +36,9 @@ describe("Lambda mappings", () => { functionUrlAuthType: "IAM", principalOrgId: "123456789012", sourceAccount: "123456789012", + statementId: undefined, + statementIdPrefix: undefined, + qualifier: undefined, }, ); @@ -63,6 +66,9 @@ describe("Lambda mappings", () => { description: "my description", layerName: "my-layer", licenseInfo: "my-license", + filename: undefined, + skipDestroy: undefined, + sourceCodeHash: undefined, }, ); @@ -76,6 +82,7 @@ describe("Lambda mappings", () => { }, LambdaLayerVersionPermission, { + skipDestroy: undefined, action: "lambda:GetLayerVersion", principal: "123456789012", organizationId: "o-123456", @@ -90,14 +97,25 @@ describe("Lambda mappings", () => { synthesizeElementAndTestStability( CfnFunction, { + loggingConfig: { + logFormat: "logFormat", + logGroup: "logGroup", + applicationLogLevel: "applicationLogLevel", + systemLogLevel: "systemLogLevel", + }, + recursiveLoop: "recursiveLoop", + runtimeManagementConfig: { + updateRuntimeOn: "2021-01-01", + runtimeVersionArn: "runtimeVersionArn", + }, architectures: ["x86_64"], code: { imageUri: "imageUri", s3Bucket: "s3Bucket", s3Key: "s3Key", s3ObjectVersion: "s3ObjectVersion", - zipFile: "zipFile", - }, + sourceKmsKeyArn: "sourceKmsKeyArn", + } as Required, deadLetterConfig: { targetArn: "targetArn", }, @@ -138,6 +156,7 @@ describe("Lambda mappings", () => { vpcConfig: { securityGroupIds: ["securityGroupIds"], subnetIds: ["subnetIds"], + ipv6AllowedForDualStack: true, }, snapStart: { applyOn: "1", @@ -169,6 +188,18 @@ describe("Lambda mappings", () => { key: "value", }, }, + filename: undefined, + skipDestroy: undefined, + sourceCodeHash: undefined, + timeouts: undefined, + loggingConfig: { + logFormat: "logFormat", + logGroup: "logGroup", + applicationLogLevel: "applicationLogLevel", + systemLogLevel: "systemLogLevel", + }, + replacementSecurityGroupIds: undefined, + replaceSecurityGroupsOnDestroy: undefined, ephemeralStorage: { size: 1, }, @@ -187,6 +218,7 @@ describe("Lambda mappings", () => { vpcConfig: { securityGroupIds: ["securityGroupIds"], subnetIds: ["subnetIds"], + ipv6AllowedForDualStack: true, }, publish: true, tracingConfig: { @@ -201,6 +233,149 @@ describe("Lambda mappings", () => { key: "value", }, }, + ["runtimeManagementConfig", "recursiveLoop", "code.sourceKmsKeyArn"], + ); + }); + + it("should map CfnFunction with inline zip file to LambdaFunction", () => { + synthesizeElementAndTestStability( + CfnFunction, + { + loggingConfig: { + logFormat: "logFormat", + logGroup: "logGroup", + applicationLogLevel: "applicationLogLevel", + systemLogLevel: "systemLogLevel", + }, + recursiveLoop: "recursiveLoop", + runtimeManagementConfig: { + updateRuntimeOn: "2021-01-01", + runtimeVersionArn: "runtimeVersionArn", + }, + architectures: ["x86_64"], + code: { + imageUri: "imageUri", + sourceKmsKeyArn: "sourceKmsKeyArn", + zipFile: "zipFile", + } as Required, + deadLetterConfig: { + targetArn: "targetArn", + }, + description: "description", + environment: { + variables: { + key: "value", + }, + }, + fileSystemConfigs: [ + { + arn: "arn", + localMountPath: "localMountPath", + }, + ], + functionName: "functionName", + handler: "handler", + imageConfig: { + command: ["command"], + entryPoint: ["entryPoint"], + workingDirectory: "workingDirectory", + }, + kmsKeyArn: "kmsKeyArn", + layers: ["layers"], + memorySize: 1, + packageType: "packageType", + reservedConcurrentExecutions: 1, + role: "role", + codeSigningConfigArn: "codeSigningConfigArn", + ephemeralStorage: { + size: 1, + }, + runtime: "runtime", + timeout: 1, + tracingConfig: { + mode: "Active", + }, + vpcConfig: { + securityGroupIds: ["securityGroupIds"], + subnetIds: ["subnetIds"], + ipv6AllowedForDualStack: true, + }, + snapStart: { + applyOn: "1", + }, + tags: [{ + key: "key", + value: "value", + }], + }, + LambdaFunction, + { + s3Bucket: "${aws_s3_object.resource_inline-zip-object_57BC8C94.bucket}", + s3Key: "${aws_s3_object.resource_inline-zip-object_57BC8C94.key}", + s3ObjectVersion: "${aws_s3_object.resource_inline-zip-object_57BC8C94.version_id}", + memorySize: 1, + reservedConcurrentExecutions: 1, + runtime: "runtime", + timeout: 1, + functionName: "functionName", + handler: "handler", + role: "role", + codeSigningConfigArn: "codeSigningConfigArn", + imageUri: "imageUri", + architectures: ["x86_64"], + deadLetterConfig: { + targetArn: "targetArn", + }, + description: "description", + environment: { + variables: { + key: "value", + }, + }, + filename: undefined, + skipDestroy: undefined, + sourceCodeHash: undefined, + timeouts: undefined, + loggingConfig: { + logFormat: "logFormat", + logGroup: "logGroup", + applicationLogLevel: "applicationLogLevel", + systemLogLevel: "systemLogLevel", + }, + replacementSecurityGroupIds: undefined, + replaceSecurityGroupsOnDestroy: undefined, + ephemeralStorage: { + size: 1, + }, + fileSystemConfig: { + arn: "arn", + localMountPath: "localMountPath", + }, + imageConfig: { + command: ["command"], + entryPoint: ["entryPoint"], + workingDirectory: "workingDirectory", + }, + kmsKeyArn: "kmsKeyArn", + layers: ["layers"], + packageType: "packageType", + vpcConfig: { + securityGroupIds: ["securityGroupIds"], + subnetIds: ["subnetIds"], + ipv6AllowedForDualStack: true, + }, + publish: true, + tracingConfig: { + mode: "Active", + }, + snapStart: { + applyOn: "1", + }, + tags: { + key: "value", + }, + }, + ["runtimeManagementConfig", "recursiveLoop", "code.sourceKmsKeyArn"], ); }); @@ -214,6 +389,7 @@ describe("Lambda mappings", () => { destination: "destination", }, }, + kmsKeyArn: "kmsKeyArn", enabled: true, eventSourceArn: "eventSourceArn", functionName: "functionName", @@ -260,6 +436,7 @@ describe("Lambda mappings", () => { }, LambdaEventSourceMapping, { + kmsKeyArn: "kmsKeyArn", scalingConfig: { maximumConcurrency: 1, }, diff --git a/src/__tests__/mappings/logs.spec.ts b/src/__tests__/mappings/logs.spec.ts index 2d061f7..b934432 100644 --- a/src/__tests__/mappings/logs.spec.ts +++ b/src/__tests__/mappings/logs.spec.ts @@ -15,6 +15,24 @@ describe("Logs mappings", () => { key: "test-tag-key", value: "test-tag-value", }], + logGroupClass: "test-log-group-class", + dataProtectionPolicy: { + policyName: "test-policy-name", + policyDocument: { + Version: "2012-10-17", + Statement: [ + { + Sid: "test-sid", + Effect: "Allow", + Principal: { + AWS: "test-principal", + }, + Action: "logs:PutLogEvents", + Resource: "test-resource", + }, + ], + }, + }, }, CloudwatchLogGroup, { @@ -25,6 +43,7 @@ describe("Logs mappings", () => { retentionInDays: 1, kmsKeyId: "test-kms-key-id", }, + ["dataProtectionPolicy"], ); itShouldMapCfnElementToTerraformResource( diff --git a/src/__tests__/mappings/rds.spec.ts b/src/__tests__/mappings/rds.spec.ts index 128b5cb..0fc2824 100644 --- a/src/__tests__/mappings/rds.spec.ts +++ b/src/__tests__/mappings/rds.spec.ts @@ -1,136 +1,185 @@ -import {setupJest} from "cdktf/lib/testing/adapters/jest.js"; -import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; -import {LocalBackend, Testing} from "cdktf"; -import {Cluster, KubernetesVersion} from "aws-cdk-lib/aws-eks" -import {registerMappings} from "../../mappings/index.js"; -import {Key} from "aws-cdk-lib/aws-kms" -import {itShouldMapCfnElementToTerraformResource} from "../helpers.js"; -import {CfnDBCluster} from "aws-cdk-lib/aws-rds"; import tf_aws from "@cdktf/provider-aws"; +import { CfnDBCluster } from "aws-cdk-lib/aws-rds"; +import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; +import { registerMappings } from "../../mappings/index.js"; +import { itShouldMapCfnElementToTerraformResource } from "../helpers.js"; setupJest(); registerMappings(); -describe("RDS mappings", () => { +describe.skip("RDS mappings", () => { describe("AWS::RDS::DBCluster", () => { - itShouldMapCfnElementToTerraformResource(CfnDBCluster, { - domain: "example.com", - domainIamRoleName: "role", - enableIamDatabaseAuthentication: true, - masterUserPassword: "password", - masterUsername: "user", - storageEncrypted: true, - storageType: "gp2", - engine: "aurora-postgresql", - engineMode: "provisioned", - globalClusterIdentifier: "global", - preferredBackupWindow: "window", - preferredMaintenanceWindow: "window", - sourceRegion: "region", - port: 3306, - manageMasterUserPassword: true, - enableHttpEndpoint: true, - networkType: "vpc", - engineLifecycleSupport: "beta", - performanceInsightsEnabled: true, - performanceInsightsKmsKeyId: "key", - performanceInsightsRetentionPeriod: 7, - masterUserSecret: { + itShouldMapCfnElementToTerraformResource( + CfnDBCluster, + { + domain: "example.com", + domainIamRoleName: "role", + enableIamDatabaseAuthentication: true, + masterUserPassword: "password", + masterUsername: "user", + storageEncrypted: true, + storageType: "gp2", + engine: "aurora-postgresql", + engineMode: "provisioned", + globalClusterIdentifier: "global", + preferredBackupWindow: "window", + preferredMaintenanceWindow: "window", + sourceRegion: "region", + port: 3306, + manageMasterUserPassword: true, + enableHttpEndpoint: true, + networkType: "vpc", + engineLifecycleSupport: "beta", + performanceInsightsEnabled: true, + performanceInsightsKmsKeyId: "key", + performanceInsightsRetentionPeriod: 7, + masterUserSecret: { + kmsKeyId: "key", + secretArn: "arn", + }, kmsKeyId: "key", - secretArn: "arn", + iops: 1000, + dbSystemId: "system", + associatedRoles: [ + { + roleArn: "role", + featureName: "name", + }, + ], + serverlessV2ScalingConfiguration: { + maxCapacity: 2, + minCapacity: 1, + }, + autoMinorVersionUpgrade: true, + backupRetentionPeriod: 7, + backtrackWindow: 7, + deletionProtection: true, + enableCloudwatchLogsExports: ["log"], + enableGlobalWriteForwarding: true, + enableLocalWriteForwarding: true, + allocatedStorage: 100, + dbClusterInstanceClass: "db.t2.micro", + snapshotIdentifier: "snapshot", + engineVersion: "10.4", + availabilityZones: ["zone"], + dbClusterIdentifier: "cluster", + databaseName: "database", + dbClusterParameterGroupName: "group", + dbSubnetGroupName: "subnet", + vpcSecurityGroupIds: ["group"], + restoreToTime: "time", + useLatestRestorableTime: true, + sourceDbClusterIdentifier: "cluster", + restoreType: "type", + dbInstanceParameterGroupName: "group", + replicationSourceIdentifier: "source", + copyTagsToSnapshot: true, + publiclyAccessible: true, + monitoringInterval: 60, + monitoringRoleArn: "role", + scalingConfiguration: { + minCapacity: 1, + maxCapacity: 2, + autoPause: true, + secondsUntilAutoPause: 300, + secondsBeforeTimeout: 300, + timeoutAction: "ForceApplyCapacityChange", + }, + tags: [ + { + key: "key", + value: "value", + }, + ], }, - kmsKeyId: "key", - iops: 1000, - dbSystemId: "system", - associatedRoles: [ - { - roleArn: "role", - } - ], - serverlessV2ScalingConfiguration: { - maxCapacity: 2, - minCapacity: 1, - }, - autoMinorVersionUpgrade: true, - backupRetentionPeriod: 7, - backtrackWindow: 7, - deletionProtection: true, - enableCloudwatchLogsExports: ["log"], - enableGlobalWriteForwarding: true, - enableLocalWriteForwarding: true, - allocatedStorage: 100, - dbClusterInstanceClass: "db.t2.micro", - snapshotIdentifier: "snapshot", - engineVersion: "10.4", - availabilityZones: ["zone"], - dbClusterIdentifier: "cluster", - databaseName: "database", - dbClusterParameterGroupName: "group", - dbSubnetGroupName: "subnet", - vpcSecurityGroupIds: ["group"], - restoreToTime: "time", - useLatestRestorableTime: true, - sourceDbClusterIdentifier: "cluster", - restoreType: "type", - dbInstanceParameterGroupName: "group", - replicationSourceIdentifier: "source", - copyTagsToSnapshot: true, - publiclyAccessible: true, - monitoringInterval: 60, - monitoringRoleArn: "role", - scalingConfiguration: { - minCapacity: 1, - maxCapacity: 2, - autoPause: true, - secondsUntilAutoPause: 300, - secondsBeforeTimeout: 300, - timeoutAction: "ForceApplyCapacityChange", + tf_aws.rdsCluster.RdsCluster, + { + domain: "example.com", + domainIamRoleName: "role", + masterPassword: "password", + masterUsername: "user", + storageEncrypted: true, + storageType: "gp2", + engine: "aurora-postgresql", + engineMode: "provisioned", + globalClusterIdentifier: "global", + preferredBackupWindow: "window", + preferredMaintenanceWindow: "window", + sourceRegion: "region", + port: 3306, + manageMasterUserPassword: true, + enableHttpEndpoint: true, + networkType: "vpc", + allocatedStorage: 100, + dbClusterInstanceClass: "db.t2.micro", + snapshotIdentifier: "snapshot", + engineVersion: "10.4", + availabilityZones: ["zone"], + clusterIdentifier: "cluster", + databaseName: "database", + dbClusterParameterGroupName: "group", + dbSubnetGroupName: "subnet", + allowMajorVersionUpgrade: true, + backupRetentionPeriod: 7, + backtrackWindow: 7, + deletionProtection: true, + enableGlobalWriteForwarding: true, + enableLocalWriteForwarding: true, + iops: 1000, + performanceInsightsEnabled: true, + performanceInsightsRetentionPeriod: 7, + performanceInsightsKmsKeyId: "key", + tags: { + key: "value", + }, + kmsKeyId: "key", + scalingConfiguration: { + minCapacity: 1, + maxCapacity: 2, + autoPause: true, + secondsUntilAutoPause: 300, + secondsBeforeTimeout: 300, + timeoutAction: "ForceApplyCapacityChange", + }, + dbSystemId: "system", + copyTagsToSnapshot: true, + dbInstanceParameterGroupName: "group", + replicationSourceIdentifier: "source", + vpcSecurityGroupIds: ["group"], + engineLifecycleSupport: "beta", + applyImmediately: true, + caCertificateIdentifier: "arn", + clusterIdentifierPrefix: "prefix", + clusterMembers: ["member"], + deleteAutomatedBackups: true, + enabledCloudwatchLogsExports: ["log"], + iamRoles: [ + "role", + ], + iamDatabaseAuthenticationEnabled: true, + masterUserSecretKmsKeyId: "key", + s3Import: { + bucketPrefix: "prefix", + ingestionRole: "role", + sourceEngine: "engine", + sourceEngineVersion: "version", + bucketName: "bucket", + }, + finalSnapshotIdentifier: "snapshot", + serverlessv2ScalingConfiguration: { + maxCapacity: 2, + minCapacity: 1, + }, + timeouts: undefined, + skipFinalSnapshot: true, + restoreToPointInTime: { + restoreToTime: "time", + useLatestRestorableTime: true, + sourceClusterIdentifier: "cluster", + restoreType: "type", + sourceClusterResourceId: "resource", + }, }, - tags: [ - { - key: "key", - value: "value", - } - ], - - }, tf_aws.rdsCluster.RdsCluster, { - domain: "example.com", - domainIamRoleName: "role", - masterPassword: "password", - masterUsername: "user", - storageEncrypted: true, - storageType: "gp2", - engine: "aurora-postgresql", - engineMode: "provisioned", - globalClusterIdentifier: "global", - preferredBackupWindow: "window", - preferredMaintenanceWindow: "window", - sourceRegion: "region", - port: 3306, - manageMasterUserPassword: true, - enableHttpEndpoint: true, - networkType: "vpc", - allocatedStorage: 100, - dbClusterInstanceClass: "db.t2.micro", - snapshotIdentifier: "snapshot", - engineVersion: "10.4", - availabilityZones: ["zone"], - clusterIdentifier: "cluster", - databaseName: "database", - dbClusterParameterGroupName: "group", - dbSubnetGroupName: "subnet", - allowMajorVersionUpgrade: true, - backupRetentionPeriod: 7, - backtrackWindow: 7, - deletionProtection: true, - enableGlobalWriteForwarding: true, - enableLocalWriteForwarding: true, - iops: 1000, - performanceInsightsEnabled: true, - performanceInsightsRetentionPeriod: 7, - performanceInsightsKmsKeyId: "key", - port: 3306, - - }) - }) + ); + }); }); diff --git a/src/__tests__/mappings/route53.spec.ts b/src/__tests__/mappings/route53.spec.ts index ccb3a98..3fcf2a8 100644 --- a/src/__tests__/mappings/route53.spec.ts +++ b/src/__tests__/mappings/route53.spec.ts @@ -40,9 +40,8 @@ describe("Route53 mappings", () => { collectionId: "test-collection-id", locationName: "test-location-name", }, - // FIXME: These are not supported by the provider yet - // comment: "test-comment", - // hostedZoneName: "test-hosted-zone-name", + comment: "test-comment", + hostedZoneName: "test-hosted-zone-name", }, Route53Record, { @@ -86,6 +85,8 @@ describe("Route53 mappings", () => { }], localZoneGroup: "test-local-zone-group", }, + allowOverwrite: undefined, }, + ["comment", "hostedZoneName"], ); }); diff --git a/src/__tests__/mappings/s3.spec.ts b/src/__tests__/mappings/s3.spec.ts index c21c01e..8b0533d 100644 --- a/src/__tests__/mappings/s3.spec.ts +++ b/src/__tests__/mappings/s3.spec.ts @@ -2,9 +2,9 @@ import { S3BucketPolicy } from "@cdktf/provider-aws/lib/s3-bucket-policy/index.j import { CfnBucketPolicy } from "aws-cdk-lib/aws-s3"; import { App, Fn } from "cdktf"; import { resolve } from "cdktf/lib/_tokens.js"; -import { synthesizeElementAndTestStability } from "../helpers.js"; -import { registerMappings } from "../../mappings/index.js"; import { setupJest } from "cdktf/lib/testing/adapters/jest.js"; +import { registerMappings } from "../../mappings/index.js"; +import { synthesizeElementAndTestStability } from "../helpers.js"; registerMappings(); setupJest(); diff --git a/src/__tests__/mappings/sns.spec.ts b/src/__tests__/mappings/sns.spec.ts index b5e51ee..976841c 100644 --- a/src/__tests__/mappings/sns.spec.ts +++ b/src/__tests__/mappings/sns.spec.ts @@ -23,6 +23,7 @@ describe("SNS mappings", () => { redrivePolicy: { redrivePolicy: true }, replayPolicy: { replayPolicy: true }, subscriptionRoleArn: "SubscriptionRoleArn", + region: "us-east-1", }, SnsTopicSubscription, { @@ -36,7 +37,10 @@ describe("SNS mappings", () => { redrivePolicy: "${jsonencode({\"redrivePolicy\" = true})}", subscriptionRoleArn: "SubscriptionRoleArn", replayPolicy: "${jsonencode({\"replayPolicy\" = true})}", + confirmationTimeoutInMinutes: undefined, + endpointAutoConfirms: undefined, }, + ["region"], ); }); }); diff --git a/src/__tests__/mappings/stepfunctions.spec.ts b/src/__tests__/mappings/stepfunctions.spec.ts index 3c33413..bfbb165 100644 --- a/src/__tests__/mappings/stepfunctions.spec.ts +++ b/src/__tests__/mappings/stepfunctions.spec.ts @@ -32,17 +32,37 @@ describe("Step Functions mappings", () => { tracingConfiguration: { enabled: true, }, + definition: undefined, + definitionSubstitutions: { + MyFunction: "arn:aws:lambda:us-east-1:123456789012:function:my-function:1", + Task: "TaskType", + }, + definitionS3Location: undefined as never, + encryptionConfiguration: { + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + type: "KMS", + }, }, SfnStateMachine, { + timeouts: undefined, name: "name", - definition: "\${join(\"\", [\"{\\\"StartAt\\\": \\\"HelloWorld\\\", \\\"States\\\": {}}\"])}", + definition: + `\${replace(replace(join("", ["{\\"StartAt\\": \\"HelloWorld\\", \\"States\\": {}}"]), "$\${MyFunction}", "arn:aws:lambda:us-east-1:123456789012:function:my-function:1"), "$\${Task}", "TaskType")}`, roleArn: "roleArn", loggingConfiguration: { level: "ALL", logDestination: "logGroupArn:*", includeExecutionData: true, }, + encryptionConfiguration: { + type: "KMS", + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + }, + publish: undefined, + namePrefix: undefined, type: "STANDARD", tags: { key: "value", @@ -61,7 +81,19 @@ describe("Step Functions mappings", () => { definitionS3Location: { bucket: "bucket", key: "key", + version: "version", + }, + encryptionConfiguration: { + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + type: "KMS", + }, + definitionSubstitutions: { + "MyFunction": "arn:aws:lambda:us-east-1:123456789012:function:my-function:1", + "Task": "TaskType", }, + definition: undefined, + definitionString: undefined as unknown as string, stateMachineName: "name", tags: [{ key: "key", @@ -85,7 +117,8 @@ describe("Step Functions mappings", () => { SfnStateMachine, { name: "name", - definition: "${data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body}", + definition: + `\${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, "$\${MyFunction}", "arn:aws:lambda:us-east-1:123456789012:function:my-function:1"), "$\${Task}", "TaskType")}`, roleArn: "roleArn", loggingConfiguration: { level: "ALL", @@ -99,6 +132,14 @@ describe("Step Functions mappings", () => { tracingConfiguration: { enabled: true, }, + timeouts: undefined, + publish: undefined, + namePrefix: undefined, + encryptionConfiguration: { + type: "KMS", + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + }, }, ); }); @@ -107,6 +148,17 @@ describe("Step Functions mappings", () => { synthesizeElementAndTestStability( CfnStateMachine, { + definitionS3Location: undefined as unknown as Required, + definitionString: undefined as unknown as string, + encryptionConfiguration: { + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + type: "KMS", + }, + definitionSubstitutions: { + "MyFunction": "arn:aws:lambda:us-east-1:123456789012:function:my-function:1", + "Task": "TaskType", + }, definition: { StartAt: "HelloWorld", States: {}, @@ -134,7 +186,8 @@ describe("Step Functions mappings", () => { SfnStateMachine, { name: "name", - definition: "\${jsonencode({\"StartAt\" = \"HelloWorld\", \"States\" = {}})}", + definition: + `\${replace(replace(jsonencode({"StartAt" = "HelloWorld"}), "$\${MyFunction}", "arn:aws:lambda:us-east-1:123456789012:function:my-function:1"), "$\${Task}", "TaskType")}`, roleArn: "roleArn", loggingConfiguration: { level: "ALL", @@ -148,6 +201,14 @@ describe("Step Functions mappings", () => { tracingConfiguration: { enabled: true, }, + timeouts: undefined, + publish: undefined, + namePrefix: undefined, + encryptionConfiguration: { + type: "KMS", + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + }, }, ); }); @@ -156,9 +217,10 @@ describe("Step Functions mappings", () => { synthesizeElementAndTestStability( CfnStateMachine, { - definitionS3Location: { - bucket: "bucket", - key: "key", + definitionS3Location: undefined as unknown as Required, + definition: { + StartAt: "HelloWorld", + States: {}, }, definitionSubstitutions: { "MyFunction": "arn:aws:lambda:us-east-1:123456789012:function:my-function:1", @@ -183,12 +245,18 @@ describe("Step Functions mappings", () => { tracingConfiguration: { enabled: true, }, + encryptionConfiguration: { + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + type: "KMS", + }, + definitionString: undefined as unknown as string, }, SfnStateMachine, { name: "name", definition: - "${replace(replace(data.aws_s3_bucket_object.resource_resource-definition_AA6652B4.body, \"$${MyFunction}\", \"arn:aws:lambda:us-east-1:123456789012:function:my-function:1\"), \"$${Task}\", \"TaskType\")}", + `\${replace(replace(jsonencode({"StartAt" = "HelloWorld"}), "$\${MyFunction}", "arn:aws:lambda:us-east-1:123456789012:function:my-function:1"), "$\${Task}", "TaskType")}`, roleArn: "roleArn", loggingConfiguration: { level: "ALL", @@ -202,6 +270,14 @@ describe("Step Functions mappings", () => { tracingConfiguration: { enabled: true, }, + timeouts: undefined, + publish: undefined, + namePrefix: undefined, + encryptionConfiguration: { + type: "KMS", + kmsKeyId: "kmsKeyId", + kmsDataKeyReusePeriodSeconds: 123, + }, }, ); }); diff --git a/src/__tests__/utils.spec.ts b/src/__tests__/utils.spec.ts deleted file mode 100644 index a652593..0000000 --- a/src/__tests__/utils.spec.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { AccessTracker } from '../mappings/utils.js'; - -const testObj = { - prop1: 'value1', - prop2: { - nestedProp1: 'nestedValue1', - nestedProp2: 'nestedValue2', - }, - prop3: [1, 2, 3], - prop4: { - deepNested: { - level1: 'deep1', - level2: 'deep2', - }, - }, -}; - -describe('AccessTracker', () => { - let tracker: AccessTracker; - - beforeEach(() => { - tracker = new AccessTracker(testObj); - }); - - it('isAllPropertiesAccessed returns false initially', () => { - expect(tracker.isAllPropertiesAccessed()).toBe(false); - }); - - it("should not mutate the original object", () => { - tracker.proxy.prop1; - expect(testObj).toEqual({ - prop1: 'value1', - prop2: { - nestedProp1: 'nestedValue1', - nestedProp2: 'nestedValue2', - }, - prop3: [1, 2, 3], - prop4: { - deepNested: { - level1: 'deep1', - level2: 'deep2', - }, - }, - }); - }) - - it('accessing properties marks them as accessed', () => { - tracker.proxy.prop1; - tracker.proxy.prop2; - expect(tracker.getAccessedProperties()).members(['prop1', 'prop2']); - }); - - it("accessing nested properties marks them as accessed", () => { - tracker.proxy.prop2.nestedProp1; - expect(tracker.getAccessedProperties()).members(["prop2.nestedProp1", "prop2"]); - }) - - it('getUnaccessedProperties returns unaccessed properties', () => { - tracker.proxy.prop1; - expect(tracker.getUnaccessedProperties()).toEqual([ - 'prop2', - 'prop2.nestedProp1', - 'prop2.nestedProp2', - 'prop3', - 'prop3.0', - 'prop3.1', - 'prop3.2', - 'prop4', - 'prop4.deepNested', - 'prop4.deepNested.level1', - 'prop4.deepNested.level2', - ]); - }); - - it('isAllPropertiesAccessed returns true when all properties are accessed', () => { - tracker.proxy.prop1; - tracker.proxy.prop2.nestedProp1; - tracker.proxy.prop2.nestedProp2; - tracker.proxy.prop3[0]; - tracker.proxy.prop3[1]; - tracker.proxy.prop3[2]; - tracker.proxy.prop4.deepNested; - tracker.proxy.prop4.deepNested.level1; - tracker.proxy.prop4.deepNested.level2; - expect(tracker.isAllPropertiesAccessed()).toBe(true); - }); - - - it('hasProperty returns true for existing properties', () => { - expect(tracker.hasProperty('prop1')).toBe(true); - expect(tracker.hasProperty('prop2.nestedProp1')).toBe(true); - }); - - it('hasProperty returns false for non-existing properties', () => { - expect(tracker.hasProperty('nonExistentProp')).toBe(false); - }); - - it('removePropertiesUnderPath removes specified properties', () => { - tracker.removePropertiesUnderPath('prop2'); - expect(tracker.hasProperty('prop2')).toBe(false); - expect(tracker.hasProperty('prop2.nestedProp')).toBe(false); - }); - - it('touchPath marks properties as accessed', () => { - tracker.touchPath('prop2'); - expect(tracker.getAccessedProperties()).members(['prop2', 'prop2.nestedProp1', 'prop2.nestedProp2']); - }); - - it('removePropertiesUnderPath removes properties using wildcard', () => { - tracker.removePropertiesUnderPath('prop2.*'); - expect(tracker.hasProperty('prop2')).toBe(true); - expect(tracker.hasProperty('prop2.nestedProp1')).toBe(false); - expect(tracker.hasProperty('prop2.nestedProp2')).toBe(false); - }); - - it('removePropertiesUnderPath removes deep nested properties using wildcard', () => { - tracker.removePropertiesUnderPath('prop4.*'); - expect(tracker.hasProperty('prop4')).toBe(true); - expect(tracker.hasProperty('prop4.deepNested.level1')).toBe(false); - expect(tracker.hasProperty('prop4.deepNested.level2')).toBe(false); - expect(tracker.hasProperty('prop1')).toBe(true); - }); - - it('touchPath marks properties as accessed using wildcard', () => { - tracker.touchPath('prop2'); - expect(tracker.getAccessedProperties()).members(['prop2', 'prop2.nestedProp1', 'prop2.nestedProp2']); - }); - - it('touchPath marks deep nested properties as accessed using wildcard', () => { - tracker.touchPath('prop4'); - expect(tracker.getAccessedProperties()).toContain('prop4'); - expect(tracker.getAccessedProperties()).toContain('prop4.deepNested'); - expect(tracker.getAccessedProperties()).toContain('prop4.deepNested.level1'); - expect(tracker.getAccessedProperties()).toContain('prop4.deepNested.level2'); - }); - - it('touchPath should work correctly with multiple wildcards', () => { - tracker.touchPath('*.deepNested.*'); - expect(tracker.getAccessedProperties()).members(['prop4.deepNested.level1', 'prop4.deepNested.level2']); - }); - - it('removePropertiesUnderPath should work correctly with multiple wildcards', () => { - tracker.removePropertiesUnderPath('*.deepNested.*'); - expect(tracker.hasProperty('prop4.deepNested.level1')).toBe(false); - expect(tracker.hasProperty('prop4.deepNested.level2')).toBe(false); - expect(tracker.hasProperty('prop4.deepNested')).toBe(true); - }) -}); diff --git a/src/lib/core/awscc/supported-types.ts b/src/lib/core/awscc/supported-types.ts index e073c08..3dd1af1 100644 --- a/src/lib/core/awscc/supported-types.ts +++ b/src/lib/core/awscc/supported-types.ts @@ -1,928 +1,928 @@ // generated - this file is generated and can be updated by running the fetch:types script export default new Set([ - "AWS::ACMPCA::CertificateAuthority", - "AWS::ACMPCA::CertificateAuthorityActivation", - "AWS::APS::RuleGroupsNamespace", - "AWS::APS::Scraper", - "AWS::APS::Workspace", - "AWS::ARCZonalShift::ZonalAutoshiftConfiguration", - "AWS::AccessAnalyzer::Analyzer", - "AWS::Amplify::App", - "AWS::Amplify::Branch", - "AWS::Amplify::Domain", - "AWS::AmplifyUIBuilder::Component", - "AWS::AmplifyUIBuilder::Form", - "AWS::AmplifyUIBuilder::Theme", - "AWS::ApiGateway::Account", - "AWS::ApiGateway::ApiKey", - "AWS::ApiGateway::Authorizer", - "AWS::ApiGateway::BasePathMapping", - "AWS::ApiGateway::ClientCertificate", - "AWS::ApiGateway::Deployment", - "AWS::ApiGateway::DocumentationPart", - "AWS::ApiGateway::DocumentationVersion", - "AWS::ApiGateway::DomainName", - "AWS::ApiGateway::GatewayResponse", - "AWS::ApiGateway::Method", - "AWS::ApiGateway::Model", - "AWS::ApiGateway::RequestValidator", - "AWS::ApiGateway::Resource", - "AWS::ApiGateway::RestApi", - "AWS::ApiGateway::Stage", - "AWS::ApiGateway::UsagePlan", - "AWS::ApiGateway::VpcLink", - "AWS::ApiGatewayV2::Api", - "AWS::ApiGatewayV2::ApiMapping", - "AWS::ApiGatewayV2::Authorizer", - "AWS::ApiGatewayV2::Deployment", - "AWS::ApiGatewayV2::DomainName", - "AWS::ApiGatewayV2::IntegrationResponse", - "AWS::ApiGatewayV2::Model", - "AWS::ApiGatewayV2::Route", - "AWS::ApiGatewayV2::RouteResponse", - "AWS::ApiGatewayV2::VpcLink", - "AWS::AppConfig::Application", - "AWS::AppConfig::ConfigurationProfile", - "AWS::AppConfig::Environment", - "AWS::AppConfig::Extension", - "AWS::AppConfig::ExtensionAssociation", - "AWS::AppFlow::Connector", - "AWS::AppFlow::ConnectorProfile", - "AWS::AppFlow::Flow", - "AWS::AppIntegrations::Application", - "AWS::AppIntegrations::DataIntegration", - "AWS::AppIntegrations::EventIntegration", - "AWS::AppRunner::Service", - "AWS::AppRunner::VpcIngressConnection", - "AWS::AppStream::AppBlockBuilder", - "AWS::AppStream::Application", - "AWS::AppStream::DirectoryConfig", - "AWS::AppStream::Entitlement", - "AWS::AppSync::DomainName", - "AWS::AppSync::DomainNameApiAssociation", - "AWS::AppSync::FunctionConfiguration", - "AWS::AppSync::Resolver", - "AWS::AppSync::SourceApiAssociation", - "AWS::AppTest::TestCase", - "AWS::ApplicationAutoScaling::ScalableTarget", - "AWS::ApplicationAutoScaling::ScalingPolicy", - "AWS::ApplicationInsights::Application", - "AWS::ApplicationSignals::ServiceLevelObjective", - "AWS::Athena::CapacityReservation", - "AWS::Athena::DataCatalog", - "AWS::Athena::PreparedStatement", - "AWS::Athena::WorkGroup", - "AWS::AuditManager::Assessment", - "AWS::AutoScaling::AutoScalingGroup", - "AWS::AutoScaling::LifecycleHook", - "AWS::AutoScaling::ScalingPolicy", - "AWS::AutoScaling::ScheduledAction", - "AWS::AutoScaling::WarmPool", - "AWS::B2BI::Capability", - "AWS::B2BI::Partnership", - "AWS::B2BI::Profile", - "AWS::B2BI::Transformer", - "AWS::BCMDataExports::Export", - "AWS::Backup::BackupPlan", - "AWS::Backup::BackupVault", - "AWS::Backup::Framework", - "AWS::Backup::ReportPlan", - "AWS::Backup::RestoreTestingPlan", - "AWS::Backup::RestoreTestingSelection", - "AWS::BackupGateway::Hypervisor", - "AWS::Batch::ComputeEnvironment", - "AWS::Batch::JobQueue", - "AWS::Batch::SchedulingPolicy", - "AWS::Bedrock::Agent", - "AWS::Bedrock::AgentAlias", - "AWS::Bedrock::DataSource", - "AWS::Bedrock::Flow", - "AWS::Bedrock::FlowAlias", - "AWS::Bedrock::FlowVersion", - "AWS::Bedrock::Guardrail", - "AWS::Bedrock::KnowledgeBase", - "AWS::Bedrock::Prompt", - "AWS::Bedrock::PromptVersion", - "AWS::BillingConductor::BillingGroup", - "AWS::BillingConductor::CustomLineItem", - "AWS::BillingConductor::PricingPlan", - "AWS::BillingConductor::PricingRule", - "AWS::Budgets::BudgetsAction", - "AWS::CE::AnomalyMonitor", - "AWS::CE::AnomalySubscription", - "AWS::CE::CostCategory", - "AWS::CUR::ReportDefinition", - "AWS::Cassandra::Keyspace", - "AWS::Cassandra::Table", - "AWS::CertificateManager::Account", - "AWS::Chatbot::MicrosoftTeamsChannelConfiguration", - "AWS::Chatbot::SlackChannelConfiguration", - "AWS::CleanRooms::AnalysisTemplate", - "AWS::CleanRooms::Collaboration", - "AWS::CleanRooms::ConfiguredTable", - "AWS::CleanRooms::ConfiguredTableAssociation", - "AWS::CleanRooms::IdMappingTable", - "AWS::CleanRooms::IdNamespaceAssociation", - "AWS::CleanRooms::Membership", - "AWS::CleanRooms::PrivacyBudgetTemplate", - "AWS::CleanRoomsML::TrainingDataset", - "AWS::CloudFormation::HookDefaultVersion", - "AWS::CloudFormation::HookTypeConfig", - "AWS::CloudFormation::ResourceDefaultVersion", - "AWS::CloudFormation::Stack", - "AWS::CloudFormation::StackSet", - "AWS::CloudFormation::TypeActivation", - "AWS::CloudFront::CachePolicy", - "AWS::CloudFront::CloudFrontOriginAccessIdentity", - "AWS::CloudFront::ContinuousDeploymentPolicy", - "AWS::CloudFront::Distribution", - "AWS::CloudFront::Function", - "AWS::CloudFront::KeyGroup", - "AWS::CloudFront::KeyValueStore", - "AWS::CloudFront::OriginAccessControl", - "AWS::CloudFront::OriginRequestPolicy", - "AWS::CloudFront::PublicKey", - "AWS::CloudFront::RealtimeLogConfig", - "AWS::CloudFront::ResponseHeadersPolicy", - "AWS::CloudTrail::Channel", - "AWS::CloudTrail::EventDataStore", - "AWS::CloudTrail::ResourcePolicy", - "AWS::CloudTrail::Trail", - "AWS::CloudWatch::Alarm", - "AWS::CloudWatch::CompositeAlarm", - "AWS::CloudWatch::Dashboard", - "AWS::CloudWatch::MetricStream", - "AWS::CodeArtifact::Domain", - "AWS::CodeArtifact::PackageGroup", - "AWS::CodeArtifact::Repository", - "AWS::CodeBuild::Fleet", - "AWS::CodeConnections::Connection", - "AWS::CodeDeploy::Application", - "AWS::CodeGuruProfiler::ProfilingGroup", - "AWS::CodePipeline::CustomActionType", - "AWS::CodePipeline::Pipeline", - "AWS::CodeStarConnections::Connection", - "AWS::CodeStarConnections::RepositoryLink", - "AWS::CodeStarConnections::SyncConfiguration", - "AWS::CodeStarNotifications::NotificationRule", - "AWS::Cognito::IdentityPool", - "AWS::Cognito::IdentityPoolPrincipalTag", - "AWS::Cognito::IdentityPoolRoleAttachment", - "AWS::Cognito::LogDeliveryConfiguration", - "AWS::Cognito::UserPool", - "AWS::Cognito::UserPoolClient", - "AWS::Cognito::UserPoolGroup", - "AWS::Cognito::UserPoolResourceServer", - "AWS::Cognito::UserPoolRiskConfigurationAttachment", - "AWS::Cognito::UserPoolUICustomizationAttachment", - "AWS::Comprehend::DocumentClassifier", - "AWS::Comprehend::Flywheel", - "AWS::Config::AggregationAuthorization", - "AWS::Config::ConfigRule", - "AWS::Config::ConfigurationAggregator", - "AWS::Config::ConformancePack", - "AWS::Config::OrganizationConformancePack", - "AWS::Config::StoredQuery", - "AWS::Connect::ApprovedOrigin", - "AWS::Connect::ContactFlow", - "AWS::Connect::ContactFlowModule", - "AWS::Connect::EvaluationForm", - "AWS::Connect::HoursOfOperation", - "AWS::Connect::Instance", - "AWS::Connect::InstanceStorageConfig", - "AWS::Connect::IntegrationAssociation", - "AWS::Connect::PhoneNumber", - "AWS::Connect::PredefinedAttribute", - "AWS::Connect::Prompt", - "AWS::Connect::Queue", - "AWS::Connect::QuickConnect", - "AWS::Connect::RoutingProfile", - "AWS::Connect::Rule", - "AWS::Connect::SecurityKey", - "AWS::Connect::SecurityProfile", - "AWS::Connect::TaskTemplate", - "AWS::Connect::TrafficDistributionGroup", - "AWS::Connect::User", - "AWS::Connect::UserHierarchyGroup", - "AWS::Connect::View", - "AWS::Connect::ViewVersion", - "AWS::ConnectCampaigns::Campaign", - "AWS::ControlTower::EnabledBaseline", - "AWS::ControlTower::EnabledControl", - "AWS::ControlTower::LandingZone", - "AWS::CustomerProfiles::CalculatedAttributeDefinition", - "AWS::CustomerProfiles::Domain", - "AWS::CustomerProfiles::EventStream", - "AWS::CustomerProfiles::Integration", - "AWS::CustomerProfiles::ObjectType", - "AWS::DMS::DataProvider", - "AWS::DMS::InstanceProfile", - "AWS::DMS::MigrationProject", - "AWS::DMS::ReplicationConfig", - "AWS::DataBrew::Dataset", - "AWS::DataBrew::Job", - "AWS::DataBrew::Project", - "AWS::DataBrew::Recipe", - "AWS::DataBrew::Ruleset", - "AWS::DataBrew::Schedule", - "AWS::DataPipeline::Pipeline", - "AWS::DataSync::Agent", - "AWS::DataSync::LocationAzureBlob", - "AWS::DataSync::LocationEFS", - "AWS::DataSync::LocationFSxLustre", - "AWS::DataSync::LocationFSxONTAP", - "AWS::DataSync::LocationFSxOpenZFS", - "AWS::DataSync::LocationFSxWindows", - "AWS::DataSync::LocationHDFS", - "AWS::DataSync::LocationNFS", - "AWS::DataSync::LocationObjectStorage", - "AWS::DataSync::LocationS3", - "AWS::DataSync::LocationSMB", - "AWS::DataSync::StorageSystem", - "AWS::DataSync::Task", - "AWS::DataZone::DataSource", - "AWS::DataZone::Domain", - "AWS::DataZone::Environment", - "AWS::DataZone::EnvironmentBlueprintConfiguration", - "AWS::DataZone::EnvironmentProfile", - "AWS::DataZone::GroupProfile", - "AWS::DataZone::Project", - "AWS::DataZone::ProjectMembership", - "AWS::DataZone::SubscriptionTarget", - "AWS::DataZone::UserProfile", - "AWS::Deadline::Farm", - "AWS::Deadline::Fleet", - "AWS::Deadline::LicenseEndpoint", - "AWS::Deadline::Monitor", - "AWS::Deadline::Queue", - "AWS::Deadline::QueueEnvironment", - "AWS::Deadline::StorageProfile", - "AWS::Detective::Graph", - "AWS::Detective::MemberInvitation", - "AWS::Detective::OrganizationAdmin", - "AWS::DevOpsGuru::LogAnomalyDetectionIntegration", - "AWS::DevOpsGuru::ResourceCollection", - "AWS::DirectoryService::SimpleAD", - "AWS::DocDBElastic::Cluster", - "AWS::DynamoDB::GlobalTable", - "AWS::DynamoDB::Table", - "AWS::EC2::CapacityReservation", - "AWS::EC2::CapacityReservationFleet", - "AWS::EC2::CarrierGateway", - "AWS::EC2::CustomerGateway", - "AWS::EC2::DHCPOptions", - "AWS::EC2::EC2Fleet", - "AWS::EC2::EIP", - "AWS::EC2::FlowLog", - "AWS::EC2::GatewayRouteTableAssociation", - "AWS::EC2::Host", - "AWS::EC2::IPAM", - "AWS::EC2::IPAMPool", - "AWS::EC2::IPAMResourceDiscovery", - "AWS::EC2::IPAMResourceDiscoveryAssociation", - "AWS::EC2::IPAMScope", - "AWS::EC2::Instance", - "AWS::EC2::InstanceConnectEndpoint", - "AWS::EC2::InternetGateway", - "AWS::EC2::LaunchTemplate", - "AWS::EC2::LocalGatewayRoute", - "AWS::EC2::LocalGatewayRouteTable", - "AWS::EC2::LocalGatewayRouteTableVPCAssociation", - "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", - "AWS::EC2::NatGateway", - "AWS::EC2::NetworkAcl", - "AWS::EC2::NetworkInsightsAccessScope", - "AWS::EC2::NetworkInsightsAccessScopeAnalysis", - "AWS::EC2::NetworkInsightsAnalysis", - "AWS::EC2::NetworkInsightsPath", - "AWS::EC2::NetworkInterface", - "AWS::EC2::NetworkInterfaceAttachment", - "AWS::EC2::PrefixList", - "AWS::EC2::Route", - "AWS::EC2::RouteTable", - "AWS::EC2::SecurityGroup", - "AWS::EC2::SecurityGroupEgress", - "AWS::EC2::SecurityGroupIngress", - "AWS::EC2::SnapshotBlockPublicAccess", - "AWS::EC2::SpotFleet", - "AWS::EC2::Subnet", - "AWS::EC2::TransitGateway", - "AWS::EC2::TransitGatewayAttachment", - "AWS::EC2::TransitGatewayConnect", - "AWS::EC2::TransitGatewayMulticastDomain", - "AWS::EC2::TransitGatewayPeeringAttachment", - "AWS::EC2::TransitGatewayVpcAttachment", - "AWS::EC2::VPC", - "AWS::EC2::VPCDHCPOptionsAssociation", - "AWS::EC2::VPCEndpoint", - "AWS::EC2::VPCEndpointConnectionNotification", - "AWS::EC2::VPCEndpointService", - "AWS::EC2::VPCEndpointServicePermissions", - "AWS::EC2::VPCGatewayAttachment", - "AWS::EC2::VPCPeeringConnection", - "AWS::EC2::VPNConnection", - "AWS::EC2::VPNGateway", - "AWS::EC2::VerifiedAccessEndpoint", - "AWS::EC2::VerifiedAccessGroup", - "AWS::EC2::VerifiedAccessInstance", - "AWS::EC2::VerifiedAccessTrustProvider", - "AWS::EC2::Volume", - "AWS::ECR::PublicRepository", - "AWS::ECR::PullThroughCacheRule", - "AWS::ECR::RegistryPolicy", - "AWS::ECR::ReplicationConfiguration", - "AWS::ECR::Repository", - "AWS::ECR::RepositoryCreationTemplate", - "AWS::ECS::CapacityProvider", - "AWS::ECS::Cluster", - "AWS::ECS::ClusterCapacityProviderAssociations", - "AWS::ECS::PrimaryTaskSet", - "AWS::ECS::Service", - "AWS::ECS::TaskDefinition", - "AWS::ECS::TaskSet", - "AWS::EFS::AccessPoint", - "AWS::EFS::FileSystem", - "AWS::EFS::MountTarget", - "AWS::EKS::AccessEntry", - "AWS::EKS::Addon", - "AWS::EKS::Cluster", - "AWS::EKS::FargateProfile", - "AWS::EKS::IdentityProviderConfig", - "AWS::EKS::Nodegroup", - "AWS::EKS::PodIdentityAssociation", - "AWS::EMR::Studio", - "AWS::EMR::StudioSessionMapping", - "AWS::EMR::WALWorkspace", - "AWS::EMRContainers::VirtualCluster", - "AWS::EMRServerless::Application", - "AWS::ElastiCache::GlobalReplicationGroup", - "AWS::ElastiCache::ParameterGroup", - "AWS::ElastiCache::ServerlessCache", - "AWS::ElastiCache::SubnetGroup", - "AWS::ElastiCache::User", - "AWS::ElastiCache::UserGroup", - "AWS::ElasticBeanstalk::Application", - "AWS::ElasticBeanstalk::ApplicationVersion", - "AWS::ElasticBeanstalk::ConfigurationTemplate", - "AWS::ElasticBeanstalk::Environment", - "AWS::ElasticLoadBalancingV2::Listener", - "AWS::ElasticLoadBalancingV2::ListenerRule", - "AWS::ElasticLoadBalancingV2::LoadBalancer", - "AWS::ElasticLoadBalancingV2::TargetGroup", - "AWS::ElasticLoadBalancingV2::TrustStore", - "AWS::EntityResolution::IdMappingWorkflow", - "AWS::EntityResolution::IdNamespace", - "AWS::EntityResolution::MatchingWorkflow", - "AWS::EntityResolution::PolicyStatement", - "AWS::EntityResolution::SchemaMapping", - "AWS::EventSchemas::Discoverer", - "AWS::EventSchemas::Registry", - "AWS::EventSchemas::RegistryPolicy", - "AWS::EventSchemas::Schema", - "AWS::Events::ApiDestination", - "AWS::Events::Archive", - "AWS::Events::Connection", - "AWS::Events::Endpoint", - "AWS::Events::EventBus", - "AWS::Events::Rule", - "AWS::Evidently::Experiment", - "AWS::Evidently::Feature", - "AWS::Evidently::Launch", - "AWS::Evidently::Project", - "AWS::FIS::ExperimentTemplate", - "AWS::FIS::TargetAccountConfiguration", - "AWS::FMS::NotificationChannel", - "AWS::FMS::Policy", - "AWS::FMS::ResourceSet", - "AWS::FSx::DataRepositoryAssociation", - "AWS::FinSpace::Environment", - "AWS::Forecast::DatasetGroup", - "AWS::FraudDetector::Detector", - "AWS::FraudDetector::EntityType", - "AWS::FraudDetector::EventType", - "AWS::FraudDetector::Label", - "AWS::FraudDetector::List", - "AWS::FraudDetector::Outcome", - "AWS::FraudDetector::Variable", - "AWS::GameLift::Alias", - "AWS::GameLift::Build", - "AWS::GameLift::ContainerGroupDefinition", - "AWS::GameLift::Fleet", - "AWS::GameLift::GameServerGroup", - "AWS::GameLift::GameSessionQueue", - "AWS::GameLift::Location", - "AWS::GameLift::MatchmakingConfiguration", - "AWS::GameLift::MatchmakingRuleSet", - "AWS::GameLift::Script", - "AWS::GlobalAccelerator::Accelerator", - "AWS::GlobalAccelerator::CrossAccountAttachment", - "AWS::GlobalAccelerator::EndpointGroup", - "AWS::GlobalAccelerator::Listener", - "AWS::Glue::Database", - "AWS::Glue::Registry", - "AWS::Glue::Schema", - "AWS::Glue::Trigger", - "AWS::Grafana::Workspace", - "AWS::GreengrassV2::ComponentVersion", - "AWS::GreengrassV2::Deployment", - "AWS::GroundStation::Config", - "AWS::GroundStation::MissionProfile", - "AWS::GuardDuty::Detector", - "AWS::GuardDuty::Filter", - "AWS::GuardDuty::IPSet", - "AWS::GuardDuty::MalwareProtectionPlan", - "AWS::GuardDuty::Member", - "AWS::GuardDuty::ThreatIntelSet", - "AWS::HealthLake::FHIRDatastore", - "AWS::IAM::Group", - "AWS::IAM::GroupPolicy", - "AWS::IAM::InstanceProfile", - "AWS::IAM::ManagedPolicy", - "AWS::IAM::OIDCProvider", - "AWS::IAM::Role", - "AWS::IAM::RolePolicy", - "AWS::IAM::SAMLProvider", - "AWS::IAM::ServerCertificate", - "AWS::IAM::ServiceLinkedRole", - "AWS::IAM::User", - "AWS::IAM::UserPolicy", - "AWS::IAM::VirtualMFADevice", - "AWS::IVS::Channel", - "AWS::IVS::EncoderConfiguration", - "AWS::IVS::PlaybackKeyPair", - "AWS::IVS::PlaybackRestrictionPolicy", - "AWS::IVS::PublicKey", - "AWS::IVS::RecordingConfiguration", - "AWS::IVS::Stage", - "AWS::IVS::StorageConfiguration", - "AWS::IVS::StreamKey", - "AWS::IVSChat::LoggingConfiguration", - "AWS::IVSChat::Room", - "AWS::IdentityStore::Group", - "AWS::ImageBuilder::DistributionConfiguration", - "AWS::ImageBuilder::ImagePipeline", - "AWS::ImageBuilder::InfrastructureConfiguration", - "AWS::ImageBuilder::LifecyclePolicy", - "AWS::Inspector::AssessmentTarget", - "AWS::InspectorV2::CisScanConfiguration", - "AWS::InspectorV2::Filter", - "AWS::InternetMonitor::Monitor", - "AWS::IoT::AccountAuditConfiguration", - "AWS::IoT::Authorizer", - "AWS::IoT::BillingGroup", - "AWS::IoT::CACertificate", - "AWS::IoT::Certificate", - "AWS::IoT::CertificateProvider", - "AWS::IoT::CustomMetric", - "AWS::IoT::Dimension", - "AWS::IoT::DomainConfiguration", - "AWS::IoT::FleetMetric", - "AWS::IoT::Logging", - "AWS::IoT::MitigationAction", - "AWS::IoT::Policy", - "AWS::IoT::ProvisioningTemplate", - "AWS::IoT::ResourceSpecificLogging", - "AWS::IoT::RoleAlias", - "AWS::IoT::ScheduledAudit", - "AWS::IoT::SecurityProfile", - "AWS::IoT::SoftwarePackage", - "AWS::IoT::SoftwarePackageVersion", - "AWS::IoT::Thing", - "AWS::IoT::ThingGroup", - "AWS::IoT::ThingType", - "AWS::IoT::TopicRule", - "AWS::IoT::TopicRuleDestination", - "AWS::IoTAnalytics::Channel", - "AWS::IoTAnalytics::Dataset", - "AWS::IoTAnalytics::Datastore", - "AWS::IoTAnalytics::Pipeline", - "AWS::IoTCoreDeviceAdvisor::SuiteDefinition", - "AWS::IoTEvents::AlarmModel", - "AWS::IoTEvents::DetectorModel", - "AWS::IoTEvents::Input", - "AWS::IoTFleetHub::Application", - "AWS::IoTFleetWise::Campaign", - "AWS::IoTFleetWise::DecoderManifest", - "AWS::IoTFleetWise::Fleet", - "AWS::IoTFleetWise::ModelManifest", - "AWS::IoTFleetWise::SignalCatalog", - "AWS::IoTFleetWise::Vehicle", - "AWS::IoTSiteWise::AccessPolicy", - "AWS::IoTSiteWise::Asset", - "AWS::IoTSiteWise::AssetModel", - "AWS::IoTSiteWise::Dashboard", - "AWS::IoTSiteWise::Gateway", - "AWS::IoTSiteWise::Portal", - "AWS::IoTSiteWise::Project", - "AWS::IoTTwinMaker::ComponentType", - "AWS::IoTTwinMaker::Entity", - "AWS::IoTTwinMaker::Scene", - "AWS::IoTTwinMaker::Workspace", - "AWS::IoTWireless::Destination", - "AWS::IoTWireless::FuotaTask", - "AWS::IoTWireless::MulticastGroup", - "AWS::IoTWireless::NetworkAnalyzerConfiguration", - "AWS::IoTWireless::PartnerAccount", - "AWS::IoTWireless::WirelessDevice", - "AWS::IoTWireless::WirelessDeviceImportTask", - "AWS::IoTWireless::WirelessGateway", - "AWS::KMS::Alias", - "AWS::KMS::Key", - "AWS::KMS::ReplicaKey", - "AWS::KafkaConnect::Connector", - "AWS::KafkaConnect::CustomPlugin", - "AWS::KafkaConnect::WorkerConfiguration", - "AWS::Kendra::DataSource", - "AWS::Kendra::Faq", - "AWS::Kendra::Index", - "AWS::KendraRanking::ExecutionPlan", - "AWS::Kinesis::Stream", - "AWS::KinesisAnalyticsV2::Application", - "AWS::KinesisFirehose::DeliveryStream", - "AWS::KinesisVideo::SignalingChannel", - "AWS::KinesisVideo::Stream", - "AWS::LakeFormation::Tag", - "AWS::Lambda::Alias", - "AWS::Lambda::CodeSigningConfig", - "AWS::Lambda::EventInvokeConfig", - "AWS::Lambda::EventSourceMapping", - "AWS::Lambda::Function", - "AWS::Lambda::Url", - "AWS::LaunchWizard::Deployment", - "AWS::Lex::Bot", - "AWS::Lex::BotAlias", - "AWS::Lex::ResourcePolicy", - "AWS::LicenseManager::Grant", - "AWS::LicenseManager::License", - "AWS::Lightsail::Alarm", - "AWS::Lightsail::Bucket", - "AWS::Lightsail::Certificate", - "AWS::Lightsail::Container", - "AWS::Lightsail::Database", - "AWS::Lightsail::Disk", - "AWS::Lightsail::Distribution", - "AWS::Lightsail::Instance", - "AWS::Lightsail::LoadBalancer", - "AWS::Lightsail::LoadBalancerTlsCertificate", - "AWS::Lightsail::StaticIp", - "AWS::Location::APIKey", - "AWS::Location::GeofenceCollection", - "AWS::Location::Map", - "AWS::Location::PlaceIndex", - "AWS::Location::RouteCalculator", - "AWS::Location::Tracker", - "AWS::Logs::AccountPolicy", - "AWS::Logs::Delivery", - "AWS::Logs::DeliveryDestination", - "AWS::Logs::DeliverySource", - "AWS::Logs::Destination", - "AWS::Logs::LogAnomalyDetector", - "AWS::Logs::LogGroup", - "AWS::Logs::MetricFilter", - "AWS::Logs::QueryDefinition", - "AWS::Logs::ResourcePolicy", - "AWS::Logs::SubscriptionFilter", - "AWS::LookoutEquipment::InferenceScheduler", - "AWS::LookoutMetrics::AnomalyDetector", - "AWS::LookoutVision::Project", - "AWS::M2::Application", - "AWS::M2::Environment", - "AWS::MSK::BatchScramSecret", - "AWS::MSK::Cluster", - "AWS::MSK::ClusterPolicy", - "AWS::MSK::Configuration", - "AWS::MSK::Replicator", - "AWS::MSK::VpcConnection", - "AWS::MWAA::Environment", - "AWS::Macie::AllowList", - "AWS::Macie::CustomDataIdentifier", - "AWS::Macie::FindingsFilter", - "AWS::Macie::Session", - "AWS::ManagedBlockchain::Accessor", - "AWS::MediaConnect::Bridge", - "AWS::MediaConnect::BridgeOutput", - "AWS::MediaConnect::BridgeSource", - "AWS::MediaConnect::Flow", - "AWS::MediaConnect::FlowEntitlement", - "AWS::MediaConnect::FlowOutput", - "AWS::MediaConnect::FlowSource", - "AWS::MediaConnect::FlowVpcInterface", - "AWS::MediaLive::ChannelPlacementGroup", - "AWS::MediaLive::CloudWatchAlarmTemplate", - "AWS::MediaLive::CloudWatchAlarmTemplateGroup", - "AWS::MediaLive::Cluster", - "AWS::MediaLive::EventBridgeRuleTemplate", - "AWS::MediaLive::EventBridgeRuleTemplateGroup", - "AWS::MediaLive::Multiplex", - "AWS::MediaLive::Multiplexprogram", - "AWS::MediaLive::Network", - "AWS::MediaLive::SdiSource", - "AWS::MediaLive::SignalMap", - "AWS::MediaPackage::Channel", - "AWS::MediaPackage::OriginEndpoint", - "AWS::MediaPackage::PackagingGroup", - "AWS::MediaPackageV2::Channel", - "AWS::MediaPackageV2::ChannelGroup", - "AWS::MediaPackageV2::ChannelPolicy", - "AWS::MediaPackageV2::OriginEndpoint", - "AWS::MediaPackageV2::OriginEndpointPolicy", - "AWS::MediaTailor::Channel", - "AWS::MediaTailor::ChannelPolicy", - "AWS::MediaTailor::LiveSource", - "AWS::MediaTailor::PlaybackConfiguration", - "AWS::MediaTailor::SourceLocation", - "AWS::MediaTailor::VodSource", - "AWS::MemoryDB::ACL", - "AWS::MemoryDB::Cluster", - "AWS::MemoryDB::ParameterGroup", - "AWS::MemoryDB::SubnetGroup", - "AWS::MemoryDB::User", - "AWS::Neptune::DBCluster", - "AWS::NeptuneGraph::Graph", - "AWS::NeptuneGraph::PrivateGraphEndpoint", - "AWS::NetworkFirewall::Firewall", - "AWS::NetworkFirewall::FirewallPolicy", - "AWS::NetworkFirewall::LoggingConfiguration", - "AWS::NetworkFirewall::RuleGroup", - "AWS::NetworkFirewall::TLSInspectionConfiguration", - "AWS::NetworkManager::ConnectAttachment", - "AWS::NetworkManager::ConnectPeer", - "AWS::NetworkManager::CoreNetwork", - "AWS::NetworkManager::Device", - "AWS::NetworkManager::GlobalNetwork", - "AWS::NetworkManager::Link", - "AWS::NetworkManager::Site", - "AWS::NetworkManager::SiteToSiteVpnAttachment", - "AWS::NetworkManager::TransitGatewayPeering", - "AWS::NetworkManager::TransitGatewayRouteTableAttachment", - "AWS::NetworkManager::VpcAttachment", - "AWS::NimbleStudio::LaunchProfile", - "AWS::NimbleStudio::StreamingImage", - "AWS::NimbleStudio::Studio", - "AWS::NimbleStudio::StudioComponent", - "AWS::OSIS::Pipeline", - "AWS::Oam::Link", - "AWS::Oam::Sink", - "AWS::Omics::AnnotationStore", - "AWS::Omics::RunGroup", - "AWS::Omics::VariantStore", - "AWS::Omics::Workflow", - "AWS::OpenSearchServerless::AccessPolicy", - "AWS::OpenSearchServerless::Collection", - "AWS::OpenSearchServerless::LifecyclePolicy", - "AWS::OpenSearchServerless::SecurityConfig", - "AWS::OpenSearchServerless::SecurityPolicy", - "AWS::OpenSearchServerless::VpcEndpoint", - "AWS::OpenSearchService::Domain", - "AWS::OpsWorksCM::Server", - "AWS::Organizations::Account", - "AWS::Organizations::Organization", - "AWS::Organizations::OrganizationalUnit", - "AWS::Organizations::Policy", - "AWS::Organizations::ResourcePolicy", - "AWS::PCAConnectorAD::Connector", - "AWS::PCAConnectorAD::DirectoryRegistration", - "AWS::PCAConnectorAD::Template", - "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", - "AWS::PCAConnectorSCEP::Challenge", - "AWS::PCAConnectorSCEP::Connector", - "AWS::Panorama::ApplicationInstance", - "AWS::Panorama::Package", - "AWS::Panorama::PackageVersion", - "AWS::PaymentCryptography::Alias", - "AWS::PaymentCryptography::Key", - "AWS::Personalize::Dataset", - "AWS::Pinpoint::InAppTemplate", - "AWS::Pipes::Pipe", - "AWS::Proton::EnvironmentAccountConnection", - "AWS::Proton::EnvironmentTemplate", - "AWS::Proton::ServiceTemplate", - "AWS::QBusiness::Application", - "AWS::QBusiness::DataSource", - "AWS::QBusiness::Index", - "AWS::QBusiness::Plugin", - "AWS::QBusiness::Retriever", - "AWS::QBusiness::WebExperience", - "AWS::QLDB::Stream", - "AWS::QuickSight::Analysis", - "AWS::QuickSight::Dashboard", - "AWS::QuickSight::DataSet", - "AWS::QuickSight::DataSource", - "AWS::QuickSight::RefreshSchedule", - "AWS::QuickSight::Template", - "AWS::QuickSight::Theme", - "AWS::QuickSight::Topic", - "AWS::QuickSight::VPCConnection", - "AWS::RAM::Permission", - "AWS::RDS::CustomDBEngineVersion", - "AWS::RDS::DBCluster", - "AWS::RDS::DBClusterParameterGroup", - "AWS::RDS::DBInstance", - "AWS::RDS::DBParameterGroup", - "AWS::RDS::DBProxy", - "AWS::RDS::DBProxyEndpoint", - "AWS::RDS::DBProxyTargetGroup", - "AWS::RDS::DBSubnetGroup", - "AWS::RDS::EventSubscription", - "AWS::RDS::GlobalCluster", - "AWS::RDS::Integration", - "AWS::RDS::OptionGroup", - "AWS::RUM::AppMonitor", - "AWS::Redshift::Cluster", - "AWS::Redshift::ClusterParameterGroup", - "AWS::Redshift::ClusterSubnetGroup", - "AWS::Redshift::EndpointAccess", - "AWS::Redshift::EndpointAuthorization", - "AWS::Redshift::EventSubscription", - "AWS::Redshift::ScheduledAction", - "AWS::RedshiftServerless::Namespace", - "AWS::RedshiftServerless::Workgroup", - "AWS::RefactorSpaces::Route", - "AWS::Rekognition::Collection", - "AWS::Rekognition::Project", - "AWS::Rekognition::StreamProcessor", - "AWS::ResilienceHub::App", - "AWS::ResilienceHub::ResiliencyPolicy", - "AWS::ResourceExplorer2::DefaultViewAssociation", - "AWS::ResourceExplorer2::Index", - "AWS::ResourceExplorer2::View", - "AWS::ResourceGroups::Group", - "AWS::RoboMaker::Fleet", - "AWS::RoboMaker::Robot", - "AWS::RoboMaker::RobotApplication", - "AWS::RoboMaker::SimulationApplication", - "AWS::RolesAnywhere::CRL", - "AWS::RolesAnywhere::Profile", - "AWS::RolesAnywhere::TrustAnchor", - "AWS::Route53::CidrCollection", - "AWS::Route53::HealthCheck", - "AWS::Route53::HostedZone", - "AWS::Route53::KeySigningKey", - "AWS::Route53Profiles::Profile", - "AWS::Route53Profiles::ProfileAssociation", - "AWS::Route53Profiles::ProfileResourceAssociation", - "AWS::Route53RecoveryControl::ControlPanel", - "AWS::Route53RecoveryControl::RoutingControl", - "AWS::Route53RecoveryControl::SafetyRule", - "AWS::Route53RecoveryReadiness::Cell", - "AWS::Route53RecoveryReadiness::ReadinessCheck", - "AWS::Route53RecoveryReadiness::RecoveryGroup", - "AWS::Route53RecoveryReadiness::ResourceSet", - "AWS::Route53Resolver::FirewallDomainList", - "AWS::Route53Resolver::FirewallRuleGroup", - "AWS::Route53Resolver::FirewallRuleGroupAssociation", - "AWS::Route53Resolver::OutpostResolver", - "AWS::Route53Resolver::ResolverRule", - "AWS::S3::AccessGrant", - "AWS::S3::AccessGrantsInstance", - "AWS::S3::AccessGrantsLocation", - "AWS::S3::AccessPoint", - "AWS::S3::Bucket", - "AWS::S3::BucketPolicy", - "AWS::S3::MultiRegionAccessPointPolicy", - "AWS::S3::StorageLens", - "AWS::S3::StorageLensGroup", - "AWS::S3Express::BucketPolicy", - "AWS::S3ObjectLambda::AccessPoint", - "AWS::S3ObjectLambda::AccessPointPolicy", - "AWS::S3Outposts::AccessPoint", - "AWS::S3Outposts::Bucket", - "AWS::S3Outposts::BucketPolicy", - "AWS::SES::ConfigurationSet", - "AWS::SES::ConfigurationSetEventDestination", - "AWS::SES::ContactList", - "AWS::SES::DedicatedIpPool", - "AWS::SES::EmailIdentity", - "AWS::SES::MailManagerAddonInstance", - "AWS::SES::MailManagerAddonSubscription", - "AWS::SES::MailManagerArchive", - "AWS::SES::MailManagerIngressPoint", - "AWS::SES::MailManagerRelay", - "AWS::SES::MailManagerRuleSet", - "AWS::SES::MailManagerTrafficPolicy", - "AWS::SES::Template", - "AWS::SES::VdmAttributes", - "AWS::SNS::Subscription", - "AWS::SNS::Topic", - "AWS::SNS::TopicInlinePolicy", - "AWS::SQS::Queue", - "AWS::SQS::QueueInlinePolicy", - "AWS::SSM::Association", - "AWS::SSM::Document", - "AWS::SSM::Parameter", - "AWS::SSM::PatchBaseline", - "AWS::SSM::ResourceDataSync", - "AWS::SSM::ResourcePolicy", - "AWS::SSMContacts::Contact", - "AWS::SSMContacts::ContactChannel", - "AWS::SSMContacts::Plan", - "AWS::SSMContacts::Rotation", - "AWS::SSMIncidents::ReplicationSet", - "AWS::SSMIncidents::ResponsePlan", - "AWS::SSMQuickSetup::ConfigurationManager", - "AWS::SSO::Application", - "AWS::SSO::Instance", - "AWS::SSO::InstanceAccessControlAttributeConfiguration", - "AWS::SSO::PermissionSet", - "AWS::SageMaker::AppImageConfig", - "AWS::SageMaker::Cluster", - "AWS::SageMaker::Device", - "AWS::SageMaker::DeviceFleet", - "AWS::SageMaker::Domain", - "AWS::SageMaker::FeatureGroup", - "AWS::SageMaker::Image", - "AWS::SageMaker::ImageVersion", - "AWS::SageMaker::InferenceComponent", - "AWS::SageMaker::InferenceExperiment", - "AWS::SageMaker::MlflowTrackingServer", - "AWS::SageMaker::ModelCard", - "AWS::SageMaker::ModelPackage", - "AWS::SageMaker::ModelPackageGroup", - "AWS::SageMaker::MonitoringSchedule", - "AWS::SageMaker::Pipeline", - "AWS::SageMaker::Project", - "AWS::SageMaker::Space", - "AWS::SageMaker::UserProfile", - "AWS::Scheduler::Schedule", - "AWS::Scheduler::ScheduleGroup", - "AWS::SecretsManager::ResourcePolicy", - "AWS::SecretsManager::Secret", - "AWS::SecurityHub::AutomationRule", - "AWS::SecurityHub::ConfigurationPolicy", - "AWS::SecurityHub::FindingAggregator", - "AWS::SecurityHub::Hub", - "AWS::SecurityHub::Insight", - "AWS::SecurityHub::OrganizationConfiguration", - "AWS::SecurityHub::PolicyAssociation", - "AWS::SecurityHub::SecurityControl", - "AWS::SecurityHub::Standard", - "AWS::SecurityLake::AwsLogSource", - "AWS::SecurityLake::DataLake", - "AWS::SecurityLake::Subscriber", - "AWS::SecurityLake::SubscriberNotification", - "AWS::ServiceCatalog::CloudFormationProvisionedProduct", - "AWS::ServiceCatalog::ServiceAction", - "AWS::ServiceCatalogAppRegistry::Application", - "AWS::ServiceCatalogAppRegistry::AttributeGroup", - "AWS::Shield::DRTAccess", - "AWS::Shield::ProactiveEngagement", - "AWS::Shield::Protection", - "AWS::Shield::ProtectionGroup", - "AWS::Signer::SigningProfile", - "AWS::SimSpaceWeaver::Simulation", - "AWS::StepFunctions::Activity", - "AWS::StepFunctions::StateMachine", - "AWS::StepFunctions::StateMachineAlias", - "AWS::SupportApp::AccountAlias", - "AWS::SupportApp::SlackChannelConfiguration", - "AWS::SupportApp::SlackWorkspaceConfiguration", - "AWS::Synthetics::Canary", - "AWS::Synthetics::Group", - "AWS::SystemsManagerSAP::Application", - "AWS::Timestream::Database", - "AWS::Timestream::InfluxDBInstance", - "AWS::Timestream::ScheduledQuery", - "AWS::Timestream::Table", - "AWS::Transfer::Agreement", - "AWS::Transfer::Certificate", - "AWS::Transfer::Connector", - "AWS::Transfer::Profile", - "AWS::Transfer::Workflow", - "AWS::VerifiedPermissions::IdentitySource", - "AWS::VerifiedPermissions::Policy", - "AWS::VerifiedPermissions::PolicyStore", - "AWS::VerifiedPermissions::PolicyTemplate", - "AWS::VoiceID::Domain", - "AWS::VpcLattice::AccessLogSubscription", - "AWS::VpcLattice::AuthPolicy", - "AWS::VpcLattice::Listener", - "AWS::VpcLattice::ResourcePolicy", - "AWS::VpcLattice::Rule", - "AWS::VpcLattice::Service", - "AWS::VpcLattice::ServiceNetwork", - "AWS::VpcLattice::ServiceNetworkServiceAssociation", - "AWS::VpcLattice::ServiceNetworkVpcAssociation", - "AWS::VpcLattice::TargetGroup", - "AWS::WAFv2::IPSet", - "AWS::WAFv2::LoggingConfiguration", - "AWS::WAFv2::RegexPatternSet", - "AWS::WAFv2::RuleGroup", - "AWS::WAFv2::WebACL", - "AWS::WAFv2::WebACLAssociation", - "AWS::Wisdom::Assistant", - "AWS::Wisdom::AssistantAssociation", - "AWS::Wisdom::KnowledgeBase", - "AWS::WorkSpaces::WorkspacesPool", - "AWS::WorkSpacesThinClient::Environment", - "AWS::WorkSpacesWeb::BrowserSettings", - "AWS::WorkSpacesWeb::IdentityProvider", - "AWS::WorkSpacesWeb::IpAccessSettings", - "AWS::WorkSpacesWeb::NetworkSettings", - "AWS::WorkSpacesWeb::Portal", - "AWS::WorkSpacesWeb::TrustStore", - "AWS::WorkSpacesWeb::UserAccessLoggingSettings", - "AWS::WorkSpacesWeb::UserSettings", - "AWS::XRay::Group", - "AWS::XRay::ResourcePolicy", - "AWS::XRay::SamplingRule" + "AWS::ACMPCA::CertificateAuthority", + "AWS::ACMPCA::CertificateAuthorityActivation", + "AWS::APS::RuleGroupsNamespace", + "AWS::APS::Scraper", + "AWS::APS::Workspace", + "AWS::ARCZonalShift::ZonalAutoshiftConfiguration", + "AWS::AccessAnalyzer::Analyzer", + "AWS::Amplify::App", + "AWS::Amplify::Branch", + "AWS::Amplify::Domain", + "AWS::AmplifyUIBuilder::Component", + "AWS::AmplifyUIBuilder::Form", + "AWS::AmplifyUIBuilder::Theme", + "AWS::ApiGateway::Account", + "AWS::ApiGateway::ApiKey", + "AWS::ApiGateway::Authorizer", + "AWS::ApiGateway::BasePathMapping", + "AWS::ApiGateway::ClientCertificate", + "AWS::ApiGateway::Deployment", + "AWS::ApiGateway::DocumentationPart", + "AWS::ApiGateway::DocumentationVersion", + "AWS::ApiGateway::DomainName", + "AWS::ApiGateway::GatewayResponse", + "AWS::ApiGateway::Method", + "AWS::ApiGateway::Model", + "AWS::ApiGateway::RequestValidator", + "AWS::ApiGateway::Resource", + "AWS::ApiGateway::RestApi", + "AWS::ApiGateway::Stage", + "AWS::ApiGateway::UsagePlan", + "AWS::ApiGateway::VpcLink", + "AWS::ApiGatewayV2::Api", + "AWS::ApiGatewayV2::ApiMapping", + "AWS::ApiGatewayV2::Authorizer", + "AWS::ApiGatewayV2::Deployment", + "AWS::ApiGatewayV2::DomainName", + "AWS::ApiGatewayV2::IntegrationResponse", + "AWS::ApiGatewayV2::Model", + "AWS::ApiGatewayV2::Route", + "AWS::ApiGatewayV2::RouteResponse", + "AWS::ApiGatewayV2::VpcLink", + "AWS::AppConfig::Application", + "AWS::AppConfig::ConfigurationProfile", + "AWS::AppConfig::Environment", + "AWS::AppConfig::Extension", + "AWS::AppConfig::ExtensionAssociation", + "AWS::AppFlow::Connector", + "AWS::AppFlow::ConnectorProfile", + "AWS::AppFlow::Flow", + "AWS::AppIntegrations::Application", + "AWS::AppIntegrations::DataIntegration", + "AWS::AppIntegrations::EventIntegration", + "AWS::AppRunner::Service", + "AWS::AppRunner::VpcIngressConnection", + "AWS::AppStream::AppBlockBuilder", + "AWS::AppStream::Application", + "AWS::AppStream::DirectoryConfig", + "AWS::AppStream::Entitlement", + "AWS::AppSync::DomainName", + "AWS::AppSync::DomainNameApiAssociation", + "AWS::AppSync::FunctionConfiguration", + "AWS::AppSync::Resolver", + "AWS::AppSync::SourceApiAssociation", + "AWS::AppTest::TestCase", + "AWS::ApplicationAutoScaling::ScalableTarget", + "AWS::ApplicationAutoScaling::ScalingPolicy", + "AWS::ApplicationInsights::Application", + "AWS::ApplicationSignals::ServiceLevelObjective", + "AWS::Athena::CapacityReservation", + "AWS::Athena::DataCatalog", + "AWS::Athena::PreparedStatement", + "AWS::Athena::WorkGroup", + "AWS::AuditManager::Assessment", + "AWS::AutoScaling::AutoScalingGroup", + "AWS::AutoScaling::LifecycleHook", + "AWS::AutoScaling::ScalingPolicy", + "AWS::AutoScaling::ScheduledAction", + "AWS::AutoScaling::WarmPool", + "AWS::B2BI::Capability", + "AWS::B2BI::Partnership", + "AWS::B2BI::Profile", + "AWS::B2BI::Transformer", + "AWS::BCMDataExports::Export", + "AWS::Backup::BackupPlan", + "AWS::Backup::BackupVault", + "AWS::Backup::Framework", + "AWS::Backup::ReportPlan", + "AWS::Backup::RestoreTestingPlan", + "AWS::Backup::RestoreTestingSelection", + "AWS::BackupGateway::Hypervisor", + "AWS::Batch::ComputeEnvironment", + "AWS::Batch::JobQueue", + "AWS::Batch::SchedulingPolicy", + "AWS::Bedrock::Agent", + "AWS::Bedrock::AgentAlias", + "AWS::Bedrock::DataSource", + "AWS::Bedrock::Flow", + "AWS::Bedrock::FlowAlias", + "AWS::Bedrock::FlowVersion", + "AWS::Bedrock::Guardrail", + "AWS::Bedrock::KnowledgeBase", + "AWS::Bedrock::Prompt", + "AWS::Bedrock::PromptVersion", + "AWS::BillingConductor::BillingGroup", + "AWS::BillingConductor::CustomLineItem", + "AWS::BillingConductor::PricingPlan", + "AWS::BillingConductor::PricingRule", + "AWS::Budgets::BudgetsAction", + "AWS::CE::AnomalyMonitor", + "AWS::CE::AnomalySubscription", + "AWS::CE::CostCategory", + "AWS::CUR::ReportDefinition", + "AWS::Cassandra::Keyspace", + "AWS::Cassandra::Table", + "AWS::CertificateManager::Account", + "AWS::Chatbot::MicrosoftTeamsChannelConfiguration", + "AWS::Chatbot::SlackChannelConfiguration", + "AWS::CleanRooms::AnalysisTemplate", + "AWS::CleanRooms::Collaboration", + "AWS::CleanRooms::ConfiguredTable", + "AWS::CleanRooms::ConfiguredTableAssociation", + "AWS::CleanRooms::IdMappingTable", + "AWS::CleanRooms::IdNamespaceAssociation", + "AWS::CleanRooms::Membership", + "AWS::CleanRooms::PrivacyBudgetTemplate", + "AWS::CleanRoomsML::TrainingDataset", + "AWS::CloudFormation::HookDefaultVersion", + "AWS::CloudFormation::HookTypeConfig", + "AWS::CloudFormation::ResourceDefaultVersion", + "AWS::CloudFormation::Stack", + "AWS::CloudFormation::StackSet", + "AWS::CloudFormation::TypeActivation", + "AWS::CloudFront::CachePolicy", + "AWS::CloudFront::CloudFrontOriginAccessIdentity", + "AWS::CloudFront::ContinuousDeploymentPolicy", + "AWS::CloudFront::Distribution", + "AWS::CloudFront::Function", + "AWS::CloudFront::KeyGroup", + "AWS::CloudFront::KeyValueStore", + "AWS::CloudFront::OriginAccessControl", + "AWS::CloudFront::OriginRequestPolicy", + "AWS::CloudFront::PublicKey", + "AWS::CloudFront::RealtimeLogConfig", + "AWS::CloudFront::ResponseHeadersPolicy", + "AWS::CloudTrail::Channel", + "AWS::CloudTrail::EventDataStore", + "AWS::CloudTrail::ResourcePolicy", + "AWS::CloudTrail::Trail", + "AWS::CloudWatch::Alarm", + "AWS::CloudWatch::CompositeAlarm", + "AWS::CloudWatch::Dashboard", + "AWS::CloudWatch::MetricStream", + "AWS::CodeArtifact::Domain", + "AWS::CodeArtifact::PackageGroup", + "AWS::CodeArtifact::Repository", + "AWS::CodeBuild::Fleet", + "AWS::CodeConnections::Connection", + "AWS::CodeDeploy::Application", + "AWS::CodeGuruProfiler::ProfilingGroup", + "AWS::CodePipeline::CustomActionType", + "AWS::CodePipeline::Pipeline", + "AWS::CodeStarConnections::Connection", + "AWS::CodeStarConnections::RepositoryLink", + "AWS::CodeStarConnections::SyncConfiguration", + "AWS::CodeStarNotifications::NotificationRule", + "AWS::Cognito::IdentityPool", + "AWS::Cognito::IdentityPoolPrincipalTag", + "AWS::Cognito::IdentityPoolRoleAttachment", + "AWS::Cognito::LogDeliveryConfiguration", + "AWS::Cognito::UserPool", + "AWS::Cognito::UserPoolClient", + "AWS::Cognito::UserPoolGroup", + "AWS::Cognito::UserPoolResourceServer", + "AWS::Cognito::UserPoolRiskConfigurationAttachment", + "AWS::Cognito::UserPoolUICustomizationAttachment", + "AWS::Comprehend::DocumentClassifier", + "AWS::Comprehend::Flywheel", + "AWS::Config::AggregationAuthorization", + "AWS::Config::ConfigRule", + "AWS::Config::ConfigurationAggregator", + "AWS::Config::ConformancePack", + "AWS::Config::OrganizationConformancePack", + "AWS::Config::StoredQuery", + "AWS::Connect::ApprovedOrigin", + "AWS::Connect::ContactFlow", + "AWS::Connect::ContactFlowModule", + "AWS::Connect::EvaluationForm", + "AWS::Connect::HoursOfOperation", + "AWS::Connect::Instance", + "AWS::Connect::InstanceStorageConfig", + "AWS::Connect::IntegrationAssociation", + "AWS::Connect::PhoneNumber", + "AWS::Connect::PredefinedAttribute", + "AWS::Connect::Prompt", + "AWS::Connect::Queue", + "AWS::Connect::QuickConnect", + "AWS::Connect::RoutingProfile", + "AWS::Connect::Rule", + "AWS::Connect::SecurityKey", + "AWS::Connect::SecurityProfile", + "AWS::Connect::TaskTemplate", + "AWS::Connect::TrafficDistributionGroup", + "AWS::Connect::User", + "AWS::Connect::UserHierarchyGroup", + "AWS::Connect::View", + "AWS::Connect::ViewVersion", + "AWS::ConnectCampaigns::Campaign", + "AWS::ControlTower::EnabledBaseline", + "AWS::ControlTower::EnabledControl", + "AWS::ControlTower::LandingZone", + "AWS::CustomerProfiles::CalculatedAttributeDefinition", + "AWS::CustomerProfiles::Domain", + "AWS::CustomerProfiles::EventStream", + "AWS::CustomerProfiles::Integration", + "AWS::CustomerProfiles::ObjectType", + "AWS::DMS::DataProvider", + "AWS::DMS::InstanceProfile", + "AWS::DMS::MigrationProject", + "AWS::DMS::ReplicationConfig", + "AWS::DataBrew::Dataset", + "AWS::DataBrew::Job", + "AWS::DataBrew::Project", + "AWS::DataBrew::Recipe", + "AWS::DataBrew::Ruleset", + "AWS::DataBrew::Schedule", + "AWS::DataPipeline::Pipeline", + "AWS::DataSync::Agent", + "AWS::DataSync::LocationAzureBlob", + "AWS::DataSync::LocationEFS", + "AWS::DataSync::LocationFSxLustre", + "AWS::DataSync::LocationFSxONTAP", + "AWS::DataSync::LocationFSxOpenZFS", + "AWS::DataSync::LocationFSxWindows", + "AWS::DataSync::LocationHDFS", + "AWS::DataSync::LocationNFS", + "AWS::DataSync::LocationObjectStorage", + "AWS::DataSync::LocationS3", + "AWS::DataSync::LocationSMB", + "AWS::DataSync::StorageSystem", + "AWS::DataSync::Task", + "AWS::DataZone::DataSource", + "AWS::DataZone::Domain", + "AWS::DataZone::Environment", + "AWS::DataZone::EnvironmentBlueprintConfiguration", + "AWS::DataZone::EnvironmentProfile", + "AWS::DataZone::GroupProfile", + "AWS::DataZone::Project", + "AWS::DataZone::ProjectMembership", + "AWS::DataZone::SubscriptionTarget", + "AWS::DataZone::UserProfile", + "AWS::Deadline::Farm", + "AWS::Deadline::Fleet", + "AWS::Deadline::LicenseEndpoint", + "AWS::Deadline::Monitor", + "AWS::Deadline::Queue", + "AWS::Deadline::QueueEnvironment", + "AWS::Deadline::StorageProfile", + "AWS::Detective::Graph", + "AWS::Detective::MemberInvitation", + "AWS::Detective::OrganizationAdmin", + "AWS::DevOpsGuru::LogAnomalyDetectionIntegration", + "AWS::DevOpsGuru::ResourceCollection", + "AWS::DirectoryService::SimpleAD", + "AWS::DocDBElastic::Cluster", + "AWS::DynamoDB::GlobalTable", + "AWS::DynamoDB::Table", + "AWS::EC2::CapacityReservation", + "AWS::EC2::CapacityReservationFleet", + "AWS::EC2::CarrierGateway", + "AWS::EC2::CustomerGateway", + "AWS::EC2::DHCPOptions", + "AWS::EC2::EC2Fleet", + "AWS::EC2::EIP", + "AWS::EC2::FlowLog", + "AWS::EC2::GatewayRouteTableAssociation", + "AWS::EC2::Host", + "AWS::EC2::IPAM", + "AWS::EC2::IPAMPool", + "AWS::EC2::IPAMResourceDiscovery", + "AWS::EC2::IPAMResourceDiscoveryAssociation", + "AWS::EC2::IPAMScope", + "AWS::EC2::Instance", + "AWS::EC2::InstanceConnectEndpoint", + "AWS::EC2::InternetGateway", + "AWS::EC2::LaunchTemplate", + "AWS::EC2::LocalGatewayRoute", + "AWS::EC2::LocalGatewayRouteTable", + "AWS::EC2::LocalGatewayRouteTableVPCAssociation", + "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation", + "AWS::EC2::NatGateway", + "AWS::EC2::NetworkAcl", + "AWS::EC2::NetworkInsightsAccessScope", + "AWS::EC2::NetworkInsightsAccessScopeAnalysis", + "AWS::EC2::NetworkInsightsAnalysis", + "AWS::EC2::NetworkInsightsPath", + "AWS::EC2::NetworkInterface", + "AWS::EC2::NetworkInterfaceAttachment", + "AWS::EC2::PrefixList", + "AWS::EC2::Route", + "AWS::EC2::RouteTable", + "AWS::EC2::SecurityGroup", + "AWS::EC2::SecurityGroupEgress", + "AWS::EC2::SecurityGroupIngress", + "AWS::EC2::SnapshotBlockPublicAccess", + "AWS::EC2::SpotFleet", + "AWS::EC2::Subnet", + "AWS::EC2::TransitGateway", + "AWS::EC2::TransitGatewayAttachment", + "AWS::EC2::TransitGatewayConnect", + "AWS::EC2::TransitGatewayMulticastDomain", + "AWS::EC2::TransitGatewayPeeringAttachment", + "AWS::EC2::TransitGatewayVpcAttachment", + "AWS::EC2::VPC", + "AWS::EC2::VPCDHCPOptionsAssociation", + "AWS::EC2::VPCEndpoint", + "AWS::EC2::VPCEndpointConnectionNotification", + "AWS::EC2::VPCEndpointService", + "AWS::EC2::VPCEndpointServicePermissions", + "AWS::EC2::VPCGatewayAttachment", + "AWS::EC2::VPCPeeringConnection", + "AWS::EC2::VPNConnection", + "AWS::EC2::VPNGateway", + "AWS::EC2::VerifiedAccessEndpoint", + "AWS::EC2::VerifiedAccessGroup", + "AWS::EC2::VerifiedAccessInstance", + "AWS::EC2::VerifiedAccessTrustProvider", + "AWS::EC2::Volume", + "AWS::ECR::PublicRepository", + "AWS::ECR::PullThroughCacheRule", + "AWS::ECR::RegistryPolicy", + "AWS::ECR::ReplicationConfiguration", + "AWS::ECR::Repository", + "AWS::ECR::RepositoryCreationTemplate", + "AWS::ECS::CapacityProvider", + "AWS::ECS::Cluster", + "AWS::ECS::ClusterCapacityProviderAssociations", + "AWS::ECS::PrimaryTaskSet", + "AWS::ECS::Service", + "AWS::ECS::TaskDefinition", + "AWS::ECS::TaskSet", + "AWS::EFS::AccessPoint", + "AWS::EFS::FileSystem", + "AWS::EFS::MountTarget", + "AWS::EKS::AccessEntry", + "AWS::EKS::Addon", + "AWS::EKS::Cluster", + "AWS::EKS::FargateProfile", + "AWS::EKS::IdentityProviderConfig", + "AWS::EKS::Nodegroup", + "AWS::EKS::PodIdentityAssociation", + "AWS::EMR::Studio", + "AWS::EMR::StudioSessionMapping", + "AWS::EMR::WALWorkspace", + "AWS::EMRContainers::VirtualCluster", + "AWS::EMRServerless::Application", + "AWS::ElastiCache::GlobalReplicationGroup", + "AWS::ElastiCache::ParameterGroup", + "AWS::ElastiCache::ServerlessCache", + "AWS::ElastiCache::SubnetGroup", + "AWS::ElastiCache::User", + "AWS::ElastiCache::UserGroup", + "AWS::ElasticBeanstalk::Application", + "AWS::ElasticBeanstalk::ApplicationVersion", + "AWS::ElasticBeanstalk::ConfigurationTemplate", + "AWS::ElasticBeanstalk::Environment", + "AWS::ElasticLoadBalancingV2::Listener", + "AWS::ElasticLoadBalancingV2::ListenerRule", + "AWS::ElasticLoadBalancingV2::LoadBalancer", + "AWS::ElasticLoadBalancingV2::TargetGroup", + "AWS::ElasticLoadBalancingV2::TrustStore", + "AWS::EntityResolution::IdMappingWorkflow", + "AWS::EntityResolution::IdNamespace", + "AWS::EntityResolution::MatchingWorkflow", + "AWS::EntityResolution::PolicyStatement", + "AWS::EntityResolution::SchemaMapping", + "AWS::EventSchemas::Discoverer", + "AWS::EventSchemas::Registry", + "AWS::EventSchemas::RegistryPolicy", + "AWS::EventSchemas::Schema", + "AWS::Events::ApiDestination", + "AWS::Events::Archive", + "AWS::Events::Connection", + "AWS::Events::Endpoint", + "AWS::Events::EventBus", + "AWS::Events::Rule", + "AWS::Evidently::Experiment", + "AWS::Evidently::Feature", + "AWS::Evidently::Launch", + "AWS::Evidently::Project", + "AWS::FIS::ExperimentTemplate", + "AWS::FIS::TargetAccountConfiguration", + "AWS::FMS::NotificationChannel", + "AWS::FMS::Policy", + "AWS::FMS::ResourceSet", + "AWS::FSx::DataRepositoryAssociation", + "AWS::FinSpace::Environment", + "AWS::Forecast::DatasetGroup", + "AWS::FraudDetector::Detector", + "AWS::FraudDetector::EntityType", + "AWS::FraudDetector::EventType", + "AWS::FraudDetector::Label", + "AWS::FraudDetector::List", + "AWS::FraudDetector::Outcome", + "AWS::FraudDetector::Variable", + "AWS::GameLift::Alias", + "AWS::GameLift::Build", + "AWS::GameLift::ContainerGroupDefinition", + "AWS::GameLift::Fleet", + "AWS::GameLift::GameServerGroup", + "AWS::GameLift::GameSessionQueue", + "AWS::GameLift::Location", + "AWS::GameLift::MatchmakingConfiguration", + "AWS::GameLift::MatchmakingRuleSet", + "AWS::GameLift::Script", + "AWS::GlobalAccelerator::Accelerator", + "AWS::GlobalAccelerator::CrossAccountAttachment", + "AWS::GlobalAccelerator::EndpointGroup", + "AWS::GlobalAccelerator::Listener", + "AWS::Glue::Database", + "AWS::Glue::Registry", + "AWS::Glue::Schema", + "AWS::Glue::Trigger", + "AWS::Grafana::Workspace", + "AWS::GreengrassV2::ComponentVersion", + "AWS::GreengrassV2::Deployment", + "AWS::GroundStation::Config", + "AWS::GroundStation::MissionProfile", + "AWS::GuardDuty::Detector", + "AWS::GuardDuty::Filter", + "AWS::GuardDuty::IPSet", + "AWS::GuardDuty::MalwareProtectionPlan", + "AWS::GuardDuty::Member", + "AWS::GuardDuty::ThreatIntelSet", + "AWS::HealthLake::FHIRDatastore", + "AWS::IAM::Group", + "AWS::IAM::GroupPolicy", + "AWS::IAM::InstanceProfile", + "AWS::IAM::ManagedPolicy", + "AWS::IAM::OIDCProvider", + "AWS::IAM::Role", + "AWS::IAM::RolePolicy", + "AWS::IAM::SAMLProvider", + "AWS::IAM::ServerCertificate", + "AWS::IAM::ServiceLinkedRole", + "AWS::IAM::User", + "AWS::IAM::UserPolicy", + "AWS::IAM::VirtualMFADevice", + "AWS::IVS::Channel", + "AWS::IVS::EncoderConfiguration", + "AWS::IVS::PlaybackKeyPair", + "AWS::IVS::PlaybackRestrictionPolicy", + "AWS::IVS::PublicKey", + "AWS::IVS::RecordingConfiguration", + "AWS::IVS::Stage", + "AWS::IVS::StorageConfiguration", + "AWS::IVS::StreamKey", + "AWS::IVSChat::LoggingConfiguration", + "AWS::IVSChat::Room", + "AWS::IdentityStore::Group", + "AWS::ImageBuilder::DistributionConfiguration", + "AWS::ImageBuilder::ImagePipeline", + "AWS::ImageBuilder::InfrastructureConfiguration", + "AWS::ImageBuilder::LifecyclePolicy", + "AWS::Inspector::AssessmentTarget", + "AWS::InspectorV2::CisScanConfiguration", + "AWS::InspectorV2::Filter", + "AWS::InternetMonitor::Monitor", + "AWS::IoT::AccountAuditConfiguration", + "AWS::IoT::Authorizer", + "AWS::IoT::BillingGroup", + "AWS::IoT::CACertificate", + "AWS::IoT::Certificate", + "AWS::IoT::CertificateProvider", + "AWS::IoT::CustomMetric", + "AWS::IoT::Dimension", + "AWS::IoT::DomainConfiguration", + "AWS::IoT::FleetMetric", + "AWS::IoT::Logging", + "AWS::IoT::MitigationAction", + "AWS::IoT::Policy", + "AWS::IoT::ProvisioningTemplate", + "AWS::IoT::ResourceSpecificLogging", + "AWS::IoT::RoleAlias", + "AWS::IoT::ScheduledAudit", + "AWS::IoT::SecurityProfile", + "AWS::IoT::SoftwarePackage", + "AWS::IoT::SoftwarePackageVersion", + "AWS::IoT::Thing", + "AWS::IoT::ThingGroup", + "AWS::IoT::ThingType", + "AWS::IoT::TopicRule", + "AWS::IoT::TopicRuleDestination", + "AWS::IoTAnalytics::Channel", + "AWS::IoTAnalytics::Dataset", + "AWS::IoTAnalytics::Datastore", + "AWS::IoTAnalytics::Pipeline", + "AWS::IoTCoreDeviceAdvisor::SuiteDefinition", + "AWS::IoTEvents::AlarmModel", + "AWS::IoTEvents::DetectorModel", + "AWS::IoTEvents::Input", + "AWS::IoTFleetHub::Application", + "AWS::IoTFleetWise::Campaign", + "AWS::IoTFleetWise::DecoderManifest", + "AWS::IoTFleetWise::Fleet", + "AWS::IoTFleetWise::ModelManifest", + "AWS::IoTFleetWise::SignalCatalog", + "AWS::IoTFleetWise::Vehicle", + "AWS::IoTSiteWise::AccessPolicy", + "AWS::IoTSiteWise::Asset", + "AWS::IoTSiteWise::AssetModel", + "AWS::IoTSiteWise::Dashboard", + "AWS::IoTSiteWise::Gateway", + "AWS::IoTSiteWise::Portal", + "AWS::IoTSiteWise::Project", + "AWS::IoTTwinMaker::ComponentType", + "AWS::IoTTwinMaker::Entity", + "AWS::IoTTwinMaker::Scene", + "AWS::IoTTwinMaker::Workspace", + "AWS::IoTWireless::Destination", + "AWS::IoTWireless::FuotaTask", + "AWS::IoTWireless::MulticastGroup", + "AWS::IoTWireless::NetworkAnalyzerConfiguration", + "AWS::IoTWireless::PartnerAccount", + "AWS::IoTWireless::WirelessDevice", + "AWS::IoTWireless::WirelessDeviceImportTask", + "AWS::IoTWireless::WirelessGateway", + "AWS::KMS::Alias", + "AWS::KMS::Key", + "AWS::KMS::ReplicaKey", + "AWS::KafkaConnect::Connector", + "AWS::KafkaConnect::CustomPlugin", + "AWS::KafkaConnect::WorkerConfiguration", + "AWS::Kendra::DataSource", + "AWS::Kendra::Faq", + "AWS::Kendra::Index", + "AWS::KendraRanking::ExecutionPlan", + "AWS::Kinesis::Stream", + "AWS::KinesisAnalyticsV2::Application", + "AWS::KinesisFirehose::DeliveryStream", + "AWS::KinesisVideo::SignalingChannel", + "AWS::KinesisVideo::Stream", + "AWS::LakeFormation::Tag", + "AWS::Lambda::Alias", + "AWS::Lambda::CodeSigningConfig", + "AWS::Lambda::EventInvokeConfig", + "AWS::Lambda::EventSourceMapping", + "AWS::Lambda::Function", + "AWS::Lambda::Url", + "AWS::LaunchWizard::Deployment", + "AWS::Lex::Bot", + "AWS::Lex::BotAlias", + "AWS::Lex::ResourcePolicy", + "AWS::LicenseManager::Grant", + "AWS::LicenseManager::License", + "AWS::Lightsail::Alarm", + "AWS::Lightsail::Bucket", + "AWS::Lightsail::Certificate", + "AWS::Lightsail::Container", + "AWS::Lightsail::Database", + "AWS::Lightsail::Disk", + "AWS::Lightsail::Distribution", + "AWS::Lightsail::Instance", + "AWS::Lightsail::LoadBalancer", + "AWS::Lightsail::LoadBalancerTlsCertificate", + "AWS::Lightsail::StaticIp", + "AWS::Location::APIKey", + "AWS::Location::GeofenceCollection", + "AWS::Location::Map", + "AWS::Location::PlaceIndex", + "AWS::Location::RouteCalculator", + "AWS::Location::Tracker", + "AWS::Logs::AccountPolicy", + "AWS::Logs::Delivery", + "AWS::Logs::DeliveryDestination", + "AWS::Logs::DeliverySource", + "AWS::Logs::Destination", + "AWS::Logs::LogAnomalyDetector", + "AWS::Logs::LogGroup", + "AWS::Logs::MetricFilter", + "AWS::Logs::QueryDefinition", + "AWS::Logs::ResourcePolicy", + "AWS::Logs::SubscriptionFilter", + "AWS::LookoutEquipment::InferenceScheduler", + "AWS::LookoutMetrics::AnomalyDetector", + "AWS::LookoutVision::Project", + "AWS::M2::Application", + "AWS::M2::Environment", + "AWS::MSK::BatchScramSecret", + "AWS::MSK::Cluster", + "AWS::MSK::ClusterPolicy", + "AWS::MSK::Configuration", + "AWS::MSK::Replicator", + "AWS::MSK::VpcConnection", + "AWS::MWAA::Environment", + "AWS::Macie::AllowList", + "AWS::Macie::CustomDataIdentifier", + "AWS::Macie::FindingsFilter", + "AWS::Macie::Session", + "AWS::ManagedBlockchain::Accessor", + "AWS::MediaConnect::Bridge", + "AWS::MediaConnect::BridgeOutput", + "AWS::MediaConnect::BridgeSource", + "AWS::MediaConnect::Flow", + "AWS::MediaConnect::FlowEntitlement", + "AWS::MediaConnect::FlowOutput", + "AWS::MediaConnect::FlowSource", + "AWS::MediaConnect::FlowVpcInterface", + "AWS::MediaLive::ChannelPlacementGroup", + "AWS::MediaLive::CloudWatchAlarmTemplate", + "AWS::MediaLive::CloudWatchAlarmTemplateGroup", + "AWS::MediaLive::Cluster", + "AWS::MediaLive::EventBridgeRuleTemplate", + "AWS::MediaLive::EventBridgeRuleTemplateGroup", + "AWS::MediaLive::Multiplex", + "AWS::MediaLive::Multiplexprogram", + "AWS::MediaLive::Network", + "AWS::MediaLive::SdiSource", + "AWS::MediaLive::SignalMap", + "AWS::MediaPackage::Channel", + "AWS::MediaPackage::OriginEndpoint", + "AWS::MediaPackage::PackagingGroup", + "AWS::MediaPackageV2::Channel", + "AWS::MediaPackageV2::ChannelGroup", + "AWS::MediaPackageV2::ChannelPolicy", + "AWS::MediaPackageV2::OriginEndpoint", + "AWS::MediaPackageV2::OriginEndpointPolicy", + "AWS::MediaTailor::Channel", + "AWS::MediaTailor::ChannelPolicy", + "AWS::MediaTailor::LiveSource", + "AWS::MediaTailor::PlaybackConfiguration", + "AWS::MediaTailor::SourceLocation", + "AWS::MediaTailor::VodSource", + "AWS::MemoryDB::ACL", + "AWS::MemoryDB::Cluster", + "AWS::MemoryDB::ParameterGroup", + "AWS::MemoryDB::SubnetGroup", + "AWS::MemoryDB::User", + "AWS::Neptune::DBCluster", + "AWS::NeptuneGraph::Graph", + "AWS::NeptuneGraph::PrivateGraphEndpoint", + "AWS::NetworkFirewall::Firewall", + "AWS::NetworkFirewall::FirewallPolicy", + "AWS::NetworkFirewall::LoggingConfiguration", + "AWS::NetworkFirewall::RuleGroup", + "AWS::NetworkFirewall::TLSInspectionConfiguration", + "AWS::NetworkManager::ConnectAttachment", + "AWS::NetworkManager::ConnectPeer", + "AWS::NetworkManager::CoreNetwork", + "AWS::NetworkManager::Device", + "AWS::NetworkManager::GlobalNetwork", + "AWS::NetworkManager::Link", + "AWS::NetworkManager::Site", + "AWS::NetworkManager::SiteToSiteVpnAttachment", + "AWS::NetworkManager::TransitGatewayPeering", + "AWS::NetworkManager::TransitGatewayRouteTableAttachment", + "AWS::NetworkManager::VpcAttachment", + "AWS::NimbleStudio::LaunchProfile", + "AWS::NimbleStudio::StreamingImage", + "AWS::NimbleStudio::Studio", + "AWS::NimbleStudio::StudioComponent", + "AWS::OSIS::Pipeline", + "AWS::Oam::Link", + "AWS::Oam::Sink", + "AWS::Omics::AnnotationStore", + "AWS::Omics::RunGroup", + "AWS::Omics::VariantStore", + "AWS::Omics::Workflow", + "AWS::OpenSearchServerless::AccessPolicy", + "AWS::OpenSearchServerless::Collection", + "AWS::OpenSearchServerless::LifecyclePolicy", + "AWS::OpenSearchServerless::SecurityConfig", + "AWS::OpenSearchServerless::SecurityPolicy", + "AWS::OpenSearchServerless::VpcEndpoint", + "AWS::OpenSearchService::Domain", + "AWS::OpsWorksCM::Server", + "AWS::Organizations::Account", + "AWS::Organizations::Organization", + "AWS::Organizations::OrganizationalUnit", + "AWS::Organizations::Policy", + "AWS::Organizations::ResourcePolicy", + "AWS::PCAConnectorAD::Connector", + "AWS::PCAConnectorAD::DirectoryRegistration", + "AWS::PCAConnectorAD::Template", + "AWS::PCAConnectorAD::TemplateGroupAccessControlEntry", + "AWS::PCAConnectorSCEP::Challenge", + "AWS::PCAConnectorSCEP::Connector", + "AWS::Panorama::ApplicationInstance", + "AWS::Panorama::Package", + "AWS::Panorama::PackageVersion", + "AWS::PaymentCryptography::Alias", + "AWS::PaymentCryptography::Key", + "AWS::Personalize::Dataset", + "AWS::Pinpoint::InAppTemplate", + "AWS::Pipes::Pipe", + "AWS::Proton::EnvironmentAccountConnection", + "AWS::Proton::EnvironmentTemplate", + "AWS::Proton::ServiceTemplate", + "AWS::QBusiness::Application", + "AWS::QBusiness::DataSource", + "AWS::QBusiness::Index", + "AWS::QBusiness::Plugin", + "AWS::QBusiness::Retriever", + "AWS::QBusiness::WebExperience", + "AWS::QLDB::Stream", + "AWS::QuickSight::Analysis", + "AWS::QuickSight::Dashboard", + "AWS::QuickSight::DataSet", + "AWS::QuickSight::DataSource", + "AWS::QuickSight::RefreshSchedule", + "AWS::QuickSight::Template", + "AWS::QuickSight::Theme", + "AWS::QuickSight::Topic", + "AWS::QuickSight::VPCConnection", + "AWS::RAM::Permission", + "AWS::RDS::CustomDBEngineVersion", + "AWS::RDS::DBCluster", + "AWS::RDS::DBClusterParameterGroup", + "AWS::RDS::DBInstance", + "AWS::RDS::DBParameterGroup", + "AWS::RDS::DBProxy", + "AWS::RDS::DBProxyEndpoint", + "AWS::RDS::DBProxyTargetGroup", + "AWS::RDS::DBSubnetGroup", + "AWS::RDS::EventSubscription", + "AWS::RDS::GlobalCluster", + "AWS::RDS::Integration", + "AWS::RDS::OptionGroup", + "AWS::RUM::AppMonitor", + "AWS::Redshift::Cluster", + "AWS::Redshift::ClusterParameterGroup", + "AWS::Redshift::ClusterSubnetGroup", + "AWS::Redshift::EndpointAccess", + "AWS::Redshift::EndpointAuthorization", + "AWS::Redshift::EventSubscription", + "AWS::Redshift::ScheduledAction", + "AWS::RedshiftServerless::Namespace", + "AWS::RedshiftServerless::Workgroup", + "AWS::RefactorSpaces::Route", + "AWS::Rekognition::Collection", + "AWS::Rekognition::Project", + "AWS::Rekognition::StreamProcessor", + "AWS::ResilienceHub::App", + "AWS::ResilienceHub::ResiliencyPolicy", + "AWS::ResourceExplorer2::DefaultViewAssociation", + "AWS::ResourceExplorer2::Index", + "AWS::ResourceExplorer2::View", + "AWS::ResourceGroups::Group", + "AWS::RoboMaker::Fleet", + "AWS::RoboMaker::Robot", + "AWS::RoboMaker::RobotApplication", + "AWS::RoboMaker::SimulationApplication", + "AWS::RolesAnywhere::CRL", + "AWS::RolesAnywhere::Profile", + "AWS::RolesAnywhere::TrustAnchor", + "AWS::Route53::CidrCollection", + "AWS::Route53::HealthCheck", + "AWS::Route53::HostedZone", + "AWS::Route53::KeySigningKey", + "AWS::Route53Profiles::Profile", + "AWS::Route53Profiles::ProfileAssociation", + "AWS::Route53Profiles::ProfileResourceAssociation", + "AWS::Route53RecoveryControl::ControlPanel", + "AWS::Route53RecoveryControl::RoutingControl", + "AWS::Route53RecoveryControl::SafetyRule", + "AWS::Route53RecoveryReadiness::Cell", + "AWS::Route53RecoveryReadiness::ReadinessCheck", + "AWS::Route53RecoveryReadiness::RecoveryGroup", + "AWS::Route53RecoveryReadiness::ResourceSet", + "AWS::Route53Resolver::FirewallDomainList", + "AWS::Route53Resolver::FirewallRuleGroup", + "AWS::Route53Resolver::FirewallRuleGroupAssociation", + "AWS::Route53Resolver::OutpostResolver", + "AWS::Route53Resolver::ResolverRule", + "AWS::S3::AccessGrant", + "AWS::S3::AccessGrantsInstance", + "AWS::S3::AccessGrantsLocation", + "AWS::S3::AccessPoint", + "AWS::S3::Bucket", + "AWS::S3::BucketPolicy", + "AWS::S3::MultiRegionAccessPointPolicy", + "AWS::S3::StorageLens", + "AWS::S3::StorageLensGroup", + "AWS::S3Express::BucketPolicy", + "AWS::S3ObjectLambda::AccessPoint", + "AWS::S3ObjectLambda::AccessPointPolicy", + "AWS::S3Outposts::AccessPoint", + "AWS::S3Outposts::Bucket", + "AWS::S3Outposts::BucketPolicy", + "AWS::SES::ConfigurationSet", + "AWS::SES::ConfigurationSetEventDestination", + "AWS::SES::ContactList", + "AWS::SES::DedicatedIpPool", + "AWS::SES::EmailIdentity", + "AWS::SES::MailManagerAddonInstance", + "AWS::SES::MailManagerAddonSubscription", + "AWS::SES::MailManagerArchive", + "AWS::SES::MailManagerIngressPoint", + "AWS::SES::MailManagerRelay", + "AWS::SES::MailManagerRuleSet", + "AWS::SES::MailManagerTrafficPolicy", + "AWS::SES::Template", + "AWS::SES::VdmAttributes", + "AWS::SNS::Subscription", + "AWS::SNS::Topic", + "AWS::SNS::TopicInlinePolicy", + "AWS::SQS::Queue", + "AWS::SQS::QueueInlinePolicy", + "AWS::SSM::Association", + "AWS::SSM::Document", + "AWS::SSM::Parameter", + "AWS::SSM::PatchBaseline", + "AWS::SSM::ResourceDataSync", + "AWS::SSM::ResourcePolicy", + "AWS::SSMContacts::Contact", + "AWS::SSMContacts::ContactChannel", + "AWS::SSMContacts::Plan", + "AWS::SSMContacts::Rotation", + "AWS::SSMIncidents::ReplicationSet", + "AWS::SSMIncidents::ResponsePlan", + "AWS::SSMQuickSetup::ConfigurationManager", + "AWS::SSO::Application", + "AWS::SSO::Instance", + "AWS::SSO::InstanceAccessControlAttributeConfiguration", + "AWS::SSO::PermissionSet", + "AWS::SageMaker::AppImageConfig", + "AWS::SageMaker::Cluster", + "AWS::SageMaker::Device", + "AWS::SageMaker::DeviceFleet", + "AWS::SageMaker::Domain", + "AWS::SageMaker::FeatureGroup", + "AWS::SageMaker::Image", + "AWS::SageMaker::ImageVersion", + "AWS::SageMaker::InferenceComponent", + "AWS::SageMaker::InferenceExperiment", + "AWS::SageMaker::MlflowTrackingServer", + "AWS::SageMaker::ModelCard", + "AWS::SageMaker::ModelPackage", + "AWS::SageMaker::ModelPackageGroup", + "AWS::SageMaker::MonitoringSchedule", + "AWS::SageMaker::Pipeline", + "AWS::SageMaker::Project", + "AWS::SageMaker::Space", + "AWS::SageMaker::UserProfile", + "AWS::Scheduler::Schedule", + "AWS::Scheduler::ScheduleGroup", + "AWS::SecretsManager::ResourcePolicy", + "AWS::SecretsManager::Secret", + "AWS::SecurityHub::AutomationRule", + "AWS::SecurityHub::ConfigurationPolicy", + "AWS::SecurityHub::FindingAggregator", + "AWS::SecurityHub::Hub", + "AWS::SecurityHub::Insight", + "AWS::SecurityHub::OrganizationConfiguration", + "AWS::SecurityHub::PolicyAssociation", + "AWS::SecurityHub::SecurityControl", + "AWS::SecurityHub::Standard", + "AWS::SecurityLake::AwsLogSource", + "AWS::SecurityLake::DataLake", + "AWS::SecurityLake::Subscriber", + "AWS::SecurityLake::SubscriberNotification", + "AWS::ServiceCatalog::CloudFormationProvisionedProduct", + "AWS::ServiceCatalog::ServiceAction", + "AWS::ServiceCatalogAppRegistry::Application", + "AWS::ServiceCatalogAppRegistry::AttributeGroup", + "AWS::Shield::DRTAccess", + "AWS::Shield::ProactiveEngagement", + "AWS::Shield::Protection", + "AWS::Shield::ProtectionGroup", + "AWS::Signer::SigningProfile", + "AWS::SimSpaceWeaver::Simulation", + "AWS::StepFunctions::Activity", + "AWS::StepFunctions::StateMachine", + "AWS::StepFunctions::StateMachineAlias", + "AWS::SupportApp::AccountAlias", + "AWS::SupportApp::SlackChannelConfiguration", + "AWS::SupportApp::SlackWorkspaceConfiguration", + "AWS::Synthetics::Canary", + "AWS::Synthetics::Group", + "AWS::SystemsManagerSAP::Application", + "AWS::Timestream::Database", + "AWS::Timestream::InfluxDBInstance", + "AWS::Timestream::ScheduledQuery", + "AWS::Timestream::Table", + "AWS::Transfer::Agreement", + "AWS::Transfer::Certificate", + "AWS::Transfer::Connector", + "AWS::Transfer::Profile", + "AWS::Transfer::Workflow", + "AWS::VerifiedPermissions::IdentitySource", + "AWS::VerifiedPermissions::Policy", + "AWS::VerifiedPermissions::PolicyStore", + "AWS::VerifiedPermissions::PolicyTemplate", + "AWS::VoiceID::Domain", + "AWS::VpcLattice::AccessLogSubscription", + "AWS::VpcLattice::AuthPolicy", + "AWS::VpcLattice::Listener", + "AWS::VpcLattice::ResourcePolicy", + "AWS::VpcLattice::Rule", + "AWS::VpcLattice::Service", + "AWS::VpcLattice::ServiceNetwork", + "AWS::VpcLattice::ServiceNetworkServiceAssociation", + "AWS::VpcLattice::ServiceNetworkVpcAssociation", + "AWS::VpcLattice::TargetGroup", + "AWS::WAFv2::IPSet", + "AWS::WAFv2::LoggingConfiguration", + "AWS::WAFv2::RegexPatternSet", + "AWS::WAFv2::RuleGroup", + "AWS::WAFv2::WebACL", + "AWS::WAFv2::WebACLAssociation", + "AWS::Wisdom::Assistant", + "AWS::Wisdom::AssistantAssociation", + "AWS::Wisdom::KnowledgeBase", + "AWS::WorkSpaces::WorkspacesPool", + "AWS::WorkSpacesThinClient::Environment", + "AWS::WorkSpacesWeb::BrowserSettings", + "AWS::WorkSpacesWeb::IdentityProvider", + "AWS::WorkSpacesWeb::IpAccessSettings", + "AWS::WorkSpacesWeb::NetworkSettings", + "AWS::WorkSpacesWeb::Portal", + "AWS::WorkSpacesWeb::TrustStore", + "AWS::WorkSpacesWeb::UserAccessLoggingSettings", + "AWS::WorkSpacesWeb::UserSettings", + "AWS::XRay::Group", + "AWS::XRay::ResourcePolicy", + "AWS::XRay::SamplingRule", ]); diff --git a/src/lib/core/cdk-adaptor-stack.ts b/src/lib/core/cdk-adaptor-stack.ts index 85378a4..52a7e54 100644 --- a/src/lib/core/cdk-adaptor-stack.ts +++ b/src/lib/core/cdk-adaptor-stack.ts @@ -35,7 +35,8 @@ import { conditional, propertyAccess } from "cdktf/lib/tfExpression.js"; import { TokenMap } from "cdktf/lib/tokens/private/token-map.js"; import { toSnakeCase } from "codemaker"; import { Construct, ConstructOrder, IConstruct } from "constructs"; -import {AccessTracker, findMapping, Mapping} from "../../mappings/utils.js"; +import { AccessTracker } from "../../mappings/access-tracker.js"; +import { findMapping, Mapping } from "../../mappings/utils.js"; import { CloudFormationOutput, CloudFormationResource, CloudFormationTemplate } from "./cfn.js"; import { reparentConstruct } from "./construct-helpers.js"; import { TerraformSynthesizer } from "./terraform-synthesizer.js"; @@ -58,7 +59,7 @@ const cdkTokenResolutionCompat = getAwsCDKTokenResolutionCompat(); cdkTokenResolutionCompat.enableUnresolvedTfTokens(); -function isConstruct(x: object): x is Construct { +function isConstruct(x: unknown): x is Construct { return x != undefined && Object.hasOwn(x, "_children") && Object.hasOwn(x, "_metadata"); } @@ -433,11 +434,9 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { const proxy = new AccessTracker(props); if (m.unsupportedProps != null) { - for (const prop of m.unsupportedProps) { - if (proxy.hasProperty(prop)) { - throw new Error(`Unsupported property ${prop} for resource ${resource.Type}`); - } - proxy.removePropertiesUnderPath(prop); + const specifiedUnsupportedProps = m.unsupportedProps.map(proxy.matchingProperties.bind(proxy)).flat(); + if (specifiedUnsupportedProps.length > 0) { + throw new UnsupportedPropertiesSpecifiedError(resource.Type, specifiedUnsupportedProps); } } @@ -467,7 +466,9 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { if (!proxy.isAllPropertiesAccessed()) { throw new Error( - `The following props were not mapped for ${resource.Type}: ${proxy.getUnaccessedProperties().join(", ")}`, + `The following props were not mapped for ${resource.Type}: ${ + proxy.getUnaccessedProperties().join(", ") + }`, ); } @@ -686,14 +687,14 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { return this.resolveAtt(ref, "Ref"); } - private resolveIntrinsic(fn: string, params: any) { + private resolveIntrinsic(fn: string, params: unknown[]): unknown { switch (fn) { case "Fn::GetAtt": { - return this.resolveAtt(params[0], params[1]); + return this.resolveAtt(params[0] as string, params[1] as string); } case "Fn::Join": { - const [delim, strings] = params; + const [delim, strings] = params as [string, string[]]; return Fn.join( this.processIntrinsics(delim), this.processIntrinsics(strings), @@ -701,14 +702,14 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Select": { - const [index, list] = params; + const [index, list] = params as [number, unknown[]]; const i = this.processIntrinsics(index); const ll = this.processIntrinsics(list); return Fn.element(ll, i); } case "Fn::GetAZs": { - let [region]: [string | undefined | "AWS::Region"] = params; + let [region]: [string | undefined | "AWS::Region"] = params as [string | undefined | "AWS::Region"]; // AWS::Region or undefined fall back to default region for the stack if (region === "AWS::Region") { @@ -718,14 +719,16 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Base64": { - const [input] = params; + const [input] = params as [string]; return Fn.base64encode(this.processIntrinsics(input)); } case "Fn::Cidr": { // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-cidr.html // https://www.terraform.io/docs/language/functions/cidrsubnets.html - const [ipBlock, count, cidrBits]: [any, number | string, any] = this.processIntrinsics(params); + const [ipBlock, count, cidrBits]: [string, number | string, number] = this.processIntrinsics( + params, + ) as [string, number | string, number]; const prefix = ipBlock; // given count=4 bits=8 this will be [8, 8, 8, 8] to match the Fn.cidrsubnets interface const newBits = Array.from({ length: Number(count) }).fill(cidrBits, 0) as number[]; @@ -733,7 +736,7 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::FindInMap": { - const [rawMap, ...rawParams] = params; + const [rawMap, ...rawParams] = params as [string, ...unknown[]]; const map = this.processIntrinsics(rawMap); const processedParams = this.processIntrinsics(rawParams); return Lazy.anyValue({ @@ -747,7 +750,7 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Split": { - const [separator, string] = params; + const [separator, string] = params as [string, string]; return Fn.split( this.processIntrinsics(separator), this.processIntrinsics(string), @@ -755,7 +758,10 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Sub": { - const [rawString, replacementMap]: [string, object] = params; + const [rawString, replacementMap]: [string, { [key: string]: unknown }] = params as [ + string, + { [key: string]: unknown }, + ]; let resultString: string = this.processIntrinsics(rawString); @@ -793,12 +799,12 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Equals": { - const [left, right] = this.processIntrinsics(params); + const [left, right] = this.processIntrinsics(params) as [unknown, unknown]; return Op.eq(left, right); } case "Fn::And": { - const [first, ...additional]: [any, any[]] = this.processConditions( + const [first, ...additional]: [unknown, unknown[]] = this.processConditions( this.processIntrinsics(params), ); // Fn:And supports 2-10 parameters to chain @@ -809,7 +815,7 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Or": { - const [first, ...additional]: [any, any[]] = this.processConditions( + const [first, ...additional]: [unknown, unknown[]] = this.processConditions( this.processIntrinsics(params), ); // Fn:Or supports 2-10 parameters to chain @@ -820,7 +826,11 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::If": { - const [conditionId, trueExpression, falseExpression] = this.processIntrinsics(params); + const [conditionId, trueExpression, falseExpression] = this.processIntrinsics(params) as [ + string, + unknown, + unknown, + ]; return conditional( this.getConditionTerraformLocal(conditionId), trueExpression, @@ -829,7 +839,7 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } case "Fn::Not": { - let [condition] = this.processIntrinsics(params); + let [condition] = this.processIntrinsics(params) as [unknown]; if (typeof condition === "string") { condition = this.getConditionTerraformLocal(condition); } @@ -862,4 +872,12 @@ export abstract class AwsTerraformAdaptorStack extends TerraformStack { } } -/* eslint-enable @typescript-eslint/no-explicit-any */ +export class UnsupportedPropertiesSpecifiedError extends Error { + constructor(public readonly resourceType: string, public readonly unsupportedProps: string[]) { + const message = `The following unsupported props were specified for ${resourceType}: ${ + unsupportedProps.join(", ") + }`; + super(message); + this.name = "UnsupportedPropertiesSpecifiedError"; + } +} diff --git a/src/lib/core/terraform-synthesizer.ts b/src/lib/core/terraform-synthesizer.ts index ba59e5d..d5e0fef 100644 --- a/src/lib/core/terraform-synthesizer.ts +++ b/src/lib/core/terraform-synthesizer.ts @@ -61,7 +61,7 @@ export class TerraformSynthesizer extends DefaultStackSynthesizer { throw new Error("Cannot sythesize CDK stack from terraform synthesizer"); } - private getAssetBucket(): S3Bucket { + public getAssetBucket(): S3Bucket { let assetBucket = this.terraformStack.node.tryFindChild("AssetBucket") as S3Bucket; if (!assetBucket) { assetBucket = new S3Bucket(this.terraformStack, "AssetBucket"); diff --git a/src/lib/core/type-utils.ts b/src/lib/core/type-utils.ts index 529c7a8..55166d2 100644 --- a/src/lib/core/type-utils.ts +++ b/src/lib/core/type-utils.ts @@ -1,5 +1,6 @@ export type Writeable = { -readonly [P in keyof T]: T[P] }; export type Exact = IfEquals; -export type IfEquals = (() => G extends T ? 1 : 2) extends (() => G extends U ? 1 : 2) ? Y +export type IfEquals = (() => G extends T ? 1 : 2) extends + (() => G extends U ? 1 : 2) ? Y : N; export type NotAny = 0 extends (1 & T) ? never : T; diff --git a/src/lib/stack-provider-singletons.ts b/src/lib/stack-provider-singletons.ts index ff36917..99291c2 100644 --- a/src/lib/stack-provider-singletons.ts +++ b/src/lib/stack-provider-singletons.ts @@ -1,3 +1,4 @@ +import { ArchiveProvider } from "@cdktf/provider-archive/lib/provider/index.js"; import { TerraformProvider, TerraformStack } from "cdktf"; import { Construct } from "constructs"; import { TimeProvider } from "./core/time/provider/index.js"; @@ -19,3 +20,5 @@ function createStackProviderSingleton< } export const getSingletonTimeProvider = createStackProviderSingleton(TimeProvider, {}); + +export const getSingletonArchiveProvider = createStackProviderSingleton(ArchiveProvider, {}); diff --git a/src/mappings/access-tracker.ts b/src/mappings/access-tracker.ts new file mode 100644 index 0000000..0caca2c --- /dev/null +++ b/src/mappings/access-tracker.ts @@ -0,0 +1,180 @@ +/** + * Tracks which properties of an object have been accessed + * Additionally, supports various operations on the properties + * Slow, but useful in the context of a build step + * + * @internal + */ +export class AccessTracker { + private accessedProperties: Set = new Set(); + private properties: Set = new Set(); + + private obj: T; + public proxy: T; + + constructor(obj: T) { + this.obj = JSON.parse(JSON.stringify(obj)); + this.proxy = this.createProxy(obj); + this.properties = new Set(this.inspectProperties(obj)); + + // Lock the object to prevent further modifications + Object.freeze(this.obj); + } + + private createProxy(target: T, path: string[] = []): T { + if (typeof target !== "object" || target === null) { + throw new Error("Target is not an object"); + } + + return new Proxy(target, { + get: (obj, prop) => { + const propPath = [...path, prop.toString()].join("."); + if (path.length === 0 && !this.properties.has(propPath)) { + return; + } + this.accessedProperties.add(propPath); + const value = obj[prop as keyof typeof obj]; + if (value && typeof value === "object") { + return this.createProxy(value as T, [...path, prop.toString()]); + } + return value; + }, + }); + } + + private inspectProperties(obj: T, path: string[] = []): string[] { + const properties = []; + for (const key in obj) { + if (obj[key] === undefined) { + continue; + } + const propPath = [...path, key].join("."); + properties.push(propPath); + if (obj[key] && typeof obj[key] === "object") { + properties.push(...this.inspectProperties(obj[key] as T, [...path, key])); + } + } + return properties; + } + + public isAllPropertiesAccessed(): boolean { + for (const property of this.properties) { + if (!this.accessedProperties.has(property)) { + return false; + } + } + return true; + } + + public hasProperty(path: string): boolean { + const pattern = this.pathToReg(path); + for (const property of this.properties) { + if (pattern.test(property)) { + return true; + } + } + return false; + } + + public matchingProperties(path: string): string[] { + const pattern = this.pathToReg(path); + return Array.from(this.properties).filter((property) => pattern.test(property)); + } + + public partiallyClone(paths: string[]): unknown { + const regExps = paths.map(this.pathToReg); + const matchingPaths = new Set(); + for (const property of this.properties) { + for (const regExp of regExps) { + if (regExp.test(property)) { + matchingPaths.add(property); + } + } + } + return this.partiallyCloneExact(Array.from(matchingPaths)); + } + + public partiallyCloneExact(paths: string[]): unknown { + // Find all matching paths + const matchingPaths = paths.filter((path) => this.hasProperty(path)); + + // Create a safe intermediary object + const clonedObj = JSON.parse(JSON.stringify(this.obj)); + + // Build a new object with only the matching paths + const newObj = {}; + + function cloneNestedProperty(from: Record, to: Record, path: string[]): void { + const key = Array.isArray(from) ? +path.shift()! : path.shift() as string; + + if (path.length === 0) { + if (typeof from[key] !== "object") to[key] = from[key]; + } else { + if (!to[key]) { + to[key] = Array.isArray(from[key]) ? [] : {}; + } + cloneNestedProperty(from[key] as Record, to[key] as Record, path); + } + } + + for (const path of matchingPaths) { + cloneNestedProperty(clonedObj, newObj, path.split(".")); + } + + return newObj; + } + + public clone(): T { + return this.partiallyCloneExact(Array.from(this.properties)) as T; + } + + public cloneAccessed(): T { + return this.partiallyCloneExact(Array.from(this.accessedProperties)) as T; + } + + public cloneUnaccessed(): T { + return this.partiallyCloneExact(this.getUnaccessedProperties()) as T; + } + + /** + * Removes all properties under the given JSON path from the properties list + */ + public removePropertiesUnderPath(path: string): void { + const regExp = this.pathToReg(path); + for (const property of Array.from(this.properties)) { + if (regExp.test(property)) { + this.properties.delete(property); + this.accessedProperties.delete(property); + } + } + } + + private pathToReg(path: string): RegExp { + const parts = path.split("."); + const regParts = parts.map(part => part === "*" ? "[^.]*" : part); + return new RegExp(`^${regParts.join("\\.")}`); + } + + public getUnaccessedProperties(): string[] { + return Array.from(this.properties).filter((property) => !this.accessedProperties.has(property)); + } + + public getAccessedProperties(): string[] { + return Array.from(this.accessedProperties); + } + + public touchPathReg(exp: RegExp): void { + for (const property of this.properties) { + if (exp.test(property)) { + this.accessedProperties.add(property); + } + } + } + + /** + * Touches all paths under the given JSON path + */ + public touchPath(path: string): void { + this.touchPathReg(this.pathToReg(path)); + } +} diff --git a/src/mappings/helper.ts b/src/mappings/helper.ts index 6b5b307..cb5b0af 100644 --- a/src/mappings/helper.ts +++ b/src/mappings/helper.ts @@ -2,7 +2,8 @@ import { camelCase } from "camel-case"; import { TerraformResource } from "cdktf"; import { Construct } from "constructs"; import createDebug from "debug"; -import {AccessTracker} from "./utils.js"; + +import { AccessTracker } from "./access-tracker.js"; export const mapperDebug = createDebug("cdktf-aws-adaptor:mapper:debug"); export const mapperTrace = createDebug("cdktf-aws-adaptor:mapper:trace"); @@ -65,7 +66,8 @@ export type ResourceMapper = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any [key: string]: any; }, - proxy: AccessTracker<{[key: string]: any}> + // eslint-disable-next-line @typescript-eslint/no-explicit-any + proxy: AccessTracker<{ [key: string]: any }>, ) => T | void; export function createGuessingResourceMapper( diff --git a/src/mappings/index.ts b/src/mappings/index.ts index 0d0d470..4099590 100644 --- a/src/mappings/index.ts +++ b/src/mappings/index.ts @@ -5,6 +5,7 @@ import { registerCloudfrontMappings } from "./services/cloudfront.js"; import { registerCognitoMappings } from "./services/cognito.js"; import { registerDynamoDBMappings } from "./services/dynamodb.js"; import { registerEC2VPCMappings } from "./services/ec2-vpc.js"; +import { registerEcsMappings } from "./services/eks.js"; import { registerEventsMappings } from "./services/events.js"; import { registerIamMappings } from "./services/iam.js"; import { registerLambdaMappings } from "./services/lambda.js"; @@ -15,7 +16,6 @@ import { registerSnsMappings } from "./services/sns.js"; import { registerSqsMappings } from "./services/sqs.js"; import { registerStepFunctinMappings } from "./services/stepfunctions.js"; import { registerMapping } from "./utils.js"; -import {registerEcsMappings} from "./services/eks.js"; export function registerMappings() { registerMapping("AWS::CloudFormation::CustomResource", { diff --git a/src/mappings/services/appsync.ts b/src/mappings/services/appsync.ts index 7a3265a..0f02521 100644 --- a/src/mappings/services/appsync.ts +++ b/src/mappings/services/appsync.ts @@ -1,9 +1,9 @@ -import {AppsyncApiKey} from "@cdktf/provider-aws/lib/appsync-api-key/index.js"; -import {AppsyncDatasource} from "@cdktf/provider-aws/lib/appsync-datasource/index.js"; -import {AppsyncDomainNameApiAssociation} from "@cdktf/provider-aws/lib/appsync-domain-name-api-association/index.js"; -import {AppsyncFunction} from "@cdktf/provider-aws/lib/appsync-function/index.js"; -import {AppsyncGraphqlApi} from "@cdktf/provider-aws/lib/appsync-graphql-api/index.js"; -import {AppsyncResolver} from "@cdktf/provider-aws/lib/appsync-resolver/index.js"; +import { AppsyncApiKey } from "@cdktf/provider-aws/lib/appsync-api-key/index.js"; +import { AppsyncDatasource } from "@cdktf/provider-aws/lib/appsync-datasource/index.js"; +import { AppsyncDomainNameApiAssociation } from "@cdktf/provider-aws/lib/appsync-domain-name-api-association/index.js"; +import { AppsyncFunction } from "@cdktf/provider-aws/lib/appsync-function/index.js"; +import { AppsyncGraphqlApi } from "@cdktf/provider-aws/lib/appsync-graphql-api/index.js"; +import { AppsyncResolver } from "@cdktf/provider-aws/lib/appsync-resolver/index.js"; import { CfnApiKey, CfnDataSource, @@ -12,11 +12,11 @@ import { CfnGraphQLApi, CfnResolver, } from "aws-cdk-lib/aws-appsync"; -import {Fn, TerraformStack} from "cdktf"; -import {resolve} from "cdktf/lib/_tokens.js"; -import {Construct} from "constructs"; -import {AwsTerraformAdaptorStack} from "../../lib/core/cdk-adaptor-stack.js"; -import {deleteUndefinedKeys, registerMapping, registerMappingTyped} from "../utils.js"; +import { Fn, TerraformStack } from "cdktf"; +import { resolve } from "cdktf/lib/_tokens.js"; +import { Construct } from "constructs"; +import { AwsTerraformAdaptorStack } from "../../lib/core/cdk-adaptor-stack.js"; +import { deleteUndefinedKeys, registerMapping, registerMappingTyped } from "../utils.js"; const appsyncApiMapping = new Map(); @@ -85,6 +85,13 @@ export function registerAppSyncMappings() { iatTtl: props.OpenIDConnectConfig?.IatTTL, issuer: props.OpenIDConnectConfig?.Issuer as string, }, + enhancedMetricsConfig: { + operationLevelMetricsConfig: props.EnhancedMetricsConfig?.OperationLevelMetricsConfig as string, + resolverLevelMetricsBehavior: props.EnhancedMetricsConfig + ?.ResolverLevelMetricsBehavior as string, + dataSourceLevelMetricsBehavior: props.EnhancedMetricsConfig + ?.DataSourceLevelMetricsBehavior as string, + }, tags: Object.fromEntries( props.Tags?.map(({ Key: key, @@ -102,7 +109,6 @@ export function registerAppSyncMappings() { "ApiType", "MergedApiExecutionRoleArn", "EnvironmentVariables", - "EnhancedMetricsConfig", ], attributes: { Ref: (resource) => resource.id, diff --git a/src/mappings/services/cloudfront.ts b/src/mappings/services/cloudfront.ts index ed3f52f..beace2e 100644 --- a/src/mappings/services/cloudfront.ts +++ b/src/mappings/services/cloudfront.ts @@ -22,13 +22,6 @@ export function registerCloudfrontMappings() { registerMappingTyped(CfnDistribution, CloudfrontDistribution, { resource: (scope, id, props, proxy) => { - if (props.DistributionConfig.S3Origin != null) { - throw new Error("Legacy S3Origin is not supported"); - } - if (props.DistributionConfig.CustomOrigin != null) { - throw new Error("Legacy CustomOrigin is not supported"); - } - const mapCacheBehavior = (behavior: (typeof props)["DistributionConfig"]["DefaultCacheBehavior"]) => ({ functionAssociation: behavior.FunctionAssociations?.map(association => ({ eventType: association.EventType as string, @@ -159,6 +152,10 @@ export function registerCloudfrontMappings() { return new CloudfrontDistribution(scope, id, deleteUndefinedKeys(config)); }, + unsupportedProps: [ + "DistributionConfig.S3Origin", + "DistributionConfig.CustomOrigin", + ], attributes: { Ref: (resource) => resource.id, Id: (resource) => resource.id, diff --git a/src/mappings/services/cognito.ts b/src/mappings/services/cognito.ts index e4c92ef..d1b858e 100644 --- a/src/mappings/services/cognito.ts +++ b/src/mappings/services/cognito.ts @@ -111,9 +111,9 @@ export function registerCognitoMappings() { })), tags: Object.fromEntries( identityPool?.IdentityPoolTags?.map(({ - Key: key, - Value: value, - }) => [key, value]) || [], + Key: key, + Value: value, + }) => [key, value]) || [], ), allowUnauthenticatedIdentities: identityPool.AllowUnauthenticatedIdentities, developerProviderName: identityPool.DeveloperProviderName, @@ -197,6 +197,10 @@ export function registerCognitoMappings() { lambdaArn: userPool?.LambdaConfig?.CustomSMSSender?.LambdaArn as string, lambdaVersion: userPool?.LambdaConfig?.CustomSMSSender?.LambdaVersion as string, }, + preTokenGenerationConfig: { + lambdaArn: userPool?.LambdaConfig?.PreTokenGenerationConfig?.LambdaArn as string, + lambdaVersion: userPool?.LambdaConfig?.PreTokenGenerationConfig?.LambdaVersion as string, + }, }, mfaConfiguration: userPool?.MfaConfiguration, schema: userPool?.Schema?.map(schema => ({ @@ -231,6 +235,7 @@ export function registerCognitoMappings() { requireSymbols: userPool?.Policies?.PasswordPolicy?.RequireSymbols, requireUppercase: userPool?.Policies?.PasswordPolicy?.RequireUppercase, minimumLength: userPool?.Policies?.PasswordPolicy?.MinimumLength, + passwordHistorySize: userPool?.Policies?.PasswordPolicy?.PasswordHistorySize, }, usernameAttributes: userPool?.UsernameAttributes, usernameConfiguration: { @@ -270,8 +275,8 @@ export function registerCognitoMappings() { }, unsupportedProps: [ "AdminCreateUserConfig.UnusedAccountValidityDays", - "UserPoolAddOns.AdvancedSecurityAdditionalFlows" - ], + "UserPoolAddOns.AdvancedSecurityAdditionalFlows", + ], attributes: { Ref: resource => resource.id, UserPoolId: resource => resource.id, diff --git a/src/mappings/services/dynamodb.ts b/src/mappings/services/dynamodb.ts index 1963c60..9c073e9 100644 --- a/src/mappings/services/dynamodb.ts +++ b/src/mappings/services/dynamodb.ts @@ -120,6 +120,16 @@ export function registerDynamoDBMappings() { ); } + if (tableProps.StreamSpecification?.ResourcePolicy) { + proxy.touchPath("StreamSpecification.ResourcePolicy.PolicyDocument"); + implicitDependencies.push( + new DynamodbResourcePolicy(scope, `${id}-stream-resource-policy`, { + policy: Fn.jsonencode(tableProps.StreamSpecification.ResourcePolicy.PolicyDocument), + resourceArn: table.streamArn, + }), + ); + } + if (implicitDependencies.length > 0) { ImplicitDependencyAspect.of(table, implicitDependencies); } @@ -130,6 +140,8 @@ export function registerDynamoDBMappings() { // https://github.com/hashicorp/terraform-provider-aws/issues/37256 "OnDemandThroughput", "SSESpecification.SSEType", + "GlobalSecondaryIndexes.*.OnDemandThroughput", + "KinesisStreamSpecification.ApproximateCreationDateTimePrecision", ], attributes: { Arn: resource => resource.arn, diff --git a/src/mappings/services/ec2-vpc.ts b/src/mappings/services/ec2-vpc.ts index 529b0f5..10b12b3 100644 --- a/src/mappings/services/ec2-vpc.ts +++ b/src/mappings/services/ec2-vpc.ts @@ -19,8 +19,15 @@ import { createGenericCCApiMapping, deleteUndefinedKeys, registerMapping, regist export function registerEC2VPCMappings() { registerMappingTyped(CfnInternetGateway, InternetGateway, { - resource: (scope, id) => { - return new InternetGateway(scope, id); + resource: (scope, id, props) => { + return new InternetGateway(scope, id, { + tags: Object.fromEntries( + props?.Tags?.map(({ + Key: key, + Value: value, + }) => [key, value]) || [], + ), + }); }, attributes: { InternetGatewayId: (igw: InternetGateway) => igw.id, @@ -166,7 +173,7 @@ export function registerEC2VPCMappings() { }); registerMappingTyped(CfnSecurityGroup, SecurityGroup, { - resource: (scope, id, cfnProps, proxy) => { + resource: (scope, id, cfnProps) => { const props: SecurityGroupConfig = { name: cfnProps.GroupName, vpcId: cfnProps.VpcId, @@ -182,7 +189,6 @@ export function registerEC2VPCMappings() { const securityGroup = new SecurityGroup(scope, id, deleteUndefinedKeys(props)); cfnProps.SecurityGroupIngress?.forEach((ingress, idx) => { - new VpcSecurityGroupIngressRule( securityGroup, `${idx}-ingress`, @@ -220,6 +226,12 @@ export function registerEC2VPCMappings() { return securityGroup; }, + unsupportedProps: [ + "SecurityGroupIngress.*.SourceSecurityGroupName", + "SecurityGroupIngress.*.SourceSecurityGroupOwnerId", + "SecurityGroupEgress.*.SourceSecurityGroupName", + "SecurityGroupEgress.*.SourceSecurityGroupOwnerId", + ], attributes: { VpcId: (sg: SecurityGroup) => sg.vpcId, Ref: (sg: SecurityGroup) => sg.id, diff --git a/src/mappings/services/eks.ts b/src/mappings/services/eks.ts index e7b7745..cdf7343 100644 --- a/src/mappings/services/eks.ts +++ b/src/mappings/services/eks.ts @@ -1,5 +1,3 @@ -import {registerMappingTyped} from "../utils.js"; - export function registerEcsMappings() { // registerMapping("Custom::AWSCDK-EKS-Cluster", { // resource: (scope, id, props) => { @@ -53,6 +51,4 @@ export function registerEcsMappings() { // OpenIdConnectIssuer: (resource: EksCluster) => resource.identity.get(0).oidc.get(0).issuer, // } // }) - - } diff --git a/src/mappings/services/events.ts b/src/mappings/services/events.ts index 145d3d9..71de987 100644 --- a/src/mappings/services/events.ts +++ b/src/mappings/services/events.ts @@ -45,6 +45,7 @@ export function registerEventsMappings() { pathParameterValues: target.HttpParameters?.PathParameterValues, queryStringParameters: target.HttpParameters?.QueryStringParameters, }, + ecsTarget: { enableEcsManagedTags: target.EcsParameters?.EnableECSManagedTags, group: target.EcsParameters?.Group, @@ -126,6 +127,11 @@ export function registerEventsMappings() { return rule; }, + unsupportedProps: [ + "Targets.*.EcsParameters.ReferenceId", + "Targets.*.RedshiftDataParameters.Sqls", + "Targets.*.AppSyncParameters", + ], attributes: { Ref: (rule: CloudwatchEventRule) => rule.id, Arn: (rule: CloudwatchEventRule) => rule.arn, diff --git a/src/mappings/services/iam.ts b/src/mappings/services/iam.ts index 8ac7f08..b4719e0 100644 --- a/src/mappings/services/iam.ts +++ b/src/mappings/services/iam.ts @@ -14,7 +14,6 @@ import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerIamMappings() { registerMappingTyped(CfnRole, IamRole, { resource(scope, id, props, proxy) { - proxy.touchPath("AssumeRolePolicyDocument"); proxy.touchPath("Policies.*.PolicyDocument"); const roleProps: IamRoleConfig = { diff --git a/src/mappings/services/lambda.ts b/src/mappings/services/lambda.ts index 83f4f75..9039068 100644 --- a/src/mappings/services/lambda.ts +++ b/src/mappings/services/lambda.ts @@ -1,9 +1,11 @@ +import { file as tf_file } from "@cdktf/provider-archive"; import { LambdaEventSourceMapping } from "@cdktf/provider-aws/lib/lambda-event-source-mapping/index.js"; import { LambdaFunction, LambdaFunctionConfig } from "@cdktf/provider-aws/lib/lambda-function/index.js"; import { LambdaLayerVersionPermission } from "@cdktf/provider-aws/lib/lambda-layer-version-permission/index.js"; import { LambdaLayerVersion } from "@cdktf/provider-aws/lib/lambda-layer-version/index.js"; import { LambdaPermission } from "@cdktf/provider-aws/lib/lambda-permission/index.js"; -import { IResolvable, Names } from "aws-cdk-lib"; +import { S3Object } from "@cdktf/provider-aws/lib/s3-object/index.js"; +import { IResolvable, Names, Stack as AWSStack } from "aws-cdk-lib"; import { CfnEventSourceMapping, CfnFunction, @@ -12,6 +14,10 @@ import { CfnPermission, } from "aws-cdk-lib/aws-lambda"; import { Fn, TerraformLocal } from "cdktf"; +import { join } from "node:path"; +import { tmpdir } from "os"; +import { TerraformSynthesizer } from "../../lib/core/terraform-synthesizer.js"; +import { getSingletonArchiveProvider } from "../../lib/stack-provider-singletons.js"; import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerLambdaMappings() { @@ -52,7 +58,6 @@ export function registerLambdaMappings() { s3Bucket: props.Content.S3Bucket, s3Key: props.Content.S3Key, s3ObjectVersion: props.Content.S3ObjectVersion, - skipDestroy: true, }), ); @@ -78,7 +83,6 @@ export function registerLambdaMappings() { deleteUndefinedKeys({ action: props.Action, principal: props.Principal, - skipDestroy: true, layerName: props.LayerVersionArn, organizationId: props.OrganizationId, statementId: "", @@ -102,7 +106,57 @@ export function registerLambdaMappings() { // }); // registerMappingTyped(CfnFunction, LambdaFunction, { - resource(scope, id, lambdaProps): LambdaFunction { + resource(scope, id, lambdaProps, proxy): LambdaFunction { + proxy.touchPath("Environment.Variables"); + proxy.touchPath("VpcConfig.SecurityGroupIds"); + proxy.touchPath("VpcConfig.SubnetIds"); + proxy.touchPath("Layers"); + proxy.touchPath("Architectures"); + proxy.touchPath("ImageConfig.Command"); + proxy.touchPath("ImageConfig.EntryPoint"); + + let codeConfig: { + s3Bucket?: string; + s3Key?: string; + s3ObjectVersion?: string; + filename?: string; + } = {}; + + if (lambdaProps.Code.ZipFile) { + // Use the archive provider to create a zip file from the inline source + const archiveProvider = getSingletonArchiveProvider(scope); + const tempPath = join(tmpdir(), `${scope.node.addr}.zip`); + const archive = new tf_file.File(scope, `inline-zip-archive`, { + type: "zip", + outputPath: tempPath, + provider: archiveProvider, + source: [{ + content: lambdaProps.Code.ZipFile, + filename: "index.js", + }], + }); + + // Use the stack synthesizer to create a file asset + const synthesizer = AWSStack.of(scope).synthesizer as TerraformSynthesizer; + const s3Object = new S3Object(scope, `inline-zip-object`, { + bucket: synthesizer.getAssetBucket().bucket, + key: `${scope.node.addr}-inline-zip-object`, + source: archive.outputPath, + }); + + codeConfig = { + s3Bucket: s3Object.bucket, + s3Key: s3Object.key, + s3ObjectVersion: s3Object.versionId, + }; + } else { + codeConfig = { + s3Bucket: lambdaProps.Code.S3Bucket, + s3Key: lambdaProps.Code.S3Key, + s3ObjectVersion: lambdaProps.Code.S3ObjectVersion, + }; + } + const mapped: LambdaFunctionConfig = { ephemeralStorage: { size: lambdaProps.EphemeralStorage?.Size as number, @@ -110,7 +164,7 @@ export function registerLambdaMappings() { loggingConfig: { logFormat: lambdaProps.LoggingConfig?.LogFormat as string, logGroup: lambdaProps.LoggingConfig?.LogGroup as string, - applicationLogLevel: lambdaProps.LoggingConfig?.SystemLogLevel as string, + applicationLogLevel: lambdaProps.LoggingConfig?.ApplicationLogLevel as string, systemLogLevel: lambdaProps.LoggingConfig?.SystemLogLevel as string, }, description: lambdaProps.Description, @@ -122,14 +176,14 @@ export function registerLambdaMappings() { }) => [Key, Value]) || [], ), codeSigningConfigArn: lambdaProps.CodeSigningConfigArn, - s3Bucket: lambdaProps.Code.S3Bucket, functionName: lambdaProps.FunctionName!, deadLetterConfig: { targetArn: lambdaProps.DeadLetterConfig?.TargetArn as string, }, architectures: lambdaProps.Architectures, - s3Key: lambdaProps.Code.S3Key, - s3ObjectVersion: lambdaProps.Code.S3ObjectVersion, + s3Bucket: codeConfig.s3Bucket, + s3Key: codeConfig.s3Key, + s3ObjectVersion: codeConfig.s3ObjectVersion, fileSystemConfig: { arn: lambdaProps.FileSystemConfigs?.[0].Arn as string, localMountPath: lambdaProps.FileSystemConfigs?.[0].LocalMountPath as string, @@ -152,6 +206,7 @@ export function registerLambdaMappings() { reservedConcurrentExecutions: lambdaProps.ReservedConcurrentExecutions, runtime: lambdaProps.Runtime, vpcConfig: { + ipv6AllowedForDualStack: lambdaProps.VpcConfig?.Ipv6AllowedForDualStack as boolean, subnetIds: lambdaProps.VpcConfig?.SubnetIds as string[], securityGroupIds: lambdaProps.VpcConfig?.SecurityGroupIds as string[], }, @@ -168,9 +223,10 @@ export function registerLambdaMappings() { const lambda = new LambdaFunction(scope, id, mapped); lambda.functionName = mapped.functionName || Names.uniqueResourceName(lambda, { maxLength: 64 }); + return lambda; }, - unsupportedProps: ["RuntimeManagementConfig"], + unsupportedProps: ["RuntimeManagementConfig", "Code.SourceKMSKeyArn", "RecursiveLoop"], attributes: { Arn: resource => resource.arn, SnapStartResponseApplyOn: resource => resource.snapStart.applyOn, @@ -207,6 +263,7 @@ export function registerLambdaMappings() { eventSourceArn: props.EventSourceArn, batchSize: props.BatchSize, bisectBatchOnFunctionError: props.BisectBatchOnFunctionError, + kmsKeyArn: props.KmsKeyArn, destinationConfig: { onFailure: { destinationArn: props.DestinationConfig?.OnFailure?.Destination as string, diff --git a/src/mappings/services/logs.ts b/src/mappings/services/logs.ts index eca07fe..3433468 100644 --- a/src/mappings/services/logs.ts +++ b/src/mappings/services/logs.ts @@ -5,7 +5,7 @@ import { } from "@cdktf/provider-aws/lib/cloudwatch-log-resource-policy/index.js"; import { CfnLogGroup, CfnResourcePolicy } from "aws-cdk-lib/aws-logs"; import { TerraformStack } from "cdktf"; -import { deleteUndefinedKeys, getDeletableObject, registerMapping, registerMappingTyped } from "../utils.js"; +import { deleteUndefinedKeys, registerMapping, registerMappingTyped } from "../utils.js"; interface LogRetentionProps { ServiceToken: string; diff --git a/src/mappings/services/rds.ts b/src/mappings/services/rds.ts index 52d145f..a092774 100644 --- a/src/mappings/services/rds.ts +++ b/src/mappings/services/rds.ts @@ -10,7 +10,7 @@ // allocatedStorage: props?.AllocatedStorage, // dbClusterInstanceClass: props?.DbClusterInstanceClass, // snapshotIdentifier: props?.SnapshotIdentifier, -// engine: props!.Engine!, +// engine: props?.Engine, // engineVersion: props?.EngineVersion, // backtrackWindow: props?.BacktrackWindow, // backupRetentionPeriod: props?.BackupRetentionPeriod, diff --git a/src/mappings/services/sns.ts b/src/mappings/services/sns.ts index e11a3dd..f43717e 100644 --- a/src/mappings/services/sns.ts +++ b/src/mappings/services/sns.ts @@ -7,7 +7,11 @@ import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerSnsMappings() { registerMappingTyped(CfnSubscription, SnsTopicSubscription, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { + proxy.touchPath("DeliveryPolicy"); + proxy.touchPath("FilterPolicy"); + proxy.touchPath("RedrivePolicy"); + proxy.touchPath("ReplayPolicy"); return new SnsTopicSubscription( scope, id, @@ -28,12 +32,16 @@ export function registerSnsMappings() { unsupportedProps: ["Region"], attributes: { Id: (resource) => resource.id, + Arn: (resource) => resource.arn, Ref: (resource) => resource.id, }, }); registerMappingTyped(CfnTopic, SnsTopic, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { + proxy.touchPath("ArchivePolicy"); + proxy.touchPath("DataProtectionPolicy"); + let topicConfig: SnsTopicConfig = { name: props?.TopicName, displayName: props?.DisplayName, diff --git a/src/mappings/services/sqs.ts b/src/mappings/services/sqs.ts index 3b13567..4c2460a 100644 --- a/src/mappings/services/sqs.ts +++ b/src/mappings/services/sqs.ts @@ -5,7 +5,8 @@ import { registerMappingTyped } from "../utils.js"; export function registerSqsMappings() { registerMappingTyped(CfnQueuePolicy, SqsQueuePolicy, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { + proxy.touchPath("PolicyDocument"); const policiesEncoded = Fn.jsonencode(props.PolicyDocument); const sqsQueuePolicies = props.Queues.map((queue): SqsQueuePolicyConfig => ({ policy: policiesEncoded, diff --git a/src/mappings/services/stepfunctions.ts b/src/mappings/services/stepfunctions.ts index 843e9ed..a3501e2 100644 --- a/src/mappings/services/stepfunctions.ts +++ b/src/mappings/services/stepfunctions.ts @@ -6,7 +6,7 @@ import { deleteUndefinedKeys, registerMappingTyped } from "../utils.js"; export function registerStepFunctinMappings() { registerMappingTyped(CfnStateMachine, SfnStateMachine, { - resource(scope, id, props) { + resource(scope, id, props, proxy) { let definitionString: string | undefined = undefined; if (props?.DefinitionString) { definitionString = props.DefinitionString; @@ -14,9 +14,11 @@ export function registerStepFunctinMappings() { const s3Obj = new DataAwsS3BucketObject(scope, `${id}-definition`, { bucket: props.DefinitionS3Location.Bucket as string, key: props.DefinitionS3Location.Key as string, + versionId: props.DefinitionS3Location.Version as string, }); definitionString = s3Obj.body as string; } else if (props?.Definition) { + proxy.touchPath("Definition"); definitionString = Fn.jsonencode(props.Definition); } if (!definitionString) { @@ -54,6 +56,11 @@ export function registerStepFunctinMappings() { tracingConfiguration: { enabled: props?.TracingConfiguration?.Enabled, }, + encryptionConfiguration: { + kmsKeyId: props?.EncryptionConfiguration?.KmsKeyId, + type: props?.EncryptionConfiguration?.Type, + kmsDataKeyReusePeriodSeconds: props?.EncryptionConfiguration?.KmsDataKeyReusePeriodSeconds, + }, }; return new SfnStateMachine(scope, id, deleteUndefinedKeys(config)); diff --git a/src/mappings/utils.ts b/src/mappings/utils.ts index 3fea72f..1365f0f 100644 --- a/src/mappings/utils.ts +++ b/src/mappings/utils.ts @@ -3,13 +3,13 @@ import { CloudcontrolapiResource } from "@cdktf/provider-aws/lib/cloudcontrolapi-resource/index.js"; import { CfnResource, IResolvable } from "aws-cdk-lib"; import { Fn, TerraformResource } from "cdktf"; -import { propertyAccess} from "cdktf/lib/tfExpression.js"; -import {Construct} from "constructs"; +import { propertyAccess } from "cdktf/lib/tfExpression.js"; +import { Construct } from "constructs"; import supportedAwsccResourceTypes from "../lib/core/awscc/supported-types.js"; import supportedTypes from "../lib/core/awscc/supported-types.js"; +import { AccessTracker } from "./access-tracker.js"; import { AdaptCfnProps, CfnAttributes } from "./cfn-mapper-types.js"; import { mapperDebug, mapperWarn, ResourceMapper } from "./helper.js"; -import * as mm from "minimatch" export function deleteUndefinedKeys(obj: T): T { for (const key in obj) { @@ -111,7 +111,12 @@ export interface CfnMapper< new(...args: never): TerraformResource; }, > { - resource(scope: Construct, id: string, props: CfnPropsForResourceClass, propProxy: AccessTracker>): InstanceType; + resource( + scope: Construct, + id: string, + props: CfnPropsForResourceClass, + propProxy: AccessTracker>, + ): InstanceType; unsupportedProps?: string[]; attributes: { [key in keyof CfnAttributes>]: ( @@ -147,144 +152,3 @@ export function registerMappingTyped< attributes: mapper.attributes as unknown as Mapping["attributes"], }); } - -// // export function registerCustomResourceMapping< -// // TfClass extends { -// // new(...args: never): Tf; -// // }, -// // Tf extends TerraformResource, -// // >(resourceType: string, tfClass: TfClass, mapper: Mapping) { -// // registerMapping(resourceType, { -// // -// // }); -// // } - -// export function getDeletableObject< -// T extends { -// [key: string]: unknown; -// }, -// >(originalObj: T): T { -// const obj = JSON.parse(JSON.stringify(originalObj)); -// return new Proxy(obj, { -// get: (target, prop) => { -// delete originalObj[prop as keyof T]; -// return obj[prop as keyof T]; -// }, -// }); -// } - -export class AccessTracker { - private accessedProperties: Set = new Set(); - private properties: Set = new Set(); - - private obj: T; - public proxy: T; - - constructor(obj: T) { - this.obj = JSON.parse(JSON.stringify(obj)); - this.proxy = this.createProxy(obj); - this.properties = new Set(this.inspectProperties(obj)); - - // Lock the object to prevent further modifications - Object.freeze(this.obj); - } - - private createProxy(target: T, path: string[] = []): T { - if (typeof target !== "object" || target === null) { - throw new Error("Target is not an object"); - } - - return new Proxy(target, { - get: (obj, prop) => { - const propPath = [...path, prop.toString()].join("."); - if (path.length === 0 && !this.properties.has(propPath)) { - return - } - this.accessedProperties.add(propPath); - const value = obj[prop as keyof typeof obj]; - if (value && typeof value === "object") { - return this.createProxy(value as T, [...path, prop.toString()]); - } - return value; - } - }); - } - - private inspectProperties(obj: T, path: string[] = []): string[] { - const properties = []; - for (const key in obj) { - if (obj[key] === undefined) { - continue; - } - const propPath = [...path, key].join("."); - properties.push(propPath); - if (obj[key] && typeof obj[key] === "object") { - properties.push(...this.inspectProperties(obj[key] as T, [...path, key])); - } - } - return properties; - } - - public isAllPropertiesAccessed(): boolean { - for (const property of this.properties) { - if (!this.accessedProperties.has(property)) { - return false; - } - } - return true; - } - - public hasProperty(path: string): boolean { - const pattern = this.pathToReg(path); - for (const property of this.properties) { - if (pattern.test(property)) { - return true; - } - } - return false; - } - - /** - * Removes all properties under the given JSON path from the properties list - */ - public removePropertiesUnderPath(path: string): void { - const regExp = this.pathToReg(path); - for (const property of Array.from(this.properties)) { - if (regExp.test(property)) { - this.properties.delete(property); - this.accessedProperties.delete(property); - } - } - } - - private pathToReg(path: string): RegExp { - const parts = path.split("."); - const regParts = parts.map(part => - part === "*" ? "[^.]*" : part - ); - return new RegExp(`^${regParts.join("\\.")}`); - } - - public getUnaccessedProperties(): string[] { - return Array.from(this.properties).filter((property) => !this.accessedProperties.has(property)); - } - - public getAccessedProperties(): string[] { - return Array.from(this.accessedProperties); - } - - public touchPathReg(exp: RegExp): void { - for (const property of this.properties) { - if (exp.test(property)) { - this.accessedProperties.add(property); - } - } - } - - /** - * Touches all paths under the given JSON path - */ - public touchPath(path: string): void { - this.touchPathReg(this.pathToReg(path)); - } -} From a23ee43852fe6e3ecca7be06df42fc05b6d1dc32 Mon Sep 17 00:00:00 2001 From: John Conley <8932043+jfrconley@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:26:38 -0700 Subject: [PATCH 3/5] docs(changeset): construct stability fixes --- .changeset/dull-numbers-yawn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/dull-numbers-yawn.md diff --git a/.changeset/dull-numbers-yawn.md b/.changeset/dull-numbers-yawn.md new file mode 100644 index 0000000..aa19dcc --- /dev/null +++ b/.changeset/dull-numbers-yawn.md @@ -0,0 +1,5 @@ +--- +"@nrfcloud/cdktf-aws-adaptor": minor +--- + +construct stability fixes From ef9b31f0bf4336b788257b43f707ff9d250a6255 Mon Sep 17 00:00:00 2001 From: John Conley <8932043+jfrconley@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:35:48 -0700 Subject: [PATCH 4/5] fix tests --- src/__tests__/mappings/cognito.spec.ts | 4 ---- src/mappings/services/lambda.ts | 1 - 2 files changed, 5 deletions(-) diff --git a/src/__tests__/mappings/cognito.spec.ts b/src/__tests__/mappings/cognito.spec.ts index c06fd24..2748c85 100644 --- a/src/__tests__/mappings/cognito.spec.ts +++ b/src/__tests__/mappings/cognito.spec.ts @@ -203,10 +203,6 @@ describe("Cognito mappings", () => { supportedLoginProviders: { "login-provider": "login-provider", }, - tags: { - hello: "hi", - world: "universe", - }, }, ["cognitoEvents", "pushSync", "cognitoStreams"], ); diff --git a/src/mappings/services/lambda.ts b/src/mappings/services/lambda.ts index 5f265a0..9039068 100644 --- a/src/mappings/services/lambda.ts +++ b/src/mappings/services/lambda.ts @@ -312,7 +312,6 @@ export function registerLambdaMappings() { }), ); }, - unsupportedProps: ["KmsKeyArn"], attributes: { Ref: (resource: LambdaEventSourceMapping) => resource.id, Id: (resource: LambdaEventSourceMapping) => resource.id, From d8a7549d0de247bfc827cd67c7a6cd6d2de923f6 Mon Sep 17 00:00:00 2001 From: John Conley <8932043+jfrconley@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:42:19 -0700 Subject: [PATCH 5/5] disable snapshot for inline lambda --- src/__tests__/helpers.ts | 10 +++++++--- src/__tests__/mappings/lambda.spec.ts | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/__tests__/helpers.ts b/src/__tests__/helpers.ts index cf63364..e02d1d2 100644 --- a/src/__tests__/helpers.ts +++ b/src/__tests__/helpers.ts @@ -18,6 +18,7 @@ import { AccessTracker } from "../mappings/access-tracker.js"; export function synthesizeConstructAndTestStability>( constructClass: C, props: ConstructorParameters[2], + disableSnapshot = false, ) { class TestClass extends AwsTerraformAdaptorStack { public readonly resource: T = new constructClass(this, "resource", props); @@ -33,7 +34,7 @@ export function synthesizeConstructAndTestStability[2]>, BaseTfResourceProps>, unsupportedCfPropPaths: string[] = [], + disableSnapshot = false, ) { class ConstructWrapper extends Construct { public readonly resource: C; @@ -94,7 +96,7 @@ export function synthesizeElementAndTestStability< // Attempt to create a new instance of the construct with the unsupported properties // This should throw an error if the properties are not removed try { - synthesizeConstructAndTestStability(ConstructWrapper, props); + synthesizeConstructAndTestStability(ConstructWrapper, props, disableSnapshot); throw new Error( `Expected an error when creating an instance of ${constructClass.name} with unsupported properties: ${unsupportedProps}`, ); @@ -111,7 +113,7 @@ export function synthesizeElementAndTestStability< const propProxy = new AccessTracker(props); unsupportedCfPropPaths.forEach(path => propProxy.removePropertiesUnderPath(path)); - const output = synthesizeConstructAndTestStability(ConstructWrapper, propProxy.clone()); + const output = synthesizeConstructAndTestStability(ConstructWrapper, propProxy.clone(), disableSnapshot); const transformedResource = output.resource.node.tryFindChild("resource") as T; expectResourcePropertiesMatch(transformedResource, terraformClass, terraformProps); @@ -150,6 +152,7 @@ export function itShouldMapCfnElementToTerraformResource< terraformClass: TC, terraformProps: Omit[2]>, BaseTfResourceProps>, unsupportedCfPropPaths: string[] = [], + disableSnapshot = false, ) { it(`Should map ${(constructClass as unknown as { CFN_RESOURCE_TYPE_NAME: string }).CFN_RESOURCE_TYPE_NAME}`, () => { synthesizeElementAndTestStability( @@ -158,6 +161,7 @@ export function itShouldMapCfnElementToTerraformResource< terraformClass, terraformProps, unsupportedCfPropPaths, + disableSnapshot, ); }); } diff --git a/src/__tests__/mappings/lambda.spec.ts b/src/__tests__/mappings/lambda.spec.ts index bfdb165..42d9949 100644 --- a/src/__tests__/mappings/lambda.spec.ts +++ b/src/__tests__/mappings/lambda.spec.ts @@ -376,6 +376,7 @@ describe("Lambda mappings", () => { }, }, ["runtimeManagementConfig", "recursiveLoop", "code.sourceKmsKeyArn"], + true, ); });