From a18f0059363f5194aca341a453d685b02308f30f Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Mon, 24 Feb 2025 20:47:26 +0000 Subject: [PATCH 01/30] chore(toolkit-lib): publish-local script is not working (#115) --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .projenrc.ts | 1 + packages/@aws-cdk/toolkit-lib/.projen/tasks.json | 3 ++- packages/@aws-cdk/toolkit-lib/build-tools/package.sh | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.projenrc.ts b/.projenrc.ts index 74538dc4..61a07601 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -1196,6 +1196,7 @@ toolkitLib.addTask('docs', { }); toolkitLib.addTask('publish-local', { exec: './build-tools/package.sh', + receiveArgs: true, }); ////////////////////////////////////////////////////////////////////// diff --git a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json index a7003aaf..4a5eb8f0 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json @@ -180,7 +180,8 @@ "name": "publish-local", "steps": [ { - "exec": "./build-tools/package.sh" + "exec": "./build-tools/package.sh", + "receiveArgs": true } ] }, diff --git a/packages/@aws-cdk/toolkit-lib/build-tools/package.sh b/packages/@aws-cdk/toolkit-lib/build-tools/package.sh index fc6b7c6e..898132e3 100755 --- a/packages/@aws-cdk/toolkit-lib/build-tools/package.sh +++ b/packages/@aws-cdk/toolkit-lib/build-tools/package.sh @@ -10,7 +10,9 @@ cd "$(dirname $(dirname "$0"))" rm -rf dist/ mkdir -p dist/js npm pkg set version=0.0.0-alpha.$commit +npm pkg set dependencies.@aws-cdk/cloud-assembly-schema=$version npm pkg set dependencies.@aws-cdk/cloudformation-diff=$version npm pack --pack-destination dist/js npm pkg set version=$reset npm pkg set dependencies.@aws-cdk/cloudformation-diff=^$reset +npm pkg set dependencies.@aws-cdk/cloud-assembly-schema=^$reset From 9d80cfc6e3fc5392c68c33a49221ce1bfc08696d Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Mon, 24 Feb 2025 22:02:42 +0100 Subject: [PATCH 02/30] chore: record publishing timestamps in SSM (#104) Write publishing timestamps to SSM so that we can more effectively alarm on problems caused by releases. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- .github/workflows/release.yml | 39 ++++++++++++++ .projen/tasks.json | 3 ++ .projenrc.ts | 4 ++ projenrc/adc-publishing.ts | 1 + projenrc/record-publishing-timestamp.ts | 68 +++++++++++++++++++++++++ 5 files changed, 115 insertions(+) create mode 100644 projenrc/record-publishing-timestamp.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba97c65a..8d7d7fb4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -167,6 +167,13 @@ jobs: name: standalone_build-artifact path: dist/standalone overwrite: true + - name: "standalone: Upload artifact" + if: ${{ steps.git_remote.outputs.latest_commit == github.sha }} + uses: actions/upload-artifact@v4.4.0 + with: + name: standalone_build-artifact + path: dist/standalone + overwrite: true aws-cdk-cloud-assembly-schema_release_github: name: "@aws-cdk/cloud-assembly-schema: Publish to GitHub Releases" needs: @@ -999,8 +1006,40 @@ jobs: role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} role-session-name: releasing@aws-cdk-cli output-credentials: true + mask-aws-account-id: true - name: Publish artifacts env: PUBLISHING_ROLE_ARN: ${{ vars.PUBLISHING_ROLE_ARN }} TARGET_BUCKETS: ${{ vars.TARGET_BUCKETS }} run: npx tsx projenrc/publish-to-adc.task.ts + record_timestamp: + name: "aws-cdk: Record publishing timestamp" + needs: release + runs-on: ubuntu-latest + permissions: + contents: write + environment: releasing + if: ${{ needs.release.outputs.latest_commit == github.sha }} + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: aws-cdk_build-artifact + path: dist + - name: Read version from build artifacts + id: aws-cdk-version + run: echo "version=$(cat dist/version.txt)" >> $GITHUB_OUTPUT + - name: Authenticate Via OIDC Role + id: creds + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: us-east-1 + role-duration-seconds: 14400 + role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} + role-session-name: releasing@aws-cdk-cli + output-credentials: true + mask-aws-account-id: true + - name: Publish artifacts + run: |- + aws ssm put-parameter --name "/published/cdk/cli/version" --type "String" --value "${{ steps.aws-cdk-version.outputs.version }}" --overwrite + aws ssm put-parameter --name "/published/cdk/cli/timestamp" --type "String" --value "$(date +%s)" --overwrite diff --git a/.projen/tasks.json b/.projen/tasks.json index a892abc4..cde31f1e 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -9,6 +9,9 @@ { "exec": "yarn workspaces run build" }, + { + "exec": "tsx projenrc/build-standalone-zip.task.ts" + }, { "spawn": "eslint" }, diff --git a/.projenrc.ts b/.projenrc.ts index 61a07601..5b7e4668 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -7,6 +7,7 @@ import { BundleCli } from './projenrc/bundle'; import { CodeCovWorkflow } from './projenrc/codecov'; import { ESLINT_RULES } from './projenrc/eslint'; import { JsiiBuild } from './projenrc/jsii'; +import { RecordPublishingTimestamp } from './projenrc/record-publishing-timestamp'; // 5.7 sometimes gives a weird error in `ts-jest` in `@aws-cdk/cli-lib-alpha` // https://github.com/microsoft/TypeScript/issues/60159 @@ -224,6 +225,9 @@ const repoProject = new yarn.Monorepo({ }, }); +new AdcPublishing(repoProject); +new RecordPublishingTimestamp(repoProject); + // Eslint for projen config // @ts-ignore repoProject.eslint = new pj.javascript.Eslint(repoProject, { diff --git a/projenrc/adc-publishing.ts b/projenrc/adc-publishing.ts index 62092ab4..02a197a9 100644 --- a/projenrc/adc-publishing.ts +++ b/projenrc/adc-publishing.ts @@ -60,6 +60,7 @@ export class AdcPublishing extends Component { 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', 'role-session-name': 'releasing@aws-cdk-cli', 'output-credentials': true, + 'mask-aws-account-id': true, }, }, { diff --git a/projenrc/record-publishing-timestamp.ts b/projenrc/record-publishing-timestamp.ts new file mode 100644 index 00000000..3c92c103 --- /dev/null +++ b/projenrc/record-publishing-timestamp.ts @@ -0,0 +1,68 @@ +import { Monorepo } from 'cdklabs-projen-project-types/lib/yarn'; +import { Component } from 'projen'; +import { JobPermission } from 'projen/lib/github/workflows-model'; + +/** + * Record publishing timestamp to SSM + */ +export class RecordPublishingTimestamp extends Component { + constructor(private readonly project_: Monorepo) { + super(project_); + } + + public preSynthesize() { + const ssmPrefix = '/published/cdk/cli'; + + const releaseWf = this.project_.github?.tryFindWorkflow('release'); + if (!releaseWf) { + throw new Error('Could not find release workflow'); + } + + releaseWf.addJob('record_timestamp', { + name: 'aws-cdk: Record publishing timestamp', + environment: 'releasing', // <-- this has the configuration + needs: ['release'], + runsOn: ['ubuntu-latest'], + permissions: { + contents: JobPermission.WRITE, + }, + if: '${{ needs.release.outputs.latest_commit == github.sha }}', + steps: [ + { + name: 'Download build artifacts', + uses: 'actions/download-artifact@v4', + with: { + name: 'aws-cdk_build-artifact', + path: 'dist', + }, + }, + { + name: 'Read version from build artifacts', + id: 'aws-cdk-version', + run: 'echo "version=$(cat dist/version.txt)" >> $GITHUB_OUTPUT', + }, + { + name: 'Authenticate Via OIDC Role', + id: 'creds', + uses: 'aws-actions/configure-aws-credentials@v4', + with: { + 'aws-region': 'us-east-1', + 'role-duration-seconds': 14400, + 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', + 'role-session-name': 'releasing@aws-cdk-cli', + 'output-credentials': true, + 'mask-aws-account-id': true, + }, + }, + { + name: 'Publish artifacts', + run: [ + `aws ssm put-parameter --name "${ssmPrefix}/version" --type "String" --value "\${{ steps.aws-cdk-version.outputs.version }}" --overwrite`, + `aws ssm put-parameter --name "${ssmPrefix}/timestamp" --type "String" --value "$(date +%s)" --overwrite`, + ].join('\n'), + }, + ], + }); + } +} + From 3e228d65f9ff6b412bafdb0cb9709f9370551b58 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Mon, 24 Feb 2025 16:09:51 -0500 Subject: [PATCH 03/30] chore(cli): update gc link (#113) Updates link to reflect new repo name. Fixes https://github.com/aws/aws-cdk/issues/33566 --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license Co-authored-by: Momo Kornher --- packages/aws-cdk/lib/cli/cli-config.ts | 2 +- packages/aws-cdk/lib/cli/parse-command-line-arguments.ts | 2 +- packages/aws-cdk/lib/cli/user-input.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk/lib/cli/cli-config.ts b/packages/aws-cdk/lib/cli/cli-config.ts index 20030509..de9cf0f4 100644 --- a/packages/aws-cdk/lib/cli/cli-config.ts +++ b/packages/aws-cdk/lib/cli/cli-config.ts @@ -98,7 +98,7 @@ export async function makeConfig(): Promise { }, }, gc: { - description: 'Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/README.md#cdk-gc', + description: 'Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk-cli/tree/main/packages/aws-cdk#cdk-gc', arg: { name: 'ENVIRONMENTS', variadic: true, diff --git a/packages/aws-cdk/lib/cli/parse-command-line-arguments.ts b/packages/aws-cdk/lib/cli/parse-command-line-arguments.ts index 6c4eae3f..d3359dd9 100644 --- a/packages/aws-cdk/lib/cli/parse-command-line-arguments.ts +++ b/packages/aws-cdk/lib/cli/parse-command-line-arguments.ts @@ -311,7 +311,7 @@ export function parseCommandLineArguments(args: Array): any { ) .command( 'gc [ENVIRONMENTS..]', - 'Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/README.md#cdk-gc', + 'Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk-cli/tree/main/packages/aws-cdk#cdk-gc', (yargs: Argv) => yargs .option('action', { diff --git a/packages/aws-cdk/lib/cli/user-input.ts b/packages/aws-cdk/lib/cli/user-input.ts index 9acb5457..dc5f80b5 100644 --- a/packages/aws-cdk/lib/cli/user-input.ts +++ b/packages/aws-cdk/lib/cli/user-input.ts @@ -41,7 +41,7 @@ export interface UserInput { readonly bootstrap?: BootstrapOptions; /** - * Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/README.md#cdk-gc + * Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk-cli/tree/main/packages/aws-cdk#cdk-gc */ readonly gc?: GcOptions; @@ -529,7 +529,7 @@ export interface BootstrapOptions { } /** - * Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk/README.md#cdk-gc + * Garbage collect assets. Options detailed here: https://github.com/aws/aws-cdk-cli/tree/main/packages/aws-cdk#cdk-gc * * @struct */ From 672ce461d764ca001b6821de9da5acb80a1149e5 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Mon, 24 Feb 2025 21:48:25 +0000 Subject: [PATCH 04/30] chore(toolkit-lib): publish toolkit-lib docs to s3 (in dryrun) (#114) Adds a release for the toolkit-lib s3 docs to be published to s3. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/workflows/release.yml | 45 +++++++ .projenrc.ts | 20 ++- .../@aws-cdk/toolkit-lib/.projen/tasks.json | 13 +- projenrc/s3-docs-publishing.ts | 118 ++++++++++++++++++ 4 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 projenrc/s3-docs-publishing.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8d7d7fb4..e9ea6178 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1043,3 +1043,48 @@ jobs: run: |- aws ssm put-parameter --name "/published/cdk/cli/version" --type "String" --value "${{ steps.aws-cdk-version.outputs.version }}" --overwrite aws ssm put-parameter --name "/published/cdk/cli/timestamp" --type "String" --value "$(date +%s)" --overwrite + aws-cdk-toolkit-lib_release_docs: + name: "@aws-cdk/toolkit-lib: Publish docs to S3" + needs: aws-cdk-toolkit-lib_release_npm + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + environment: releasing + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: "@aws-cdk/toolkit-lib_build-artifact" + path: dist + - name: Authenticate Via OIDC Role + id: creds + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: us-east-1 + role-duration-seconds: 14400 + role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} + role-session-name: releasing@aws-cdk-cli + - name: Assume the publishing role + id: publishing-creds + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: us-east-1 + role-duration-seconds: 14400 + role-to-assume: ${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }} + role-session-name: s3publishing@aws-cdk-cli + role-chaining: true + - name: Publish docs + env: + BUCKET_NAME: ${{ vars.DOCS_BUCKET_NAME }} + DOCS_STREAM: toolkit-lib + run: |- + ::add-mask::$BUCKET_NAME + echo "S3_PATH=$DOCS_STREAM/aws-cdk-toolkit-lib-v$(cat dist/version.txt).zip" >> "$GITHUB_ENV" + echo "S3_URI=s3://$BUCKET_NAME/$S3_PATH" >> "$GITHUB_ENV" + echo "LATEST=latest-toolkit-lib" >> "$GITHUB_ENV" + echo $S3_PATH > $LATEST + (! aws s3 ls --human-readable $S3_URI \ + && aws s3 cp --dryrun dist/docs.zip $S3_URI \ + && aws s3 cp --dryrun $LATEST s3://$BUCKET_NAME/$LATEST) \ + || (echo "Docs artifact already published, skipping upload") diff --git a/.projenrc.ts b/.projenrc.ts index 5b7e4668..7ccebc29 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -8,6 +8,7 @@ import { CodeCovWorkflow } from './projenrc/codecov'; import { ESLINT_RULES } from './projenrc/eslint'; import { JsiiBuild } from './projenrc/jsii'; import { RecordPublishingTimestamp } from './projenrc/record-publishing-timestamp'; +import { S3DocsPublishing } from './projenrc/s3-docs-publishing'; // 5.7 sometimes gives a weird error in `ts-jest` in `@aws-cdk/cli-lib-alpha` // https://github.com/microsoft/TypeScript/issues/60159 @@ -1127,6 +1128,13 @@ const toolkitLib = configureProject( }), ); +new S3DocsPublishing(toolkitLib, { + docsStream: 'toolkit-lib', + artifactPath: 'docs.zip', + bucketName: '${{ vars.DOCS_BUCKET_NAME }}', + roleToAssume: '${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }}', +}); + // Eslint rules toolkitLib.eslint?.addRules({ '@cdklabs/no-throw-default-error': ['error'], @@ -1195,9 +1203,19 @@ for (const tsconfig of [toolkitLib.tsconfigDev]) { } } -toolkitLib.addTask('docs', { +const toolkitLibDocs = toolkitLib.addTask('docs', { exec: 'typedoc lib/index.ts', + receiveArgs: true, }); +toolkitLib.packageTask.spawn(toolkitLibDocs, { + // the nested directory is important + // the zip file needs to have this structure when created + args: ['--out dist/docs/cdk/api/toolkit-lib'], +}); +toolkitLib.packageTask.exec('zip -r ../docs.zip cdk ', { + cwd: 'dist/docs', +}); + toolkitLib.addTask('publish-local', { exec: './build-tools/package.sh', receiveArgs: true, diff --git a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json index 4a5eb8f0..c526c4e9 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json @@ -87,7 +87,8 @@ "name": "docs", "steps": [ { - "exec": "typedoc lib/index.ts" + "exec": "typedoc lib/index.ts", + "receiveArgs": true } ] }, @@ -149,6 +150,16 @@ }, { "exec": "npm pack --pack-destination dist/js" + }, + { + "spawn": "docs", + "args": [ + "--out dist/docs/cdk/api/toolkit-lib" + ] + }, + { + "exec": "zip -r ../docs.zip cdk ", + "cwd": "dist/docs" } ] }, diff --git a/projenrc/s3-docs-publishing.ts b/projenrc/s3-docs-publishing.ts new file mode 100644 index 00000000..c6489ef8 --- /dev/null +++ b/projenrc/s3-docs-publishing.ts @@ -0,0 +1,118 @@ +import { Monorepo, TypeScriptWorkspace } from 'cdklabs-projen-project-types/lib/yarn'; +import { Component, github } from 'projen'; + +export interface S3DocsPublishingProps { + /** + * The docs stream to publish to. + */ + readonly docsStream: string; + + /** + * The path to the artifact in the dist folder + */ + readonly artifactPath: string; + + /** + * The role arn (or github expression) for OIDC to assume to do the actual publishing. + */ + readonly roleToAssume: string; + + /** + * The bucket name (or github expression) to publish to. + */ + readonly bucketName: string; +} + +export class S3DocsPublishing extends Component { + private readonly github: github.GitHub; + private readonly props: S3DocsPublishingProps; + + constructor(project: TypeScriptWorkspace, props: S3DocsPublishingProps) { + super(project); + + const gh = (project.parent! as Monorepo).github; + if (!gh) { + throw new Error('This workspace does not have a GitHub instance'); + } + this.github = gh; + + this.props = props; + } + + public preSynthesize() { + const releaseWf = this.github.tryFindWorkflow('release'); + if (!releaseWf) { + throw new Error('Could not find release workflow'); + } + + const safeName = this.project.name.replace('@', '').replace('/', '-'); + + releaseWf.addJob(`${safeName}_release_docs`, { + name: `${this.project.name}: Publish docs to S3`, + environment: 'releasing', // <-- this has the configuration + needs: [`${safeName}_release_npm`], + runsOn: ['ubuntu-latest'], + permissions: { + idToken: github.workflows.JobPermission.WRITE, + contents: github.workflows.JobPermission.READ, + }, + steps: [ + { + name: 'Download build artifacts', + uses: 'actions/download-artifact@v4', + with: { + name: `${this.project.name}_build-artifact`, + path: 'dist', + }, + }, + { + name: 'Authenticate Via OIDC Role', + id: 'creds', + uses: 'aws-actions/configure-aws-credentials@v4', + with: { + 'aws-region': 'us-east-1', + 'role-duration-seconds': 14400, + 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', + 'role-session-name': 'releasing@aws-cdk-cli', + }, + }, + { + name: 'Assume the publishing role', + id: 'publishing-creds', + uses: 'aws-actions/configure-aws-credentials@v4', + with: { + 'aws-region': 'us-east-1', + 'role-duration-seconds': 14400, + 'role-to-assume': this.props.roleToAssume, + 'role-session-name': 's3publishing@aws-cdk-cli', + 'role-chaining': true, + }, + }, + { + name: 'Publish docs', + env: { + BUCKET_NAME: this.props.bucketName, + DOCS_STREAM: this.props.docsStream, + }, + run: [ + '::add-mask::$BUCKET_NAME', // always hide bucket name + + // setup paths + `echo "S3_PATH=$DOCS_STREAM/${safeName}-v$(cat dist/version.txt).zip" >> "$GITHUB_ENV"`, + 'echo "S3_URI=s3://$BUCKET_NAME/$S3_PATH" >> "$GITHUB_ENV"', + `echo "LATEST=latest-${this.props.docsStream}" >> "$GITHUB_ENV"`, + + // create the latest marker + 'echo $S3_PATH > $LATEST', + + // check if the target file already exists and upload + '(! aws s3 ls --human-readable $S3_URI \\', + `&& aws s3 cp --dryrun dist/${this.props.artifactPath} $S3_URI \\`, + '&& aws s3 cp --dryrun $LATEST s3://$BUCKET_NAME/$LATEST) \\', + '|| (echo "Docs artifact already published, skipping upload")', + ].join('\n'), + }, + ], + }); + } +} From 99f54f6b3d4b823b92ee433d899b796570f92058 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Mon, 24 Feb 2025 23:25:12 +0100 Subject: [PATCH 05/30] chore: move minimum Node version back to 14 (#120) We are currently producing errors when trying to install on Node 14. Even though we don't know if it works, we didn't officially stop supporting it yet, so we shouldn't error on old versions. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .projenrc.ts | 1 + package.json | 3 +++ packages/@aws-cdk/cdk-build-tools/package.json | 2 +- packages/@aws-cdk/cdk-cli-wrapper/package.json | 2 +- packages/@aws-cdk/cli-lib-alpha/package.json | 2 +- packages/@aws-cdk/cli-plugin-contract/package.json | 2 +- packages/@aws-cdk/cloud-assembly-schema/package.json | 2 +- packages/@aws-cdk/cloudformation-diff/package.json | 2 +- packages/@aws-cdk/node-bundle/package.json | 2 +- packages/@aws-cdk/toolkit-lib/package.json | 2 +- packages/@aws-cdk/user-input-gen/package.json | 2 +- packages/@aws-cdk/yarn-cling/package.json | 2 +- packages/aws-cdk/package.json | 2 +- packages/cdk-assets/package.json | 2 +- packages/cdk/package.json | 2 +- 15 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.projenrc.ts b/.projenrc.ts index 7ccebc29..3c8e225c 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -27,6 +27,7 @@ const TYPESCRIPT_VERSION = '5.6'; * and 30 is not stable yet. */ function configureProject(x: A): A { + x.package.addEngine('node', '>= 14.15.0'); x.addDevDeps( '@typescript-eslint/eslint-plugin@^8', '@typescript-eslint/parser@^8', diff --git a/package.json b/package.json index a9bf891f..24211efa 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,9 @@ "ts-node": "^10.9.2", "typescript": "^5.7.3" }, + "engines": { + "node": ">= 14.15.0" + }, "main": "lib/index.js", "license": "Apache-2.0", "publishConfig": { diff --git a/packages/@aws-cdk/cdk-build-tools/package.json b/packages/@aws-cdk/cdk-build-tools/package.json index b473eeb8..00b1e274 100644 --- a/packages/@aws-cdk/cdk-build-tools/package.json +++ b/packages/@aws-cdk/cdk-build-tools/package.json @@ -73,7 +73,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/cdk-cli-wrapper/package.json b/packages/@aws-cdk/cdk-cli-wrapper/package.json index f738b073..c8b0ed59 100644 --- a/packages/@aws-cdk/cdk-cli-wrapper/package.json +++ b/packages/@aws-cdk/cdk-cli-wrapper/package.json @@ -60,7 +60,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/cli-lib-alpha/package.json b/packages/@aws-cdk/cli-lib-alpha/package.json index d3dc59d9..9fd41508 100644 --- a/packages/@aws-cdk/cli-lib-alpha/package.json +++ b/packages/@aws-cdk/cli-lib-alpha/package.json @@ -74,7 +74,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/main.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/cli-plugin-contract/package.json b/packages/@aws-cdk/cli-plugin-contract/package.json index 64411a25..96fbde96 100644 --- a/packages/@aws-cdk/cli-plugin-contract/package.json +++ b/packages/@aws-cdk/cli-plugin-contract/package.json @@ -59,7 +59,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index c5d26afb..eb52d962 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -82,7 +82,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/cloudformation-diff/package.json b/packages/@aws-cdk/cloudformation-diff/package.json index 08c81140..0b38b566 100644 --- a/packages/@aws-cdk/cloudformation-diff/package.json +++ b/packages/@aws-cdk/cloudformation-diff/package.json @@ -70,7 +70,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/node-bundle/package.json b/packages/@aws-cdk/node-bundle/package.json index e5bc269f..6279938c 100644 --- a/packages/@aws-cdk/node-bundle/package.json +++ b/packages/@aws-cdk/node-bundle/package.json @@ -71,7 +71,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/toolkit-lib/package.json b/packages/@aws-cdk/toolkit-lib/package.json index 886bc99d..1649bf77 100644 --- a/packages/@aws-cdk/toolkit-lib/package.json +++ b/packages/@aws-cdk/toolkit-lib/package.json @@ -126,7 +126,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/user-input-gen/package.json b/packages/@aws-cdk/user-input-gen/package.json index 98b19287..11be967d 100644 --- a/packages/@aws-cdk/user-input-gen/package.json +++ b/packages/@aws-cdk/user-input-gen/package.json @@ -65,7 +65,7 @@ "cdk" ], "engines": { - "node": ">= 17.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/@aws-cdk/yarn-cling/package.json b/packages/@aws-cdk/yarn-cling/package.json index 677040c2..f5722161 100644 --- a/packages/@aws-cdk/yarn-cling/package.json +++ b/packages/@aws-cdk/yarn-cling/package.json @@ -65,7 +65,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 147cb202..f2eda796 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -148,7 +148,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index 2456bad8..f0a73218 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -93,7 +93,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", diff --git a/packages/cdk/package.json b/packages/cdk/package.json index fb600ebd..eb298dec 100644 --- a/packages/cdk/package.json +++ b/packages/cdk/package.json @@ -65,7 +65,7 @@ "cdk" ], "engines": { - "node": ">= 16.0.0" + "node": ">= 14.15.0" }, "main": "lib/index.js", "license": "Apache-2.0", From a23376e221a5279852d0d60be2441e2ab1f01638 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Mon, 24 Feb 2025 23:32:02 +0100 Subject: [PATCH 06/30] chore(adc-publishing): build standalone release in 'release' workflow (#119) `release` doesn't call `build`, but has its own implementation of building instead. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: Momo Kornher Co-authored-by: github-actions --- .projen/tasks.json | 10 ++++++++-- projenrc/adc-publishing.ts | 6 ++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.projen/tasks.json b/.projen/tasks.json index cde31f1e..cd8caa4d 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -10,10 +10,10 @@ "exec": "yarn workspaces run build" }, { - "exec": "tsx projenrc/build-standalone-zip.task.ts" + "spawn": "eslint" }, { - "spawn": "eslint" + "exec": "tsx projenrc/build-standalone-zip.task.ts" }, { "exec": "tsx projenrc/build-standalone-zip.task.ts" @@ -135,6 +135,12 @@ }, { "exec": "git diff --ignore-space-at-eol --exit-code" + }, + { + "exec": "tsx projenrc/build-standalone-zip.task.ts" + }, + { + "exec": "tsx projenrc/build-standalone-zip.task.ts" } ] }, diff --git a/projenrc/adc-publishing.ts b/projenrc/adc-publishing.ts index 02a197a9..3b8de404 100644 --- a/projenrc/adc-publishing.ts +++ b/projenrc/adc-publishing.ts @@ -5,11 +5,13 @@ import { JobPermission } from 'projen/lib/github/workflows-model'; export class AdcPublishing extends Component { constructor(private readonly project_: Monorepo) { super(project_); - - this.project.tasks.tryFind('build')?.exec('tsx projenrc/build-standalone-zip.task.ts'); } public preSynthesize() { + for (const taskName of ['build', 'release']) { + this.project.tasks.tryFind(taskName)?.exec('tsx projenrc/build-standalone-zip.task.ts'); + } + const releaseWf = this.project_.github?.tryFindWorkflow('release'); if (!releaseWf) { throw new Error('Could not find release workflow'); From 298a6c18aeee0b6be297a424c4adbccdf5b93a96 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Mon, 24 Feb 2025 23:03:18 +0000 Subject: [PATCH 07/30] fix(cdk-assets): use same SDK versions as other packages (#121) Fixes dependency resolution warnings when installing toolkit-lib. ``` npm warn ERESOLVE overriding peer dependency npm warn While resolving: @aws-sdk/lib-storage@3.750.0 npm warn Found: @aws-sdk/client-s3@3.741.0 npm warn node_modules/@aws-sdk/client-s3 npm warn @aws-sdk/client-s3@"3.741" from @aws-cdk/toolkit-lib@0.1.0 npm warn node_modules/@aws-cdk/toolkit-lib npm warn @aws-cdk/toolkit-lib@"*" from the root project npm warn 2 more (@aws-sdk/lib-storage, cdk-assets) npm warn npm warn Could not resolve dependency: npm warn peer @aws-sdk/client-s3@"^3.750.0" from @aws-sdk/lib-storage@3.750.0 npm warn node_modules/cdk-assets/node_modules/@aws-sdk/lib-storage npm warn @aws-sdk/lib-storage@"^3.750.0" from cdk-assets@3.0.0-rc.144 npm warn node_modules/cdk-assets npm warn npm warn Conflicting peer dependency: @aws-sdk/client-s3@3.750.0 npm warn node_modules/@aws-sdk/client-s3 npm warn peer @aws-sdk/client-s3@"^3.750.0" from @aws-sdk/lib-storage@3.750.0 npm warn node_modules/cdk-assets/node_modules/@aws-sdk/lib-storage npm warn @aws-sdk/lib-storage@"^3.750.0" from cdk-assets@3.0.0-rc.144 npm warn node_modules/cdk-assets ``` --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- .projen/deps.json | 2 + .projenrc.ts | 8 +- package.json | 4 +- .../cli-lib-alpha/THIRD_PARTY_LICENSES | 3278 +---------------- packages/aws-cdk/THIRD_PARTY_LICENSES | 3278 +---------------- packages/cdk-assets/.projen/deps.json | 2 + packages/cdk-assets/.projen/tasks.json | 2 +- packages/cdk-assets/package.json | 4 +- yarn.lock | 92 - 9 files changed, 199 insertions(+), 6471 deletions(-) diff --git a/.projen/deps.json b/.projen/deps.json index 9d17f728..9b9f8f3e 100644 --- a/.projen/deps.json +++ b/.projen/deps.json @@ -7,10 +7,12 @@ }, { "name": "@aws-sdk/credential-providers", + "version": "3.741", "type": "build" }, { "name": "@aws-sdk/lib-storage", + "version": "3.741", "type": "build" }, { diff --git a/.projenrc.ts b/.projenrc.ts index 3c8e225c..4ee5f7d4 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -165,8 +165,8 @@ const repoProject = new yarn.Monorepo({ 'glob', 'semver', `@aws-sdk/client-s3@${CLI_SDK_V3_RANGE}`, - '@aws-sdk/credential-providers', - '@aws-sdk/lib-storage', + `@aws-sdk/credential-providers@${CLI_SDK_V3_RANGE}`, + `@aws-sdk/lib-storage@${CLI_SDK_V3_RANGE}`, ], vscodeWorkspace: true, vscodeWorkspaceOptions: { @@ -558,8 +558,8 @@ const cdkAssets = configureProject( `@aws-sdk/client-s3@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-secrets-manager@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-sts@${CLI_SDK_V3_RANGE}`, - '@aws-sdk/credential-providers', - '@aws-sdk/lib-storage', + `@aws-sdk/credential-providers@${CLI_SDK_V3_RANGE}`, + `@aws-sdk/lib-storage@${CLI_SDK_V3_RANGE}`, '@smithy/config-resolver', '@smithy/node-config-provider', ], diff --git a/package.json b/package.json index 24211efa..182839cd 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ }, "devDependencies": { "@aws-sdk/client-s3": "3.741", - "@aws-sdk/credential-providers": "^3.750.0", - "@aws-sdk/lib-storage": "^3.750.0", + "@aws-sdk/credential-providers": "3.741", + "@aws-sdk/lib-storage": "3.741", "@cdklabs/eslint-plugin": "^1.3.2", "@stylistic/eslint-plugin": "^2.13.0", "@types/node": "^22.13.5", diff --git a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES index 08bcf5aa..85d87ea9 100644 --- a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES +++ b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES @@ -1648,7 +1648,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-cognito-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.750.0 | Apache-2.0 +** @aws-sdk/client-ec2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ec2/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -1854,7 +1854,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-ec2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ec2/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ecr@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2060,7 +2060,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-ecr@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ecs@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecs/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2266,7 +2266,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-ecs@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecs/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-elastic-load-balancing-v2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-elastic-load-balancing-v2/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2472,7 +2472,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-elastic-load-balancing-v2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-elastic-load-balancing-v2/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-iam@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-iam/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2678,7 +2678,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-iam@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-iam/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-kms@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-kms/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2884,7 +2884,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-kms@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-kms/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-lambda@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-lambda/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3090,7 +3090,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-lambda@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-lambda/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-route-53@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-route-53/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3296,7 +3296,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-route-53@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-route-53/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-s3@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3502,7 +3502,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-s3@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-secrets-manager@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3708,7 +3708,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-secrets-manager@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-sfn@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sfn/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3914,7 +3914,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sfn@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sfn/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ssm@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ssm/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4120,7 +4120,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-ssm@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ssm/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4326,7 +4326,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.734.0 | Apache-2.0 +** @aws-sdk/client-sts@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4532,7 +4532,11 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso@3.750.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.750.0 | Apache-2.0 +** @aws-sdk/core@3.734.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.734.0 | Apache-2.0 + +---------------- + +** @aws-sdk/credential-provider-cognito-identity@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4738,8 +4742,8 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sts@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.741.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-env@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4941,19 +4945,14 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l See the License for the specific language governing permissions and limitations under the License. - ----------------- - -** @aws-sdk/core@3.734.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.734.0 | Apache-2.0 - ---------------- -** @aws-sdk/core@3.750.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-provider-http@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.734.0 | Apache-2.0 ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.741.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-ini@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.741.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5155,11 +5154,10 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.750.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-node@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.741.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5361,10 +5359,9 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/credential-provider-env@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.734.0 | Apache-2.0 +** @aws-sdk/credential-provider-process@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5553,7 +5550,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5569,7 +5566,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-env@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-provider-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5758,7 +5755,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5774,15 +5771,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-http@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.734.0 | Apache-2.0 - ----------------- - -** @aws-sdk/credential-provider-http@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.750.0 | Apache-2.0 - ----------------- - -** @aws-sdk/credential-provider-ini@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.741.0 | Apache-2.0 +** @aws-sdk/credential-provider-web-identity@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5971,7 +5960,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5987,7 +5976,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-ini@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-providers@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6192,7 +6181,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.741.0 | Apache-2.0 +** @aws-sdk/ec2-metadata-service@3.741.0 - https://www.npmjs.com/package/@aws-sdk/ec2-metadata-service/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6381,7 +6370,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -6397,7 +6386,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.750.0 | Apache-2.0 +** @aws-sdk/lib-storage@3.741.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6602,8 +6591,8 @@ Apache License ---------------- -** @aws-sdk/credential-provider-process@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-bucket-endpoint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6791,7 +6780,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -6805,10 +6794,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-process@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-expect-continue@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6996,7 +6986,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7010,10 +7000,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-flexible-checksums@3.735.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.735.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7201,7 +7192,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7215,10 +7206,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-sso@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-host-header@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7420,10 +7412,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-web-identity@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-location-constraint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7611,7 +7604,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7625,9 +7618,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-web-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.750.0 | Apache-2.0 +** @aws-sdk/middleware-logger@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7816,7 +7810,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7832,8 +7826,8 @@ Apache License ---------------- -** @aws-sdk/credential-providers@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-recursion-detection@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8021,7 +8015,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8035,9 +8029,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-providers@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.750.0 | Apache-2.0 +** @aws-sdk/middleware-sdk-ec2@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-ec2/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8242,8 +8237,8 @@ Apache License ---------------- -** @aws-sdk/ec2-metadata-service@3.741.0 - https://www.npmjs.com/package/@aws-sdk/ec2-metadata-service/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-sdk-route53@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-route53/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8431,7 +8426,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8445,10 +8440,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/lib-storage@3.741.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-sdk-s3@3.740.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.740.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8636,7 +8632,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8650,10 +8646,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/lib-storage@3.750.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-ssec@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8855,9 +8852,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/middleware-bucket-endpoint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.734.0 | Apache-2.0 +** @aws-sdk/middleware-user-agent@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9046,7 +9044,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9063,8 +9061,12 @@ Apache License ---------------- -** @aws-sdk/middleware-expect-continue@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/nested-clients@3.734.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.734.0 | Apache-2.0 + +---------------- + +** @aws-sdk/region-config-resolver@3.734.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9266,10 +9268,9 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-flexible-checksums@3.735.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.735.0 | Apache-2.0 +** @aws-sdk/signature-v4-multi-region@3.740.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.740.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9458,7 +9459,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9475,8 +9476,8 @@ Apache License ---------------- -** @aws-sdk/middleware-host-header@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/token-providers@3.734.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9664,7 +9665,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9678,11 +9679,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-location-constraint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/util-arn-parser@3.723.0 - https://www.npmjs.com/package/@aws-sdk/util-arn-parser/v/3.723.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9884,10 +9884,9 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-logger@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.734.0 | Apache-2.0 +** @aws-sdk/util-endpoints@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10076,7 +10075,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10092,8 +10091,8 @@ Apache License ---------------- -** @aws-sdk/middleware-recursion-detection@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/util-format-url@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-format-url/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10281,2892 +10280,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-sdk-ec2@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-ec2/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/middleware-sdk-route53@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-route53/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-sdk-s3@3.740.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.740.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-ssec@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-user-agent@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-user-agent@3.750.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.750.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/nested-clients@3.734.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.734.0 | Apache-2.0 - ----------------- - -** @aws-sdk/nested-clients@3.750.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.750.0 | Apache-2.0 - ----------------- - -** @aws-sdk/region-config-resolver@3.734.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/signature-v4-multi-region@3.740.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.740.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/token-providers@3.734.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/token-providers@3.750.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.750.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-arn-parser@3.723.0 - https://www.npmjs.com/package/@aws-sdk/util-arn-parser/v/3.723.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-endpoints@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-endpoints@3.743.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.743.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-format-url@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-format-url/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13386,212 +10500,6 @@ Apache License limitations under the License. ----------------- - -** @aws-sdk/util-user-agent-node@3.750.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.750.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ---------------- ** @aws-sdk/xml-builder@3.734.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.734.0 | Apache-2.0 diff --git a/packages/aws-cdk/THIRD_PARTY_LICENSES b/packages/aws-cdk/THIRD_PARTY_LICENSES index 235531a4..2f53661f 100644 --- a/packages/aws-cdk/THIRD_PARTY_LICENSES +++ b/packages/aws-cdk/THIRD_PARTY_LICENSES @@ -1648,7 +1648,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-cognito-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.750.0 | Apache-2.0 +** @aws-sdk/client-ec2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ec2/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -1854,7 +1854,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-ec2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ec2/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ecr@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2060,7 +2060,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-ecr@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ecs@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecs/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2266,7 +2266,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-ecs@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ecs/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-elastic-load-balancing-v2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-elastic-load-balancing-v2/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2472,7 +2472,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-elastic-load-balancing-v2@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-elastic-load-balancing-v2/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-iam@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-iam/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2678,7 +2678,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-iam@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-iam/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-kms@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-kms/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -2884,7 +2884,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-kms@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-kms/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-lambda@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-lambda/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3090,7 +3090,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-lambda@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-lambda/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-route-53@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-route-53/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3296,7 +3296,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-route-53@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-route-53/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-s3@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3502,7 +3502,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-s3@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-secrets-manager@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3708,7 +3708,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-secrets-manager@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-sfn@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sfn/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -3914,7 +3914,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-sfn@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sfn/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-ssm@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ssm/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4120,7 +4120,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-ssm@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-ssm/v/3.741.0 | Apache-2.0 +** @aws-sdk/client-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4326,7 +4326,7 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.734.0 | Apache-2.0 +** @aws-sdk/client-sts@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4532,7 +4532,11 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-sso@3.750.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.750.0 | Apache-2.0 +** @aws-sdk/core@3.734.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.734.0 | Apache-2.0 + +---------------- + +** @aws-sdk/credential-provider-cognito-identity@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4738,8 +4742,8 @@ The aws-cdk package includes the following third-party software/licensing: ---------------- -** @aws-sdk/client-sts@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.741.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-env@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4941,19 +4945,14 @@ The aws-cdk package includes the following third-party software/licensing: See the License for the specific language governing permissions and limitations under the License. - ----------------- - -** @aws-sdk/core@3.734.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.734.0 | Apache-2.0 - ---------------- -** @aws-sdk/core@3.750.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-provider-http@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.734.0 | Apache-2.0 ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.741.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-ini@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.741.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5155,11 +5154,10 @@ The aws-cdk package includes the following third-party software/licensing: See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.750.0 | Apache-2.0 - Apache License +** @aws-sdk/credential-provider-node@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.741.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5361,10 +5359,9 @@ The aws-cdk package includes the following third-party software/licensing: See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/credential-provider-env@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.734.0 | Apache-2.0 +** @aws-sdk/credential-provider-process@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5553,7 +5550,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5569,7 +5566,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-env@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-provider-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5758,7 +5755,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5774,15 +5771,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-http@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.734.0 | Apache-2.0 - ----------------- - -** @aws-sdk/credential-provider-http@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.750.0 | Apache-2.0 - ----------------- - -** @aws-sdk/credential-provider-ini@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.741.0 | Apache-2.0 +** @aws-sdk/credential-provider-web-identity@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5971,7 +5960,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -5987,7 +5976,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-ini@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.750.0 | Apache-2.0 +** @aws-sdk/credential-providers@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6192,7 +6181,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.741.0 | Apache-2.0 +** @aws-sdk/ec2-metadata-service@3.741.0 - https://www.npmjs.com/package/@aws-sdk/ec2-metadata-service/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6381,7 +6370,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -6397,7 +6386,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.750.0 | Apache-2.0 +** @aws-sdk/lib-storage@3.741.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.741.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6602,8 +6591,8 @@ Apache License ---------------- -** @aws-sdk/credential-provider-process@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-bucket-endpoint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6791,7 +6780,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -6805,10 +6794,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-process@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-expect-continue@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6996,7 +6986,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7010,10 +7000,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-sso@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-flexible-checksums@3.735.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.735.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7201,7 +7192,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7215,10 +7206,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-sso@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-host-header@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7420,10 +7412,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-web-identity@3.734.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.734.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-location-constraint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7611,7 +7604,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7625,9 +7618,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-provider-web-identity@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.750.0 | Apache-2.0 +** @aws-sdk/middleware-logger@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7816,7 +7810,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7832,8 +7826,8 @@ Apache License ---------------- -** @aws-sdk/credential-providers@3.741.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-recursion-detection@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8021,7 +8015,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8035,9 +8029,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/credential-providers@3.750.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.750.0 | Apache-2.0 +** @aws-sdk/middleware-sdk-ec2@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-ec2/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8242,8 +8237,8 @@ Apache License ---------------- -** @aws-sdk/ec2-metadata-service@3.741.0 - https://www.npmjs.com/package/@aws-sdk/ec2-metadata-service/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-sdk-route53@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-route53/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8431,7 +8426,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8445,10 +8440,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/lib-storage@3.741.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.741.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-sdk-s3@3.740.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.740.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8636,7 +8632,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -8650,10 +8646,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/lib-storage@3.750.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.750.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-ssec@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.734.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8855,9 +8852,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @aws-sdk/middleware-bucket-endpoint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.734.0 | Apache-2.0 +** @aws-sdk/middleware-user-agent@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9046,7 +9044,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9063,8 +9061,12 @@ Apache License ---------------- -** @aws-sdk/middleware-expect-continue@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/nested-clients@3.734.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.734.0 | Apache-2.0 + +---------------- + +** @aws-sdk/region-config-resolver@3.734.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9266,10 +9268,9 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-flexible-checksums@3.735.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.735.0 | Apache-2.0 +** @aws-sdk/signature-v4-multi-region@3.740.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.740.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9458,7 +9459,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9475,8 +9476,8 @@ Apache License ---------------- -** @aws-sdk/middleware-host-header@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/token-providers@3.734.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9664,7 +9665,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9678,11 +9679,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-location-constraint@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/util-arn-parser@3.723.0 - https://www.npmjs.com/package/@aws-sdk/util-arn-parser/v/3.723.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9884,10 +9884,9 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @aws-sdk/middleware-logger@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.734.0 | Apache-2.0 +** @aws-sdk/util-endpoints@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.734.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10076,7 +10075,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10092,8 +10091,8 @@ Apache License ---------------- -** @aws-sdk/middleware-recursion-detection@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.734.0 | Apache-2.0 - Apache License +** @aws-sdk/util-format-url@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-format-url/v/3.734.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10281,2892 +10280,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-sdk-ec2@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-ec2/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/middleware-sdk-route53@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-route53/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-sdk-s3@3.740.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.740.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-ssec@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-user-agent@3.734.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.734.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/middleware-user-agent@3.750.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.750.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/nested-clients@3.734.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.734.0 | Apache-2.0 - ----------------- - -** @aws-sdk/nested-clients@3.750.0 - https://www.npmjs.com/package/@aws-sdk/nested-clients/v/3.750.0 | Apache-2.0 - ----------------- - -** @aws-sdk/region-config-resolver@3.734.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/signature-v4-multi-region@3.740.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.740.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ----------------- - -** @aws-sdk/token-providers@3.734.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/token-providers@3.750.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.750.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-arn-parser@3.723.0 - https://www.npmjs.com/package/@aws-sdk/util-arn-parser/v/3.723.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-endpoints@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-endpoints@3.743.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.743.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ----------------- - -** @aws-sdk/util-format-url@3.734.0 - https://www.npmjs.com/package/@aws-sdk/util-format-url/v/3.734.0 | Apache-2.0 -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13386,212 +10500,6 @@ Apache License limitations under the License. ----------------- - -** @aws-sdk/util-user-agent-node@3.750.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.750.0 | Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ---------------- ** @aws-sdk/xml-builder@3.734.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.734.0 | Apache-2.0 diff --git a/packages/cdk-assets/.projen/deps.json b/packages/cdk-assets/.projen/deps.json index 467d0413..fa9eac9c 100644 --- a/packages/cdk-assets/.projen/deps.json +++ b/packages/cdk-assets/.projen/deps.json @@ -182,10 +182,12 @@ }, { "name": "@aws-sdk/credential-providers", + "version": "3.741", "type": "runtime" }, { "name": "@aws-sdk/lib-storage", + "version": "3.741", "type": "runtime" }, { diff --git a/packages/cdk-assets/.projen/tasks.json b/packages/cdk-assets/.projen/tasks.json index d59c9b66..e5d1e3cb 100644 --- a/packages/cdk-assets/.projen/tasks.json +++ b/packages/cdk-assets/.projen/tasks.json @@ -54,7 +54,7 @@ }, "steps": [ { - "exec": "npx npm-check-updates@16 --upgrade --target=minor --peer --no-deprecated --dep=dev,peer,prod,optional --filter=@cdklabs/eslint-plugin,@smithy/types,@smithy/util-stream,@stylistic/eslint-plugin,@types/archiver,@types/glob,@types/jest,@types/yargs,aws-sdk-client-mock,aws-sdk-client-mock-jest,eslint-config-prettier,eslint-import-resolver-typescript,eslint-plugin-import,eslint-plugin-jest,eslint-plugin-jsdoc,eslint-plugin-prettier,fs-extra,graceful-fs,jest,jszip,license-checker,projen,ts-jest,@aws-cdk/cx-api,@aws-sdk/credential-providers,@aws-sdk/lib-storage,@smithy/config-resolver,@smithy/node-config-provider,archiver,glob,yargs" + "exec": "npx npm-check-updates@16 --upgrade --target=minor --peer --no-deprecated --dep=dev,peer,prod,optional --filter=@cdklabs/eslint-plugin,@smithy/types,@smithy/util-stream,@stylistic/eslint-plugin,@types/archiver,@types/glob,@types/jest,@types/yargs,aws-sdk-client-mock,aws-sdk-client-mock-jest,eslint-config-prettier,eslint-import-resolver-typescript,eslint-plugin-import,eslint-plugin-jest,eslint-plugin-jsdoc,eslint-plugin-prettier,fs-extra,graceful-fs,jest,jszip,license-checker,projen,ts-jest,@aws-cdk/cx-api,@smithy/config-resolver,@smithy/node-config-provider,archiver,glob,yargs" } ] }, diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index f0a73218..05ed5872 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -79,8 +79,8 @@ "@aws-sdk/client-s3": "3.741", "@aws-sdk/client-secrets-manager": "3.741", "@aws-sdk/client-sts": "3.741", - "@aws-sdk/credential-providers": "^3.750.0", - "@aws-sdk/lib-storage": "^3.750.0", + "@aws-sdk/credential-providers": "3.741", + "@aws-sdk/lib-storage": "3.741", "@smithy/config-resolver": "^4.0.1", "@smithy/node-config-provider": "^4.0.1", "archiver": "^7.0.1", diff --git a/yarn.lock b/yarn.lock index a499e933..98d1960d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -423,51 +423,6 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity@3.750.0": - version "3.750.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.750.0.tgz#aa0f83b4d8033f16d84d51ae3d1cf9074f1757eb" - integrity sha512-ia5+l7U1ludU/YqQAnEMj5DIp1kfMTu14lUOMG3uTIwTcj8OjkCvAe6BuM0OY6zd8enrJYWLqIqxuKPOWw4I7Q== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.750.0" - "@aws-sdk/credential-provider-node" "3.750.0" - "@aws-sdk/middleware-host-header" "3.734.0" - "@aws-sdk/middleware-logger" "3.734.0" - "@aws-sdk/middleware-recursion-detection" "3.734.0" - "@aws-sdk/middleware-user-agent" "3.750.0" - "@aws-sdk/region-config-resolver" "3.734.0" - "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.743.0" - "@aws-sdk/util-user-agent-browser" "3.734.0" - "@aws-sdk/util-user-agent-node" "3.750.0" - "@smithy/config-resolver" "^4.0.1" - "@smithy/core" "^3.1.4" - "@smithy/fetch-http-handler" "^5.0.1" - "@smithy/hash-node" "^4.0.1" - "@smithy/invalid-dependency" "^4.0.1" - "@smithy/middleware-content-length" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.5" - "@smithy/middleware-retry" "^4.0.6" - "@smithy/middleware-serde" "^4.0.2" - "@smithy/middleware-stack" "^4.0.1" - "@smithy/node-config-provider" "^4.0.1" - "@smithy/node-http-handler" "^4.0.2" - "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.5" - "@smithy/types" "^4.1.0" - "@smithy/url-parser" "^4.0.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.6" - "@smithy/util-defaults-mode-node" "^4.0.6" - "@smithy/util-endpoints" "^3.0.1" - "@smithy/util-middleware" "^4.0.1" - "@smithy/util-retry" "^4.0.1" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - "@aws-sdk/client-ec2@3.741": version "3.741.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.741.0.tgz#9e2a520ee011e0b6fe1e6de5550ea9716146cfff" @@ -1228,17 +1183,6 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-cognito-identity@3.750.0": - version "3.750.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.750.0.tgz#e065c2f7a29d24323271c82a12f93f987b00207d" - integrity sha512-TwBzrxgIWcQk846XFn0A9DHBHbfg4sHR3M2GL4E7NcffEkh7r642ILiLa58VvQjO2nB1tcOOFtRqbZvVOKexUw== - dependencies: - "@aws-sdk/client-cognito-identity" "3.750.0" - "@aws-sdk/types" "3.734.0" - "@smithy/property-provider" "^4.0.1" - "@smithy/types" "^4.1.0" - tslib "^2.6.2" - "@aws-sdk/credential-provider-env@3.734.0": version "3.734.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz#6c0b1734764a7fb1616455836b1c3dacd99e50a3" @@ -1466,29 +1410,6 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-providers@^3.750.0": - version "3.750.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.750.0.tgz#2275cf985f7d0c9e6cac7167db7ae53212413096" - integrity sha512-HpJyLHAjcn/IcvsL4WhEIgbzEWfTnn29u8QFNa5Ii9pVtxdeP/DkSthP3SNxLK2jVNcqWL9xago02SiasNOKfw== - dependencies: - "@aws-sdk/client-cognito-identity" "3.750.0" - "@aws-sdk/core" "3.750.0" - "@aws-sdk/credential-provider-cognito-identity" "3.750.0" - "@aws-sdk/credential-provider-env" "3.750.0" - "@aws-sdk/credential-provider-http" "3.750.0" - "@aws-sdk/credential-provider-ini" "3.750.0" - "@aws-sdk/credential-provider-node" "3.750.0" - "@aws-sdk/credential-provider-process" "3.750.0" - "@aws-sdk/credential-provider-sso" "3.750.0" - "@aws-sdk/credential-provider-web-identity" "3.750.0" - "@aws-sdk/nested-clients" "3.750.0" - "@aws-sdk/types" "3.734.0" - "@smithy/core" "^3.1.4" - "@smithy/credential-provider-imds" "^4.0.1" - "@smithy/property-provider" "^4.0.1" - "@smithy/types" "^4.1.0" - tslib "^2.6.2" - "@aws-sdk/ec2-metadata-service@3.741": version "3.741.0" resolved "https://registry.yarnpkg.com/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.741.0.tgz#bb3c7982709fbb841005f3cfc805a045eec89165" @@ -1515,19 +1436,6 @@ stream-browserify "3.0.0" tslib "^2.6.2" -"@aws-sdk/lib-storage@^3.750.0": - version "3.750.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.750.0.tgz#3e3eb685ae3b302d141fd82ceb21871fc78380f8" - integrity sha512-2IHbhUzlKtiAZVW7S5jkJfVDj5pJC9TldHGJLYRAR9GReG9HhK6mI7kLnYE9jf3GchWfe/Bn3wqSwh3BIf0OZQ== - dependencies: - "@smithy/abort-controller" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.5" - "@smithy/smithy-client" "^4.1.5" - buffer "5.6.0" - events "3.3.0" - stream-browserify "3.0.0" - tslib "^2.6.2" - "@aws-sdk/middleware-bucket-endpoint@3.734.0": version "3.734.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz#af63fcaa865d3a47fd0ca3933eef04761f232677" From 321a46a4ae46602f9cf57fa3defa836adfffe720 Mon Sep 17 00:00:00 2001 From: AWS CDK Automation <43080478+aws-cdk-automation@users.noreply.github.com> Date: Mon, 24 Feb 2025 16:20:44 -0800 Subject: [PATCH 08/30] chore(deps): upgrade dependencies (#123) Upgrades project dependencies. See details in [workflow run]. [Workflow Run]: https://github.com/aws/aws-cdk-cli/actions/runs/13508965647 ------ *Automatically created by projen via the "upgrade" workflow* --------- Signed-off-by: github-actions Co-authored-by: github-actions --- package.json | 4 +- .../cli-lib-alpha/THIRD_PARTY_LICENSES | 16 +- packages/@aws-cdk/cli-lib-alpha/package.json | 4 +- .../cloud-assembly-schema/package.json | 4 +- packages/@aws-cdk/toolkit-lib/package.json | 8 +- packages/aws-cdk/THIRD_PARTY_LICENSES | 16 +- packages/aws-cdk/package.json | 6 +- packages/cdk-assets/package.json | 2 +- yarn.lock | 358 +++++++++--------- 9 files changed, 209 insertions(+), 209 deletions(-) diff --git a/package.json b/package.json index 182839cd..64337051 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "packages/cdk" ], "nohoist": [ - "@aws-cdk/cloud-assembly-schema/jsonschema@~1.4.1", - "@aws-cdk/cloud-assembly-schema/jsonschema@~1.4.1/**", + "@aws-cdk/cloud-assembly-schema/jsonschema", + "@aws-cdk/cloud-assembly-schema/jsonschema/**", "@aws-cdk/cloud-assembly-schema/semver", "@aws-cdk/cloud-assembly-schema/semver/**" ] diff --git a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES index 85d87ea9..f0f8da5c 100644 --- a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES +++ b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES @@ -10914,7 +10914,7 @@ Apache License ---------------- -** @jsii/check-node@1.107.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.107.0 | Apache-2.0 +** @jsii/check-node@1.108.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.108.0 | Apache-2.0 jsii Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -11331,7 +11331,7 @@ Apache License ---------------- -** @smithy/core@3.1.4 - https://www.npmjs.com/package/@smithy/core/v/3.1.4 | Apache-2.0 +** @smithy/core@3.1.5 - https://www.npmjs.com/package/@smithy/core/v/3.1.5 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13796,7 +13796,7 @@ Apache License ---------------- -** @smithy/middleware-endpoint@4.0.5 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/4.0.5 | Apache-2.0 +** @smithy/middleware-endpoint@4.0.6 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/4.0.6 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14001,7 +14001,7 @@ Apache License ---------------- -** @smithy/middleware-retry@4.0.6 - https://www.npmjs.com/package/@smithy/middleware-retry/v/4.0.6 | Apache-2.0 +** @smithy/middleware-retry@4.0.7 - https://www.npmjs.com/package/@smithy/middleware-retry/v/4.0.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14823,7 +14823,7 @@ Apache License ---------------- -** @smithy/node-http-handler@4.0.2 - https://www.npmjs.com/package/@smithy/node-http-handler/v/4.0.2 | Apache-2.0 +** @smithy/node-http-handler@4.0.3 - https://www.npmjs.com/package/@smithy/node-http-handler/v/4.0.3 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -16467,7 +16467,7 @@ Apache License ---------------- -** @smithy/smithy-client@4.1.5 - https://www.npmjs.com/package/@smithy/smithy-client/v/4.1.5 | Apache-2.0 +** @smithy/smithy-client@4.1.6 - https://www.npmjs.com/package/@smithy/smithy-client/v/4.1.6 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18110,7 +18110,7 @@ Apache License ---------------- -** @smithy/util-defaults-mode-node@4.0.6 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/4.0.6 | Apache-2.0 +** @smithy/util-defaults-mode-node@4.0.7 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/4.0.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -19136,7 +19136,7 @@ Apache License ---------------- -** @smithy/util-stream@4.1.1 - https://www.npmjs.com/package/@smithy/util-stream/v/4.1.1 | Apache-2.0 +** @smithy/util-stream@4.1.2 - https://www.npmjs.com/package/@smithy/util-stream/v/4.1.2 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/packages/@aws-cdk/cli-lib-alpha/package.json b/packages/@aws-cdk/cli-lib-alpha/package.json index 9fd41508..2c70cfaf 100644 --- a/packages/@aws-cdk/cli-lib-alpha/package.json +++ b/packages/@aws-cdk/cli-lib-alpha/package.json @@ -59,9 +59,9 @@ "jest": "^29.7.0", "jest-junit": "^16", "jsii": "5.6", - "jsii-diff": "^1.107.0", + "jsii-diff": "^1.108.0", "jsii-docgen": "^10.5.0", - "jsii-pacmak": "^1.107.0", + "jsii-pacmak": "^1.108.0", "jsii-rosetta": "5.6", "license-checker": "^25.0.1", "prettier": "^2.8", diff --git a/packages/@aws-cdk/cloud-assembly-schema/package.json b/packages/@aws-cdk/cloud-assembly-schema/package.json index eb52d962..4fe828ea 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/package.json +++ b/packages/@aws-cdk/cloud-assembly-schema/package.json @@ -57,8 +57,8 @@ "jest": "^29.7.0", "jest-junit": "^16", "jsii": "5.6", - "jsii-diff": "^1.107.0", - "jsii-pacmak": "^1.107.0", + "jsii-diff": "^1.108.0", + "jsii-pacmak": "^1.108.0", "jsii-rosetta": "5.6", "license-checker": "^25.0.1", "mock-fs": "^5.5.0", diff --git a/packages/@aws-cdk/toolkit-lib/package.json b/packages/@aws-cdk/toolkit-lib/package.json index 1649bf77..0009969e 100644 --- a/packages/@aws-cdk/toolkit-lib/package.json +++ b/packages/@aws-cdk/toolkit-lib/package.json @@ -90,13 +90,13 @@ "@aws-sdk/credential-providers": "3.741", "@aws-sdk/ec2-metadata-service": "3.741", "@aws-sdk/lib-storage": "3.741", - "@jsii/check-node": "^1.107.0", - "@smithy/middleware-endpoint": "^4.0.5", - "@smithy/node-http-handler": "^4.0.2", + "@jsii/check-node": "^1.108.0", + "@smithy/middleware-endpoint": "^4.0.6", + "@smithy/node-http-handler": "^4.0.3", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/util-retry": "^4.0.1", - "@smithy/util-stream": "^4.1.1", + "@smithy/util-stream": "^4.1.2", "@smithy/util-waiter": "^4.0.2", "archiver": "^7.0.1", "camelcase": "^6", diff --git a/packages/aws-cdk/THIRD_PARTY_LICENSES b/packages/aws-cdk/THIRD_PARTY_LICENSES index 2f53661f..478003ae 100644 --- a/packages/aws-cdk/THIRD_PARTY_LICENSES +++ b/packages/aws-cdk/THIRD_PARTY_LICENSES @@ -10707,7 +10707,7 @@ Apache License ---------------- -** @jsii/check-node@1.107.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.107.0 | Apache-2.0 +** @jsii/check-node@1.108.0 - https://www.npmjs.com/package/@jsii/check-node/v/1.108.0 | Apache-2.0 jsii Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -11124,7 +11124,7 @@ Apache License ---------------- -** @smithy/core@3.1.4 - https://www.npmjs.com/package/@smithy/core/v/3.1.4 | Apache-2.0 +** @smithy/core@3.1.5 - https://www.npmjs.com/package/@smithy/core/v/3.1.5 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13589,7 +13589,7 @@ Apache License ---------------- -** @smithy/middleware-endpoint@4.0.5 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/4.0.5 | Apache-2.0 +** @smithy/middleware-endpoint@4.0.6 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/4.0.6 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13794,7 +13794,7 @@ Apache License ---------------- -** @smithy/middleware-retry@4.0.6 - https://www.npmjs.com/package/@smithy/middleware-retry/v/4.0.6 | Apache-2.0 +** @smithy/middleware-retry@4.0.7 - https://www.npmjs.com/package/@smithy/middleware-retry/v/4.0.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14616,7 +14616,7 @@ Apache License ---------------- -** @smithy/node-http-handler@4.0.2 - https://www.npmjs.com/package/@smithy/node-http-handler/v/4.0.2 | Apache-2.0 +** @smithy/node-http-handler@4.0.3 - https://www.npmjs.com/package/@smithy/node-http-handler/v/4.0.3 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -16260,7 +16260,7 @@ Apache License ---------------- -** @smithy/smithy-client@4.1.5 - https://www.npmjs.com/package/@smithy/smithy-client/v/4.1.5 | Apache-2.0 +** @smithy/smithy-client@4.1.6 - https://www.npmjs.com/package/@smithy/smithy-client/v/4.1.6 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17903,7 +17903,7 @@ Apache License ---------------- -** @smithy/util-defaults-mode-node@4.0.6 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/4.0.6 | Apache-2.0 +** @smithy/util-defaults-mode-node@4.0.7 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/4.0.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18929,7 +18929,7 @@ Apache License ---------------- -** @smithy/util-stream@4.1.1 - https://www.npmjs.com/package/@smithy/util-stream/v/4.1.1 | Apache-2.0 +** @smithy/util-stream@4.1.2 - https://www.npmjs.com/package/@smithy/util-stream/v/4.1.2 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index f2eda796..f744c4b2 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -112,13 +112,13 @@ "@aws-sdk/middleware-endpoint": "^3.374.0", "@aws-sdk/util-retry": "^3.374.0", "@aws-sdk/util-waiter": "^3.374.0", - "@jsii/check-node": "^1.107.0", - "@smithy/middleware-endpoint": "^4.0.5", + "@jsii/check-node": "^1.108.0", + "@smithy/middleware-endpoint": "^4.0.6", "@smithy/property-provider": "^4.0.1", "@smithy/shared-ini-file-loader": "^4.0.1", "@smithy/types": "^4.1.0", "@smithy/util-retry": "^4.0.1", - "@smithy/util-stream": "^4.1.1", + "@smithy/util-stream": "^4.1.2", "@smithy/util-waiter": "^4.0.2", "archiver": "^7.0.1", "camelcase": "^6", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index 05ed5872..88775ed9 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -38,7 +38,7 @@ "devDependencies": { "@cdklabs/eslint-plugin": "^1.3.2", "@smithy/types": "^4.1.0", - "@smithy/util-stream": "^4.1.1", + "@smithy/util-stream": "^4.1.2", "@stylistic/eslint-plugin": "^3.1.0", "@types/archiver": "^6.0.3", "@types/glob": "^8.1.0", diff --git a/yarn.lock b/yarn.lock index 98d1960d..cda6e179 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,9 +22,9 @@ lru-cache "^10.4.3" "@aws-cdk/asset-awscli-v1@^2.2.208": - version "2.2.224" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.224.tgz#d3fba9959966011cd033536e787f0af30bc4f2c0" - integrity sha512-4CQP+y0rLq4IWzOlTqBhe8IxBU3Tul9KcmHxiAqztQRWLIl5HAVGCOWdLzHMLgbpFWNNMlIJxB8GwBEV0pWtfQ== + version "2.2.225" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.225.tgz#948fc755c96f3f6bdd6684535d37cad0ccea41b6" + integrity sha512-fMPfR7PwiwQZwAux9tQ5LRrFJJfl5Vp3kR8GMc+H/PA/wql9+w8mk5gs6SDpwBFpT7n3XkZ5H98Ns5+g7/WMIg== "@aws-cdk/asset-node-proxy-agent-v6@^2.1.0": version "2.1.0" @@ -2705,26 +2705,26 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsii/check-node@1.106.0": - version "1.106.0" - resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.106.0.tgz#5deb20b0bbe0a506c4bd9edf60b17b0a93f83834" - integrity sha512-/T/TUsbHdEbZRFR4Rem9+UXVvgMYncEkrIeC52oIHJ8BDSgqlDsIARio/Eu5DOftF4avSLV/sshR6n19mpK1oA== +"@jsii/check-node@1.107.0": + version "1.107.0" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.107.0.tgz#359099573cf47e3d2f7be19172fbe49e3e2d11a7" + integrity sha512-ud21048xxEVbbzjFlE7GQSuypW7/8P6Dyu+jjTwp6wGFbnbpxZiupIMdp6eSVSqo9M3rC14SyjNq2liXoSYBZg== dependencies: chalk "^4.1.2" semver "^7.6.3" -"@jsii/check-node@1.107.0", "@jsii/check-node@^1.107.0": - version "1.107.0" - resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.107.0.tgz#359099573cf47e3d2f7be19172fbe49e3e2d11a7" - integrity sha512-ud21048xxEVbbzjFlE7GQSuypW7/8P6Dyu+jjTwp6wGFbnbpxZiupIMdp6eSVSqo9M3rC14SyjNq2liXoSYBZg== +"@jsii/check-node@1.108.0", "@jsii/check-node@^1.108.0": + version "1.108.0" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.108.0.tgz#d223d97178c84ed470195d532364e59bd66be17b" + integrity sha512-wa8AGH31Cl0x1jU/KtM6JB32IurBmK1YiX5ZnCndifRCehLnS8DmJCPYrzJbKD4xqmHigaq6696fAnM/L7qIsw== dependencies: chalk "^4.1.2" semver "^7.6.3" -"@jsii/spec@^1.106.0", "@jsii/spec@^1.107.0": - version "1.107.0" - resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.107.0.tgz#b5f71fdd408c1449bdbe6ac193ce24bc8a8d12e9" - integrity sha512-m3qN+uGudQ9N36kNXJ5SUaqUh7G2Dm61JgmfswnkiCxlRr2fmRYL5mRD0DA+cJX/XG/S9iDjf6NlB/fLmblFHA== +"@jsii/spec@^1.107.0", "@jsii/spec@^1.108.0": + version "1.108.0" + resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.108.0.tgz#fbcf6785ac7dc62f79aca535a18ecdfa2a8198aa" + integrity sha512-YtebmBRy19UT1pKmxqlTqfW1OcFFjuU2zxxi+QFfM8KG1ahBlpcuz+3DE9gG1qTASIJJJI0fd8PaAiZ5gE40sQ== dependencies: ajv "^8.17.1" @@ -2866,9 +2866,9 @@ integrity sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g== "@octokit/plugin-paginate-rest@^11.4.2": - version "11.4.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.2.tgz#8f46a1de74c35e016c86701ef4ea0e8ef25a06e0" - integrity sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA== + version "11.4.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.3.tgz#b5030bba2e0ecff8e6ff7501074c1b209af78ff8" + integrity sha512-tBXaAbXkqVJlRoA/zQVe9mUdb8rScmivqtpv3ovsC5xhje/a+NOCivs7eUhWBwCApJVsR4G5HMeaLbq7PxqZGA== dependencies: "@octokit/types" "^13.7.0" @@ -3091,17 +3091,17 @@ "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@smithy/core@^3.1.1", "@smithy/core@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.4.tgz#47ce2b1b363ba92be2b47551bdd30969c6435bd2" - integrity sha512-wFExFGK+7r2wYriOqe7RRIBNpvxwiS95ih09+GSLRBdoyK/O1uZA7K7pKesj5CBvwJuSBeXwLyR88WwIAY+DGA== +"@smithy/core@^3.1.1", "@smithy/core@^3.1.4", "@smithy/core@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.5.tgz#cc260229e45964d8354a3737bf3dedb56e373616" + integrity sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA== dependencies: "@smithy/middleware-serde" "^4.0.2" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-middleware" "^4.0.1" - "@smithy/util-stream" "^4.1.1" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -3252,12 +3252,12 @@ "@smithy/util-middleware" "^1.1.0" tslib "^2.5.0" -"@smithy/middleware-endpoint@^4.0.2", "@smithy/middleware-endpoint@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.5.tgz#b3d58c0a44b5dcccb1da34267b6f651bc1ba7642" - integrity sha512-cPzGZV7qStHwboFrm6GfrzQE+YDiCzWcTh4+7wKrP/ZQ4gkw+r7qDjV8GjM4N0UYsuUyLfpzLGg5hxsYTU11WA== +"@smithy/middleware-endpoint@^4.0.2", "@smithy/middleware-endpoint@^4.0.5", "@smithy/middleware-endpoint@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz#7ead08fcfda92ee470786a7f458e9b59048407eb" + integrity sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg== dependencies: - "@smithy/core" "^3.1.4" + "@smithy/core" "^3.1.5" "@smithy/middleware-serde" "^4.0.2" "@smithy/node-config-provider" "^4.0.1" "@smithy/shared-ini-file-loader" "^4.0.1" @@ -3267,14 +3267,14 @@ tslib "^2.6.2" "@smithy/middleware-retry@^4.0.3", "@smithy/middleware-retry@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.6.tgz#07f8259dc05835e317aaf37af7e79bae349eabb4" - integrity sha512-s8QzuOQnbdvRymD9Gt9c9zMq10wUQAHQ3z72uirrBHCwZcLTrL5iCOuVTMdka2IXOYhQE890WD5t6G24+F+Qcg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz#8bb2014842a6144f230967db502f5fe6adcd6529" + integrity sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ== dependencies: "@smithy/node-config-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/service-error-classification" "^4.0.1" - "@smithy/smithy-client" "^4.1.5" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" @@ -3315,10 +3315,10 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/node-http-handler@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz#48d47a046cf900ab86bfbe7f5fd078b52c82fab6" - integrity sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw== +"@smithy/node-http-handler@^4.0.2", "@smithy/node-http-handler@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz#363e1d453168b4e37e8dd456d0a368a4e413bc98" + integrity sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA== dependencies: "@smithy/abort-controller" "^4.0.1" "@smithy/protocol-http" "^5.0.1" @@ -3401,17 +3401,17 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.1.2", "@smithy/smithy-client@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.5.tgz#f4641ad6771f5e4f6de9e573b9deb1787e43ef71" - integrity sha512-DMXYoYeL4QkElr216n1yodTFeATbfb4jwYM9gKn71Rw/FNA1/Sm36tkTSCsZEs7mgpG3OINmkxL9vgVFzyGPaw== +"@smithy/smithy-client@^4.1.2", "@smithy/smithy-client@^4.1.5", "@smithy/smithy-client@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.6.tgz#2183c922d086d33252012232be891f29a008d932" + integrity sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw== dependencies: - "@smithy/core" "^3.1.4" - "@smithy/middleware-endpoint" "^4.0.5" + "@smithy/core" "^3.1.5" + "@smithy/middleware-endpoint" "^4.0.6" "@smithy/middleware-stack" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" - "@smithy/util-stream" "^4.1.1" + "@smithy/util-stream" "^4.1.2" tslib "^2.6.2" "@smithy/types@^1.2.0": @@ -3493,26 +3493,26 @@ tslib "^2.6.2" "@smithy/util-defaults-mode-browser@^4.0.3", "@smithy/util-defaults-mode-browser@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.6.tgz#4ee93d8e32c8211709437aa29c5fe616895e7c51" - integrity sha512-N8+VCt+piupH1A7DgSVDNrVHqRLz8r6DvBkpS7EWHiIxsUk4jqGuQLjqC/gnCzmwGkVBdNruHoYAzzaSQ8e80w== + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz#54595ab3da6765bfb388e8e8b594276e0f485710" + integrity sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q== dependencies: "@smithy/property-provider" "^4.0.1" - "@smithy/smithy-client" "^4.1.5" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" bowser "^2.11.0" tslib "^2.6.2" "@smithy/util-defaults-mode-node@^4.0.3", "@smithy/util-defaults-mode-node@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.6.tgz#213e5b32549beb48aeccbcf99cf56c97db47e70b" - integrity sha512-9zhx1shd1VwSSVvLZB8CM3qQ3RPD3le7A3h/UPuyh/PC7g4OaWDi2xUNzamsVoSmCGtmUBONl56lM2EU6LcH7A== + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz#0dea136de9096a36d84416f6af5843d866621491" + integrity sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ== dependencies: "@smithy/config-resolver" "^4.0.1" "@smithy/credential-provider-imds" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" "@smithy/property-provider" "^4.0.1" - "@smithy/smithy-client" "^4.1.5" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" tslib "^2.6.2" @@ -3564,13 +3564,13 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-stream@^4.0.2", "@smithy/util-stream@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.1.1.tgz#d7edec543d65ed335d2fda9aae6a42ee97da4a4e" - integrity sha512-+Xvh8nhy0Wjv1y71rBVyV3eJU3356XsFQNI8dEZVNrQju7Eib8G31GWtO+zMa9kTCGd41Mflu+ZKfmQL/o2XzQ== +"@smithy/util-stream@^4.0.2", "@smithy/util-stream@^4.1.1", "@smithy/util-stream@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.1.2.tgz#b867f25bc8b016de0582810a2f4092a71c5e3244" + integrity sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw== dependencies: "@smithy/fetch-http-handler" "^5.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/types" "^4.1.0" "@smithy/util-base64" "^4.0.0" "@smithy/util-buffer-from" "^4.0.0" @@ -4001,61 +4001,61 @@ integrity sha512-GD4Fk15UoP5NLCNor51YdfL9MSdldKCqOC9EssrRw3HVfar9wUZ5y8Lfnp+qVD6hIinLr8ygklDYnmlnlQo12Q== "@typescript-eslint/eslint-plugin@^8": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz#d104c2a6212304c649105b18af2c110b4a1dd4ae" - integrity sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA== + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.25.0.tgz#5e1d56f067e5808fa82d1b75bced82396e868a14" + integrity sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/type-utils" "8.24.1" - "@typescript-eslint/utils" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/scope-manager" "8.25.0" + "@typescript-eslint/type-utils" "8.25.0" + "@typescript-eslint/utils" "8.25.0" + "@typescript-eslint/visitor-keys" "8.25.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^2.0.1" "@typescript-eslint/parser@^8": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.24.1.tgz#67965c2d2ddd7eadb2f094c395695db8334ef9a2" - integrity sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ== - dependencies: - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/typescript-estree" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.25.0.tgz#58fb81c7b7a35184ba17583f3d7ac6c4f3d95be8" + integrity sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg== + dependencies: + "@typescript-eslint/scope-manager" "8.25.0" + "@typescript-eslint/types" "8.25.0" + "@typescript-eslint/typescript-estree" "8.25.0" + "@typescript-eslint/visitor-keys" "8.25.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz#1e1e76ec4560aa85077ab36deb9b2bead4ae124e" - integrity sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q== +"@typescript-eslint/scope-manager@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.25.0.tgz#ac3805077aade898e98ca824294c998545597df3" + integrity sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg== dependencies: - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/types" "8.25.0" + "@typescript-eslint/visitor-keys" "8.25.0" -"@typescript-eslint/type-utils@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz#99113e1df63d1571309d87eef68967344c78dd65" - integrity sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw== +"@typescript-eslint/type-utils@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.25.0.tgz#ee0d2f67c80af5ae74b5d6f977e0f8ded0059677" + integrity sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g== dependencies: - "@typescript-eslint/typescript-estree" "8.24.1" - "@typescript-eslint/utils" "8.24.1" + "@typescript-eslint/typescript-estree" "8.25.0" + "@typescript-eslint/utils" "8.25.0" debug "^4.3.4" ts-api-utils "^2.0.1" -"@typescript-eslint/types@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.24.1.tgz#8777a024f3afc4ace5e48f9a804309c6dd38f95a" - integrity sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A== +"@typescript-eslint/types@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.25.0.tgz#f91512c2f532b1d6a8826cadd0b0e5cd53cf97e0" + integrity sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw== -"@typescript-eslint/typescript-estree@8.24.1", "@typescript-eslint/typescript-estree@^8.23.0": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz#3bb479401f8bd471b3c6dd3db89e7256977c54db" - integrity sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg== +"@typescript-eslint/typescript-estree@8.25.0", "@typescript-eslint/typescript-estree@^8.23.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.25.0.tgz#d8409c63abddd4cf5b93c031b24b9edc1c7c1299" + integrity sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q== dependencies: - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/types" "8.25.0" + "@typescript-eslint/visitor-keys" "8.25.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -4063,54 +4063,54 @@ semver "^7.6.0" ts-api-utils "^2.0.1" -"@typescript-eslint/utils@8.24.1", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/utils@^8.13.0": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.24.1.tgz#08d14eac33cfb3456feeee5a275b8ad3349e52ed" - integrity sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ== +"@typescript-eslint/utils@8.25.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/utils@^8.13.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.25.0.tgz#3ea2f9196a915ef4daa2c8eafd44adbd7d56d08a" + integrity sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/typescript-estree" "8.24.1" + "@typescript-eslint/scope-manager" "8.25.0" + "@typescript-eslint/types" "8.25.0" + "@typescript-eslint/typescript-estree" "8.25.0" -"@typescript-eslint/visitor-keys@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz#8bdfe47a89195344b34eb21ef61251562148202b" - integrity sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg== +"@typescript-eslint/visitor-keys@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.25.0.tgz#e8646324cd1793f96e02669cb717a05319403164" + integrity sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ== dependencies: - "@typescript-eslint/types" "8.24.1" + "@typescript-eslint/types" "8.25.0" eslint-visitor-keys "^4.2.0" "@vitest/expect@>1.6.0": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.0.6.tgz#30993c0841203d2243826ee04fb25463eb86e20d" - integrity sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg== + version "3.0.7" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.0.7.tgz#3490936bc1e97fc21d53441518d51cb7116c698a" + integrity sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw== dependencies: - "@vitest/spy" "3.0.6" - "@vitest/utils" "3.0.6" + "@vitest/spy" "3.0.7" + "@vitest/utils" "3.0.7" chai "^5.2.0" tinyrainbow "^2.0.0" -"@vitest/pretty-format@3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.0.6.tgz#a828569818b666a6e955c9af8129e6b0d2968ee6" - integrity sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg== +"@vitest/pretty-format@3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.0.7.tgz#1780516ebb4e40dd89e60b9fc7ffcbd9cba0fc22" + integrity sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg== dependencies: tinyrainbow "^2.0.0" -"@vitest/spy@3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.0.6.tgz#3a50ec0ab11e8f729cdaa938a6d271b12547cea1" - integrity sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q== +"@vitest/spy@3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.0.7.tgz#6fcc100c23fb50b5e2d1d09a333245586364f67b" + integrity sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w== dependencies: tinyspy "^3.0.2" -"@vitest/utils@3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.0.6.tgz#be4246ab46a076db1e49b9e0479bdd9a7f65782f" - integrity sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ== +"@vitest/utils@3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.0.7.tgz#56268acac1027ead938150eceb2527c61d2fa204" + integrity sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg== dependencies: - "@vitest/pretty-format" "3.0.6" + "@vitest/pretty-format" "3.0.7" loupe "^3.1.3" tinyrainbow "^2.0.0" @@ -4826,9 +4826,9 @@ cdk-from-cfn@^0.191.0: integrity sha512-j+TKUSmje5iSiOQzWstH/BkrsL8L9WV57zXll+BHlGT8w5wTrou4dZvNvFQWELW9aaS+UBX0ivsJRZwuO7GiIw== cdklabs-projen-project-types@^0.1.220: - version "0.1.233" - resolved "https://registry.yarnpkg.com/cdklabs-projen-project-types/-/cdklabs-projen-project-types-0.1.233.tgz#d26fa6eb3358710694d07a1495247eeba79153eb" - integrity sha512-+zqhe9BIponbSHU1mh6weRgm9O6xIsOSpv0cPdoi9RO1RGQ3SAsHzumRojrVlwaZ1V/7wMP8eEsSXQ0o2Y5LGg== + version "0.1.234" + resolved "https://registry.yarnpkg.com/cdklabs-projen-project-types/-/cdklabs-projen-project-types-0.1.234.tgz#2d46f793c1d0ef398b8d3006ad52c235b72e8b83" + integrity sha512-fx7FQ9s4C1gici/dQRIE0bKaaYqrMJn2AcwVYrCynXhsQ4pRZRtOCRLfDSFFVrqABPAvLgEcVu45sW3mSxU5yg== dependencies: yaml "^2.7.0" @@ -4954,10 +4954,10 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -codemaker@^1.107.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.107.0.tgz#5e7d0196cfd5456f51b030de7d7ff28955c9f5dd" - integrity sha512-nf36aDh5lFe0oL6eK919+atGPUwaP1jZeI8LFG0tpZXQsjJsjUHTuvBT2zkvqqgZ7OvwPBOS3IYqhzFDgnx02w== +codemaker@^1.108.0: + version "1.108.0" + resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.108.0.tgz#1e66e032636f5cdcb32d14ac5c3ebb175d1e9200" + integrity sha512-EwMvLf3tkBXllS4hZbr3WYm4kZiAH5Spd01MaRd+yJ636RfwIvpGgCGVqYbjW0RJ7yyfnakZ0HvCc8PxqyYWbA== dependencies: camelcase "^6.3.0" decamelize "^5.0.1" @@ -5443,7 +5443,7 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -5823,9 +5823,9 @@ ejs@^3.1.10: jake "^10.8.5" electron-to-chromium@^1.5.73: - version "1.5.103" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.103.tgz#3d02025bc16e96e5edb3ed3ffa2538a11ae682dc" - integrity sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA== + version "1.5.104" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.104.tgz#e92a1ec54f279d8fc60eb7e8cf6add9631631f38" + integrity sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g== emittery@^0.13.1: version "0.13.1" @@ -6471,11 +6471,11 @@ for-each@^0.3.3: is-callable "^1.2.7" foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^4.0.0: @@ -7840,69 +7840,69 @@ jsesc@^3.0.2: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsii-diff@^1.107.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.107.0.tgz#d24a33d8b9058573b5d0b3976d90e38876eafb9c" - integrity sha512-CEaCZcsnkFyja5GJJCUT0+OZO3Ov6eOdbz5gWu25EDnQOMgxjl/hSd3NNIHc+48ojOwNJpf/YT9ZnD6vWBkqZg== +jsii-diff@^1.108.0: + version "1.108.0" + resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.108.0.tgz#28735c2ecfcb4a51283eaafd14fa0c59821abf7e" + integrity sha512-OFUCrYBIsHf1uFPN0J55s2ihmj1dlUuf4TKrCJ5DP2FILHSyQmjqgfKgMTgOPbrHXMmaR5+0jKQ9AilF4OTcCw== dependencies: - "@jsii/check-node" "1.107.0" - "@jsii/spec" "^1.107.0" + "@jsii/check-node" "1.108.0" + "@jsii/spec" "^1.108.0" fs-extra "^10.1.0" - jsii-reflect "^1.107.0" + jsii-reflect "^1.108.0" log4js "^6.9.1" yargs "^16.2.0" jsii-docgen@^10.5.0: - version "10.6.7" - resolved "https://registry.yarnpkg.com/jsii-docgen/-/jsii-docgen-10.6.7.tgz#c9b21d24740b5090cec96b99ca2633d90abbf151" - integrity sha512-+7arLTxVUzUtW82zjnOnjXUFTH54Y8D6XE23YqGCxp2XDlJENKZw9mUU8/M3Mq63/986qGJK1LAixRxg/v2ZyQ== + version "10.6.8" + resolved "https://registry.yarnpkg.com/jsii-docgen/-/jsii-docgen-10.6.8.tgz#6bbe1b3c57752970bd4cbf80327e8be277ab3343" + integrity sha512-bgkSJpTXNm/1gtLPee8pYfjDhpcYDMw9XaXOLjSlUM9/BhhrAIgeBgtFY2SdFGaDyp9LjAWpHRjojE7akE95UQ== dependencies: - "@jsii/spec" "^1.107.0" + "@jsii/spec" "^1.108.0" case "^1.6.3" fs-extra "^10.1.0" glob "^8.1.0" glob-promise "^6.0.7" - jsii-reflect "^1.107.0" + jsii-reflect "^1.108.0" semver "^7.7.1" yargs "^16.2.0" -jsii-pacmak@^1.107.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.107.0.tgz#498918e29e80b18e421690fb5d3b0a6cc935dd87" - integrity sha512-LIOhMa2iYdh4QgTv5CETDDn8MsRBY1I2ALNRz2jbLR6LlcZAm8PFtZGpejGZiRxjjWjcwstuAsWC9iM2R6a9eg== +jsii-pacmak@^1.108.0: + version "1.108.0" + resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.108.0.tgz#4755a2b2bff2ab57eefa1f2cc4b092ef4421b6ee" + integrity sha512-qj/dGQkALH/YTMGUIyg+EgFD9+WXyrJPug8cwQureNyRK90gHLrTMo7oFQhhTlW2OVH6WAGlQO5FPLtkbujgmQ== dependencies: - "@jsii/check-node" "1.107.0" - "@jsii/spec" "^1.107.0" + "@jsii/check-node" "1.108.0" + "@jsii/spec" "^1.108.0" clone "^2.1.2" - codemaker "^1.107.0" + codemaker "^1.108.0" commonmark "^0.31.2" escape-string-regexp "^4.0.0" fs-extra "^10.1.0" - jsii-reflect "^1.107.0" + jsii-reflect "^1.108.0" semver "^7.6.3" spdx-license-list "^6.9.0" xmlbuilder "^15.1.1" yargs "^16.2.0" -jsii-reflect@^1.107.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.107.0.tgz#0402a18023fdc6e72ebe9997284a8b7dc572e6c8" - integrity sha512-Cznn8jmfNM8ou4mj51aBDeHW84sLr4+bAxlq3DbnlyQD9LhurUBFJH00bHpyvnBIKZRhFGoIiDD4raugYmdFRw== +jsii-reflect@^1.108.0: + version "1.108.0" + resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.108.0.tgz#730ae7a19210ac5859ae9c61bcbc0d8fcc935af8" + integrity sha512-szlgEA2zFJhtSId2/GYHqosofkXgmkdo+baMMbv0HWt1UuwUK+pI+nYP9WX7mkNoNgIS1tVLre6AZZAZ7RmOfg== dependencies: - "@jsii/check-node" "1.107.0" - "@jsii/spec" "^1.107.0" + "@jsii/check-node" "1.108.0" + "@jsii/spec" "^1.108.0" chalk "^4" fs-extra "^10.1.0" - oo-ascii-tree "^1.107.0" + oo-ascii-tree "^1.108.0" yargs "^16.2.0" jsii-rosetta@5.6: - version "5.6.8" - resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-5.6.8.tgz#3cbd9dc7a7ffb8989ec8cdeac32bc99e7172b82c" - integrity sha512-glAGZM++XmjwbocryGSd6I5UbSS9V96+ozrobF1AXc1db0h2yTb6ATrSnJSO/fF0W8/87cNdH9EwqeJ8mbjoXA== + version "5.6.9" + resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-5.6.9.tgz#5dbf3e46e87b8da453b2254cbbb874e55203c261" + integrity sha512-R2mfHHzr7Vv1DU51LAF9gCnpVS322yOZuUQuk1lOYm9WGpioX89TJ/d5P2W3mGpUOreEfV+zyQ08ReyANfCCFg== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.107.0" + "@jsii/spec" "^1.107.0" "@xmldom/xmldom" "^0.9.7" chalk "^4" commonmark "^0.31.2" @@ -7916,12 +7916,12 @@ jsii-rosetta@5.6: yargs "^17.7.2" jsii@5.6, jsii@~5.6.0: - version "5.6.10" - resolved "https://registry.yarnpkg.com/jsii/-/jsii-5.6.10.tgz#4eeca0708a0a57e8f61d392f8df0bf14afa23ed3" - integrity sha512-3hKSzGP86wdKvEzmTSRHwxaGhFomx9TNN085HfoXdODtS9nvvdUWmXdTrnQghXsgzWRTWxRwBS5x0Xu+cRuqhQ== + version "5.6.11" + resolved "https://registry.yarnpkg.com/jsii/-/jsii-5.6.11.tgz#32ab94c01e464b36e302a2c9de8cef3dcda91104" + integrity sha512-ynT/thHoPZT1jk56cIAt+n2baC4676PLsMDIvAsphyjPiPnUPH4/mEm5k9QQ8qdL9BeZAZEwkU23EKN4jKwdQg== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.107.0" + "@jsii/spec" "^1.107.0" case "^1.6.3" chalk "^4" fast-deep-equal "^3.1.3" @@ -8733,10 +8733,10 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -oo-ascii-tree@^1.107.0: - version "1.107.0" - resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.107.0.tgz#a572cc556f73183849c62fd1b8210eb8f0895528" - integrity sha512-Yf48F7fpsifcgDB3a0l+EgYRNpIKoMhYueMP9JC0cgSy3gwmHwM/yj+QVgCjCfxhScylnJLkCfVckC8+TU4WqQ== +oo-ascii-tree@^1.108.0: + version "1.108.0" + resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.108.0.tgz#16abf582467785d25dc2ccb064de24e67d06a2f8" + integrity sha512-aR++8J29Te6L+1pVi9phOvsMVdEj7245vpcJqmrzDOGHpJdZ3zm1hdh44pYfzV1PiDgG3S3fwtlLZilulwVAgg== open@^8.4.0: version "8.4.2" From 0dcb15aeb0d223286aad93ad87c4e84a8d51c800 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Tue, 25 Feb 2025 10:16:29 +0000 Subject: [PATCH 09/30] chore(toolkit-lib): fix docs publishing workflow (#126) Erroneously used the wrong artifact name before. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/workflows/release.yml | 2 +- projenrc/s3-docs-publishing.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9ea6178..dd45848a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1055,7 +1055,7 @@ jobs: - name: Download build artifacts uses: actions/download-artifact@v4 with: - name: "@aws-cdk/toolkit-lib_build-artifact" + name: aws-cdk-toolkit-lib_build-artifact path: dist - name: Authenticate Via OIDC Role id: creds diff --git a/projenrc/s3-docs-publishing.ts b/projenrc/s3-docs-publishing.ts index c6489ef8..d6755bbb 100644 --- a/projenrc/s3-docs-publishing.ts +++ b/projenrc/s3-docs-publishing.ts @@ -61,7 +61,7 @@ export class S3DocsPublishing extends Component { name: 'Download build artifacts', uses: 'actions/download-artifact@v4', with: { - name: `${this.project.name}_build-artifact`, + name: `${safeName}_build-artifact`, path: 'dist', }, }, From 46d28cb2de76a29707d20a310c4e74fab30899be Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Tue, 25 Feb 2025 10:20:27 +0000 Subject: [PATCH 10/30] docs(toolkit-lib): fix some examples (#127) Fixes some incorrect examples and makes formatting consistent for others. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- packages/@aws-cdk/toolkit-lib/README.md | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/@aws-cdk/toolkit-lib/README.md b/packages/@aws-cdk/toolkit-lib/README.md index 30385bdb..b0e1cd4a 100644 --- a/packages/@aws-cdk/toolkit-lib/README.md +++ b/packages/@aws-cdk/toolkit-lib/README.md @@ -62,12 +62,12 @@ import * as core from 'aws-cdk-lib/core'; declare const cdk: Toolkit; const cx = cdk.fromAssemblyBuilder(async () => { - const app = new core.App(); + const app = new core.App(); - // Define your stacks here - new MyStack(app, 'MyStack'); + // Define your stacks here + new MyStack(app, 'MyStack'); - return app.synth(); + return app.synth(); }); ``` @@ -82,11 +82,11 @@ The following is a basic example that creates a deployment of the `MyStack` stac declare const cdk: Toolkit; declare const cx: ICloudAssemblySource; -await toolkit.deploy(cloudAssembly, { - stacks: { - strategy: StackSelectionStrategy.PATTERN_MUST_MATCH, - patterns: ["MyStack"], - }, +await cdk.deploy(cx, { + stacks: { + strategy: StackSelectionStrategy.PATTERN_MUST_MATCH, + patterns: ["MyStack"], + }, }); ``` @@ -231,9 +231,9 @@ The following is an example implementation that simply logs all message objects ```ts const toolkit = new toolkitLib.Toolkit({ - ioHost: { + ioHost: { notify: async function (msg) { - console.log(msg); + console.log(msg); }, requestResponse: async function (msg) { console.log(msg); @@ -322,12 +322,12 @@ Alternatively a inline `AssemblyBuilder` function can be used to build a CDK app declare const cdk: Toolkit; const cx = cdk.fromAssemblyBuilder(async () => { - const app = new core.App(); + const app = new core.App(); - // Define your stacks here - new MyStack(app, 'MyStack'); + // Define your stacks here + new MyStack(app, 'MyStack'); - return app.synth(); + return app.synth(); }); ``` @@ -403,7 +403,7 @@ declare const cx: ICloudAssemblySource; try { // Attempt a CDK Toolkit operation const deployment = await cdk.deploy(cloudAssembly, { - stacks: ['MyStack'] + stacks: ['MyStack'] }); } catch (error) { @@ -425,8 +425,8 @@ try { console.error('Generic Toolkit error:', error.message); } else { - // Handle unexpected errors - console.error('Unexpected error:', error); + // Handle unexpected errors + console.error('Unexpected error:', error); } } ``` From a8b73da2c5e5601dcea156860d74cfcbfbaada95 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Tue, 25 Feb 2025 12:43:07 +0000 Subject: [PATCH 11/30] chore: remove duplicate cli resource files (#129) CLI derivative packages should never check-in their own version of CLI resource files (bootstrap template, init templates, etc.). Instead they are expected to copy any required files over at build time. This PR removes the checked-in version of `init-templates` and bootstrap template from `cli-lib-alpha`. It also adds respective gitignore and npmignore rules. Note that neither `cli-lib-alpha` nor `toolkit-lib` currently support the init command and therefore don't need the templates just yet. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .npmignore | 1 + .projenrc.ts | 21 +- packages/@aws-cdk/cdk-build-tools/.npmignore | 1 + packages/@aws-cdk/cdk-cli-wrapper/.npmignore | 1 + packages/@aws-cdk/cli-lib-alpha/.gitignore | 4 +- packages/@aws-cdk/cli-lib-alpha/.npmignore | 2 + .../lib/api/bootstrap/bootstrap-template.yaml | 692 ------------------ .../lib/init-templates/.init-version.json | 1 - .../init-templates/.no-packagejson-validator | 0 .../.recommended-feature-flags.json | 68 -- .../cli-lib-alpha/lib/init-templates/LICENSE | 16 - .../app/csharp/.template.gitignore | 342 --------- .../lib/init-templates/app/csharp/README.md | 14 - .../app/csharp/cdk.template.json | 15 - .../src/%name.PascalCased%.template.sln | 18 - .../%name.PascalCased%.template.csproj | 20 - .../%name.PascalCased%Stack.template.cs | 13 - .../%name.PascalCased%/GlobalSuppressions.cs | 1 - .../%name.PascalCased%/Program.template.cs | 44 -- .../app/fsharp/.template.gitignore | 342 --------- .../lib/init-templates/app/fsharp/README.md | 18 - .../app/fsharp/cdk.template.json | 14 - .../src/%name.PascalCased%.template.sln | 18 - .../%name.PascalCased%.template.fsproj | 25 - .../%name.PascalCased%Stack.template.fs | 8 - .../%name.PascalCased%/Program.template.fs | 11 - .../init-templates/app/go/%name%.template.go | 70 -- .../app/go/%name%_test.template.go | 26 - .../init-templates/app/go/.template.gitignore | 19 - .../lib/init-templates/app/go/README.md | 12 - .../init-templates/app/go/cdk.template.json | 13 - .../lib/init-templates/app/go/go.template.mod | 9 - .../lib/init-templates/app/info.json | 4 - .../app/java/.template.gitignore | 13 - .../lib/init-templates/app/java/README.md | 18 - .../lib/init-templates/app/java/cdk.json | 13 - .../lib/init-templates/app/java/pom.xml | 60 -- .../myorg/%name.PascalCased%App.template.java | 42 -- .../%name.PascalCased%Stack.template.java | 24 - .../%name.PascalCased%Test.template.java | 26 - .../app/javascript/.template.gitignore | 5 - .../app/javascript/.template.npmignore | 3 - .../init-templates/app/javascript/README.md | 12 - .../app/javascript/cdk.template.json | 15 - .../app/javascript/package.json | 20 - .../%name.PythonModule%_stack.template.py | 19 - .../python/%name.PythonModule%/__init__.py | 0 .../app/python/.template.gitignore | 10 - .../app/python/README.template.md | 58 -- .../init-templates/app/python/app.template.py | 28 - .../app/python/cdk.template.json | 15 - .../app/python/requirements-dev.txt | 1 - .../app/python/requirements.txt | 2 - .../lib/init-templates/app/python/source.bat | 13 - .../app/python/tests/__init__.py | 0 .../app/python/tests/unit/__init__.py | 0 ...test_%name.PythonModule%_stack.template.py | 15 - .../app/typescript/.template.gitignore | 8 - .../app/typescript/.template.npmignore | 6 - .../init-templates/app/typescript/README.md | 14 - .../app/typescript/bin/%name%.template.ts | 20 - .../app/typescript/cdk.template.json | 17 - .../typescript/lib/%name%-stack.template.ts | 16 - .../app/typescript/package.json | 26 - .../typescript/test/%name%.test.template.ts | 17 - .../lib/init-templates/lib/info.json | 4 - .../lib/typescript/.template.gitignore | 8 - .../lib/typescript/.template.npmignore | 6 - .../lib/typescript/README.template.md | 12 - .../lib/typescript/lib/index.template.ts | 21 - .../lib/typescript/package.json | 24 - .../typescript/test/%name%.test.template.ts | 18 - .../sample-app/csharp/.template.gitignore | 342 --------- .../sample-app/csharp/README.template.md | 19 - .../sample-app/csharp/cdk.template.json | 15 - .../src/%name.PascalCased%.template.sln | 18 - .../%name.PascalCased%.template.csproj | 20 - .../%name.PascalCased%Stack.template.cs | 24 - .../%name.PascalCased%/GlobalSuppressions.cs | 1 - .../%name.PascalCased%/Program.template.cs | 15 - .../sample-app/fsharp/.template.gitignore | 342 --------- .../sample-app/fsharp/README.template.md | 20 - .../sample-app/fsharp/cdk.template.json | 14 - .../src/%name.PascalCased%.template.sln | 18 - .../%name.PascalCased%.template.fsproj | 25 - .../%name.PascalCased%Stack.template.fs | 14 - .../%name.PascalCased%/Program.template.fs | 11 - .../sample-app/go/%name%.template.go | 73 -- .../sample-app/go/%name%_test.template.go | 25 - .../sample-app/go/.template.gitignore | 19 - .../init-templates/sample-app/go/README.md | 12 - .../sample-app/go/cdk.template.json | 13 - .../sample-app/go/go.template.mod | 9 - .../lib/init-templates/sample-app/info.json | 4 - .../sample-app/java/.template.gitignore | 13 - .../sample-app/java/README.template.md | 19 - .../init-templates/sample-app/java/cdk.json | 13 - .../init-templates/sample-app/java/pom.xml | 55 -- .../myorg/%name.PascalCased%App.template.java | 13 - .../%name.PascalCased%Stack.template.java | 29 - .../%name.PascalCased%StackTest.template.java | 27 - .../sample-app/javascript/.template.gitignore | 5 - .../sample-app/javascript/.template.npmignore | 3 - .../sample-app/javascript/README.template.md | 13 - .../sample-app/javascript/cdk.template.json | 15 - .../sample-app/javascript/package.json | 20 - .../%name.PythonModule%_stack.template.py | 26 - .../python/%name.PythonModule%/__init__.py | 0 .../sample-app/python/.template.gitignore | 22 - .../sample-app/python/README.template.md | 65 -- .../sample-app/python/app.template.py | 11 - .../sample-app/python/cdk.template.json | 15 - .../sample-app/python/requirements-dev.txt | 1 - .../sample-app/python/requirements.txt | 2 - .../sample-app/python/source.bat | 13 - .../sample-app/python/tests/__init__.py | 0 .../sample-app/python/tests/unit/__init__.py | 0 ...test_%name.PythonModule%_stack.template.py | 21 - .../sample-app/typescript/.template.gitignore | 8 - .../sample-app/typescript/.template.npmignore | 6 - .../sample-app/typescript/README.template.md | 15 - .../typescript/bin/%name%.template.ts | 6 - .../sample-app/typescript/cdk.template.json | 17 - .../typescript/lib/%name%-stack.template.ts | 19 - .../sample-app/typescript/package.json | 26 - .../typescript/test/%name%.test.template.ts | 17 - .../@aws-cdk/cli-plugin-contract/.npmignore | 1 + .../@aws-cdk/cloud-assembly-schema/.npmignore | 1 + .../@aws-cdk/cloudformation-diff/.npmignore | 1 + packages/@aws-cdk/node-bundle/.npmignore | 1 + packages/@aws-cdk/toolkit-lib/.gitignore | 3 +- packages/@aws-cdk/toolkit-lib/.npmignore | 3 +- packages/@aws-cdk/user-input-gen/.npmignore | 1 + packages/@aws-cdk/yarn-cling/.npmignore | 1 + packages/aws-cdk/.npmignore | 1 + packages/cdk-assets/.npmignore | 1 + packages/cdk/.npmignore | 1 + 137 files changed, 38 insertions(+), 4037 deletions(-) delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/api/bootstrap/bootstrap-template.yaml delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.init-version.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.no-packagejson-validator delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.recommended-feature-flags.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/LICENSE delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%.template.go delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%_test.template.go delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/go.template.mod delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/info.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/cdk.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/pom.xml delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.npmignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/package.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/app.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements-dev.txt delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements.txt delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/source.bat delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.npmignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/bin/%name%.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/lib/%name%-stack.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/package.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/test/%name%.test.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/info.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.npmignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/lib/index.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/package.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/test/%name%.test.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%.template.go delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%_test.template.go delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/README.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/go.template.mod delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/info.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/cdk.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/pom.xml delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.npmignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/package.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/app.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements-dev.txt delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements.txt delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/source.bat delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/__init__.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.gitignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.npmignore delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/README.template.md delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/bin/%name%.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/cdk.template.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/package.json delete mode 100644 packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts diff --git a/.npmignore b/.npmignore index e1d69647..39f8f1fd 100644 --- a/.npmignore +++ b/.npmignore @@ -19,6 +19,7 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes /.projenrc.ts /projenrc diff --git a/.projenrc.ts b/.projenrc.ts index 4ee5f7d4..d3d286a2 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -61,6 +61,9 @@ function configureProject(x: A): A { // As a rule we don't include .ts sources in the NPM package x.npmignore?.addPatterns('*.ts', '!*.d.ts'); + // Never include the build-tools directory + x.npmignore?.addPatterns('build-tools'); + return x; } @@ -77,7 +80,6 @@ const ADDITIONAL_CLI_IGNORE_PATTERNS = [ 'index_bg.wasm', 'build-info.json', '.recommended-feature-flags.json', - '!lib/init-templates/**', ]; // Specifically this and not ^ because when the SDK version updates there is a @@ -835,7 +837,10 @@ cli.npmignore?.addPatterns( 'generate.sh', ); -cli.gitignore.addPatterns(...ADDITIONAL_CLI_IGNORE_PATTERNS); +cli.gitignore.addPatterns( + ...ADDITIONAL_CLI_IGNORE_PATTERNS, + '!lib/init-templates/**', +); // People should not have imported from the `aws-cdk` package, but they have in the past. // We have identified all locations that are currently used, are maintaining a backwards compat @@ -962,10 +967,16 @@ const cliLib = configureProject( ); // Do include all .ts files inside init-templates -cliLib.npmignore?.addPatterns('!lib/init-templates/**/*.ts'); +cliLib.npmignore?.addPatterns( + '!lib/init-templates/**/*.ts', + '!lib/api/bootstrap/bootstrap-template.yaml', +); cliLib.gitignore.addPatterns( ...ADDITIONAL_CLI_IGNORE_PATTERNS, + 'lib/**/*.yaml', + 'lib/**/*.yml', + 'lib/init-templates/**', 'cdk.out', ); @@ -1171,13 +1182,13 @@ toolkitLib.postCompileTask.exec('node ./lib/api/aws-cdk.js >/dev/null 2>/dev/nul // Do include all .ts files inside init-templates toolkitLib.npmignore?.addPatterns( 'assets', - 'build-tools', 'docs', 'typedoc.json', '*.d.ts.map', // Explicitly allow all required files '!build-info.json', '!db.json.gz', + '!lib/init-templates/**/*.ts', '!lib/api/bootstrap/bootstrap-template.yaml', '!lib/*.js', '!lib/*.d.ts', @@ -1192,7 +1203,9 @@ toolkitLib.gitignore.addPatterns( 'build-info.json', 'lib/**/*.wasm', 'lib/**/*.yaml', + 'lib/**/*.yml', 'lib/**/*.js.map', + 'lib/init-templates/**', '!test/_fixtures/**/app.js', '!test/_fixtures/**/cdk.out', ); diff --git a/packages/@aws-cdk/cdk-build-tools/.npmignore b/packages/@aws-cdk/cdk-build-tools/.npmignore index 49472ebd..b8c73a62 100644 --- a/packages/@aws-cdk/cdk-build-tools/.npmignore +++ b/packages/@aws-cdk/cdk-build-tools/.npmignore @@ -20,4 +20,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/cdk-cli-wrapper/.npmignore b/packages/@aws-cdk/cdk-cli-wrapper/.npmignore index 49472ebd..b8c73a62 100644 --- a/packages/@aws-cdk/cdk-cli-wrapper/.npmignore +++ b/packages/@aws-cdk/cdk-cli-wrapper/.npmignore @@ -20,4 +20,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/cli-lib-alpha/.gitignore b/packages/@aws-cdk/cli-lib-alpha/.gitignore index 10928793..d47ec6be 100644 --- a/packages/@aws-cdk/cli-lib-alpha/.gitignore +++ b/packages/@aws-cdk/cli-lib-alpha/.gitignore @@ -49,7 +49,9 @@ db.json.gz index_bg.wasm build-info.json .recommended-feature-flags.json -!lib/init-templates/** +lib/**/*.yaml +lib/**/*.yml +lib/init-templates/** cdk.out .jsii tsconfig.json diff --git a/packages/@aws-cdk/cli-lib-alpha/.npmignore b/packages/@aws-cdk/cli-lib-alpha/.npmignore index cf02ee9f..0a674ebf 100644 --- a/packages/@aws-cdk/cli-lib-alpha/.npmignore +++ b/packages/@aws-cdk/cli-lib-alpha/.npmignore @@ -22,6 +22,8 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools !lib/init-templates/**/*.ts +!lib/api/bootstrap/bootstrap-template.yaml !.jsii /.gitattributes diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/api/bootstrap/bootstrap-template.yaml b/packages/@aws-cdk/cli-lib-alpha/lib/api/bootstrap/bootstrap-template.yaml deleted file mode 100644 index 15acb72c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/api/bootstrap/bootstrap-template.yaml +++ /dev/null @@ -1,692 +0,0 @@ -Description: This stack includes resources needed to deploy AWS CDK apps into this - environment -Parameters: - TrustedAccounts: - Description: List of AWS accounts that are trusted to publish assets and deploy - stacks to this environment - Default: '' - Type: CommaDelimitedList - TrustedAccountsForLookup: - Description: List of AWS accounts that are trusted to look up values in this - environment - Default: '' - Type: CommaDelimitedList - CloudFormationExecutionPolicies: - Description: List of the ManagedPolicy ARN(s) to attach to the CloudFormation - deployment role - Default: '' - Type: CommaDelimitedList - FileAssetsBucketName: - Description: The name of the S3 bucket used for file assets - Default: '' - Type: String - FileAssetsBucketKmsKeyId: - Description: Empty to create a new key (default), 'AWS_MANAGED_KEY' to use a managed - S3 key, or the ID/ARN of an existing key. - Default: '' - Type: String - ContainerAssetsRepositoryName: - Description: A user-provided custom name to use for the container assets ECR repository - Default: '' - Type: String - Qualifier: - Description: An identifier to distinguish multiple bootstrap stacks in the same environment - Default: hnb659fds - Type: String - # "cdk-(qualifier)-image-publishing-role-(account)-(region)" needs to be <= 64 chars - # account = 12, region <= 14, 10 chars for qualifier and 28 for rest of role name - AllowedPattern: "[A-Za-z0-9_-]{1,10}" - ConstraintDescription: Qualifier must be an alphanumeric identifier of at most 10 characters - PublicAccessBlockConfiguration: - Description: Whether or not to enable S3 Staging Bucket Public Access Block Configuration - Default: 'true' - Type: 'String' - AllowedValues: ['true', 'false'] - InputPermissionsBoundary: - Description: Whether or not to use either the CDK supplied or custom permissions boundary - Default: '' - Type: 'String' - UseExamplePermissionsBoundary: - Default: 'false' - AllowedValues: [ 'true', 'false' ] - Type: String - BootstrapVariant: - Type: String - Default: 'AWS CDK: Default Resources' - Description: Describe the provenance of the resources in this bootstrap - stack. Change this when you customize the template. To prevent accidents, - the CDK CLI will not overwrite bootstrap stacks with a different variant. -Conditions: - HasTrustedAccounts: - Fn::Not: - - Fn::Equals: - - '' - - Fn::Join: - - '' - - Ref: TrustedAccounts - HasTrustedAccountsForLookup: - Fn::Not: - - Fn::Equals: - - '' - - Fn::Join: - - '' - - Ref: TrustedAccountsForLookup - HasCloudFormationExecutionPolicies: - Fn::Not: - - Fn::Equals: - - '' - - Fn::Join: - - '' - - Ref: CloudFormationExecutionPolicies - HasCustomFileAssetsBucketName: - Fn::Not: - - Fn::Equals: - - '' - - Ref: FileAssetsBucketName - CreateNewKey: - Fn::Equals: - - '' - - Ref: FileAssetsBucketKmsKeyId - UseAwsManagedKey: - Fn::Equals: - - 'AWS_MANAGED_KEY' - - Ref: FileAssetsBucketKmsKeyId - ShouldCreatePermissionsBoundary: - Fn::Equals: - - 'true' - - Ref: UseExamplePermissionsBoundary - PermissionsBoundarySet: - Fn::Not: - - Fn::Equals: - - '' - - Ref: InputPermissionsBoundary - HasCustomContainerAssetsRepositoryName: - Fn::Not: - - Fn::Equals: - - '' - - Ref: ContainerAssetsRepositoryName - UsePublicAccessBlockConfiguration: - Fn::Equals: - - 'true' - - Ref: PublicAccessBlockConfiguration -Resources: - FileAssetsBucketEncryptionKey: - Type: AWS::KMS::Key - Properties: - KeyPolicy: - Statement: - - Action: - - kms:Create* - - kms:Describe* - - kms:Enable* - - kms:List* - - kms:Put* - - kms:Update* - - kms:Revoke* - - kms:Disable* - - kms:Get* - - kms:Delete* - - kms:ScheduleKeyDeletion - - kms:CancelKeyDeletion - - kms:GenerateDataKey - - kms:TagResource - - kms:UntagResource - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - Resource: "*" - - Action: - - kms:Decrypt - - kms:DescribeKey - - kms:Encrypt - - kms:ReEncrypt* - - kms:GenerateDataKey* - Effect: Allow - Principal: - # Not actually everyone -- see below for Conditions - AWS: "*" - Resource: "*" - Condition: - StringEquals: - # See https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-caller-account - kms:CallerAccount: - Ref: AWS::AccountId - kms:ViaService: - - Fn::Sub: s3.${AWS::Region}.amazonaws.com - - Action: - - kms:Decrypt - - kms:DescribeKey - - kms:Encrypt - - kms:ReEncrypt* - - kms:GenerateDataKey* - Effect: Allow - Principal: - AWS: - Fn::Sub: "${FilePublishingRole.Arn}" - Resource: "*" - Condition: CreateNewKey - FileAssetsBucketEncryptionKeyAlias: - Condition: CreateNewKey - Type: AWS::KMS::Alias - Properties: - AliasName: - Fn::Sub: "alias/cdk-${Qualifier}-assets-key" - TargetKeyId: - Ref: FileAssetsBucketEncryptionKey - StagingBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: - Fn::If: - - HasCustomFileAssetsBucketName - - Fn::Sub: "${FileAssetsBucketName}" - - Fn::Sub: cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region} - AccessControl: Private - BucketEncryption: - ServerSideEncryptionConfiguration: - - ServerSideEncryptionByDefault: - SSEAlgorithm: aws:kms - KMSMasterKeyID: - Fn::If: - - CreateNewKey - - Fn::Sub: "${FileAssetsBucketEncryptionKey.Arn}" - - Fn::If: - - UseAwsManagedKey - - Ref: AWS::NoValue - - Fn::Sub: "${FileAssetsBucketKmsKeyId}" - PublicAccessBlockConfiguration: - Fn::If: - - UsePublicAccessBlockConfiguration - - BlockPublicAcls: true - BlockPublicPolicy: true - IgnorePublicAcls: true - RestrictPublicBuckets: true - - Ref: AWS::NoValue - VersioningConfiguration: - Status: Enabled - LifecycleConfiguration: - Rules: - # Objects will only be noncurrent if they are deleted via garbage collection. - - Id: CleanupOldVersions - Status: Enabled - NoncurrentVersionExpiration: - NoncurrentDays: 30 - - Id: AbortIncompleteMultipartUploads - Status: Enabled - AbortIncompleteMultipartUpload: - DaysAfterInitiation: 1 - UpdateReplacePolicy: Retain - DeletionPolicy: Retain - StagingBucketPolicy: - Type: 'AWS::S3::BucketPolicy' - Properties: - Bucket: { Ref: 'StagingBucket' } - PolicyDocument: - Id: 'AccessControl' - Version: '2012-10-17' - Statement: - - Sid: 'AllowSSLRequestsOnly' - Action: 's3:*' - Effect: 'Deny' - Resource: - - { 'Fn::Sub': '${StagingBucket.Arn}' } - - { 'Fn::Sub': '${StagingBucket.Arn}/*' } - Condition: - Bool: { 'aws:SecureTransport': 'false' } - Principal: '*' - ContainerAssetsRepository: - Type: AWS::ECR::Repository - Properties: - ImageTagMutability: IMMUTABLE - # Untagged images should never exist but Security Hub wants this rule to exist - LifecyclePolicy: - LifecyclePolicyText: | - { - "rules": [ - { - "rulePriority": 1, - "description": "Untagged images should not exist, but expire any older than one year", - "selection": { - "tagStatus": "untagged", - "countType": "sinceImagePushed", - "countUnit": "days", - "countNumber": 365 - }, - "action": { "type": "expire" } - } - ] - } - RepositoryName: - Fn::If: - - HasCustomContainerAssetsRepositoryName - - Fn::Sub: "${ContainerAssetsRepositoryName}" - - Fn::Sub: cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region} - RepositoryPolicyText: - Version: "2012-10-17" - Statement: - # Necessary for Lambda container images - # https://docs.aws.amazon.com/lambda/latest/dg/configuration-images.html#configuration-images-permissions - - Sid: LambdaECRImageRetrievalPolicy - Effect: Allow - Principal: { Service: "lambda.amazonaws.com" } - Action: - - ecr:BatchGetImage - - ecr:GetDownloadUrlForLayer - Condition: - StringLike: - "aws:sourceArn": { "Fn::Sub": "arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:*" } - FilePublishingRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - # allows this role to be assumed with session tags. - # see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required - - Action: sts:TagSession - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Fn::If: - - HasTrustedAccounts - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: TrustedAccounts - - Ref: AWS::NoValue - RoleName: - Fn::Sub: cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region} - Tags: - - Key: aws-cdk:bootstrap-role - Value: file-publishing - ImagePublishingRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - # allows this role to be assumed with session tags. - # see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required - - Action: sts:TagSession - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Fn::If: - - HasTrustedAccounts - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: TrustedAccounts - - Ref: AWS::NoValue - RoleName: - Fn::Sub: cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region} - Tags: - - Key: aws-cdk:bootstrap-role - Value: image-publishing - LookupRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - # allows this role to be assumed with session tags. - # see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required - - Action: sts:TagSession - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Fn::If: - - HasTrustedAccountsForLookup - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: TrustedAccountsForLookup - - Ref: AWS::NoValue - - Fn::If: - - HasTrustedAccounts - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: TrustedAccounts - - Ref: AWS::NoValue - RoleName: - Fn::Sub: cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region} - ManagedPolicyArns: - - Fn::Sub: "arn:${AWS::Partition}:iam::aws:policy/ReadOnlyAccess" - Policies: - - PolicyDocument: - Statement: - - Sid: DontReadSecrets - Effect: Deny - Action: - - kms:Decrypt - Resource: "*" - Version: '2012-10-17' - PolicyName: LookupRolePolicy - Tags: - - Key: aws-cdk:bootstrap-role - Value: lookup - FilePublishingRoleDefaultPolicy: - Type: AWS::IAM::Policy - Properties: - PolicyDocument: - Statement: - - Action: - - s3:GetObject* - - s3:GetBucket* - - s3:GetEncryptionConfiguration - - s3:List* - - s3:DeleteObject* - - s3:PutObject* - - s3:Abort* - Resource: - - Fn::Sub: "${StagingBucket.Arn}" - - Fn::Sub: "${StagingBucket.Arn}/*" - Condition: - StringEquals: - aws:ResourceAccount: - - Fn::Sub: ${AWS::AccountId} - Effect: Allow - - Action: - - kms:Decrypt - - kms:DescribeKey - - kms:Encrypt - - kms:ReEncrypt* - - kms:GenerateDataKey* - Effect: Allow - Resource: - Fn::If: - - CreateNewKey - - Fn::Sub: "${FileAssetsBucketEncryptionKey.Arn}" - - Fn::Sub: arn:${AWS::Partition}:kms:${AWS::Region}:${AWS::AccountId}:key/${FileAssetsBucketKmsKeyId} - Version: '2012-10-17' - Roles: - - Ref: FilePublishingRole - PolicyName: - Fn::Sub: cdk-${Qualifier}-file-publishing-role-default-policy-${AWS::AccountId}-${AWS::Region} - ImagePublishingRoleDefaultPolicy: - Type: AWS::IAM::Policy - Properties: - PolicyDocument: - Statement: - - Action: - - ecr:PutImage - - ecr:InitiateLayerUpload - - ecr:UploadLayerPart - - ecr:CompleteLayerUpload - - ecr:BatchCheckLayerAvailability - - ecr:DescribeRepositories - - ecr:DescribeImages - - ecr:BatchGetImage - - ecr:GetDownloadUrlForLayer - Resource: - Fn::Sub: "${ContainerAssetsRepository.Arn}" - Effect: Allow - - Action: - - ecr:GetAuthorizationToken - Resource: "*" - Effect: Allow - Version: '2012-10-17' - Roles: - - Ref: ImagePublishingRole - PolicyName: - Fn::Sub: cdk-${Qualifier}-image-publishing-role-default-policy-${AWS::AccountId}-${AWS::Region} - DeploymentActionRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - # allows this role to be assumed with session tags. - # see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required - - Action: sts:TagSession - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: AWS::AccountId - - Fn::If: - - HasTrustedAccounts - - Action: sts:AssumeRole - Effect: Allow - Principal: - AWS: - Ref: TrustedAccounts - - Ref: AWS::NoValue - Policies: - - PolicyDocument: - Statement: - - Sid: CloudFormationPermissions - Effect: Allow - Action: - - cloudformation:CreateChangeSet - - cloudformation:DeleteChangeSet - - cloudformation:DescribeChangeSet - - cloudformation:DescribeStacks - - cloudformation:ExecuteChangeSet - - cloudformation:CreateStack - - cloudformation:UpdateStack - - cloudformation:RollbackStack - - cloudformation:ContinueUpdateRollback - Resource: "*" - - Sid: PipelineCrossAccountArtifactsBucket - # Read/write buckets in different accounts. Permissions to buckets in - # same account are granted by bucket policies. - # - # Write permissions necessary to write outputs to the cross-region artifact replication bucket - # https://aws.amazon.com/premiumsupport/knowledge-center/codepipeline-deploy-cloudformation/. - Effect: Allow - Action: - - s3:GetObject* - - s3:GetBucket* - - s3:List* - - s3:Abort* - - s3:DeleteObject* - - s3:PutObject* - Resource: "*" - Condition: - StringNotEquals: - s3:ResourceAccount: - Ref: 'AWS::AccountId' - - Sid: PipelineCrossAccountArtifactsKey - # Use keys only for the purposes of reading encrypted files from S3. - Effect: Allow - Action: - - kms:Decrypt - - kms:DescribeKey - - kms:Encrypt - - kms:ReEncrypt* - - kms:GenerateDataKey* - Resource: "*" - Condition: - StringEquals: - kms:ViaService: - Fn::Sub: s3.${AWS::Region}.amazonaws.com - - Action: iam:PassRole - Resource: - Fn::Sub: "${CloudFormationExecutionRole.Arn}" - Effect: Allow - - Sid: CliPermissions - Action: - # Permissions needed by the CLI when doing `cdk deploy`. - # Our CI/CD does not need DeleteStack, - # but we also want to use this role from the CLI, - # and there you can call `cdk destroy` - - cloudformation:DescribeStackEvents - - cloudformation:GetTemplate - - cloudformation:DeleteStack - - cloudformation:UpdateTerminationProtection - - sts:GetCallerIdentity - # `cdk import` - - cloudformation:GetTemplateSummary - Resource: "*" - Effect: Allow - - Sid: CliStagingBucket - Effect: Allow - Action: - - s3:GetObject* - - s3:GetBucket* - - s3:List* - Resource: - - Fn::Sub: ${StagingBucket.Arn} - - Fn::Sub: ${StagingBucket.Arn}/* - - Sid: ReadVersion - Effect: Allow - Action: - - ssm:GetParameter - - ssm:GetParameters # CreateChangeSet uses this to evaluate any SSM parameters (like `CdkBootstrapVersion`) - Resource: - - Fn::Sub: "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter${CdkBootstrapVersion}" - Version: '2012-10-17' - PolicyName: default - RoleName: - Fn::Sub: cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region} - Tags: - - Key: aws-cdk:bootstrap-role - Value: deploy - CloudFormationExecutionRole: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - - Action: sts:AssumeRole - Effect: Allow - Principal: - Service: cloudformation.amazonaws.com - Version: '2012-10-17' - ManagedPolicyArns: - Fn::If: - - HasCloudFormationExecutionPolicies - - Ref: CloudFormationExecutionPolicies - - Fn::If: - - HasTrustedAccounts - # The CLI will prevent this case from occurring - - Ref: AWS::NoValue - # The CLI will advertise that we picked this implicitly - - - Fn::Sub: "arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess" - RoleName: - Fn::Sub: cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region} - PermissionsBoundary: - Fn::If: - - PermissionsBoundarySet - - Fn::Sub: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${InputPermissionsBoundary}' - - Ref: AWS::NoValue - CdkBoostrapPermissionsBoundaryPolicy: - # Edit the template prior to boostrap in order to have this example policy created - Condition: ShouldCreatePermissionsBoundary - Type: AWS::IAM::ManagedPolicy - Properties: - PolicyDocument: - Statement: - # If permission boundaries do not have an explicit `allow`, then the effect is `deny` - - Sid: ExplicitAllowAll - Action: - - "*" - Effect: Allow - Resource: "*" - # Default permissions to prevent privilege escalation - - Sid: DenyAccessIfRequiredPermBoundaryIsNotBeingApplied - Action: - - iam:CreateUser - - iam:CreateRole - - iam:PutRolePermissionsBoundary - - iam:PutUserPermissionsBoundary - Condition: - StringNotEquals: - iam:PermissionsBoundary: - Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/cdk-${Qualifier}-permissions-boundary-${AWS::AccountId}-${AWS::Region} - Effect: Deny - Resource: "*" - # Forbid the policy itself being edited - - Sid: DenyPermBoundaryIAMPolicyAlteration - Action: - - iam:CreatePolicyVersion - - iam:DeletePolicy - - iam:DeletePolicyVersion - - iam:SetDefaultPolicyVersion - Effect: Deny - Resource: - Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/cdk-${Qualifier}-permissions-boundary-${AWS::AccountId}-${AWS::Region} - # Forbid removing the permissions boundary from any user or role that has it associated - - Sid: DenyRemovalOfPermBoundaryFromAnyUserOrRole - Action: - - iam:DeleteUserPermissionsBoundary - - iam:DeleteRolePermissionsBoundary - Effect: Deny - Resource: "*" - # Add your specific organizational security policy here - # Uncomment the example to deny access to AWS Config - #- Sid: OrganizationalSecurityPolicy - # Action: - # - "config:*" - # Effect: Deny - # Resource: "*" - Version: "2012-10-17" - Description: "Bootstrap Permission Boundary" - ManagedPolicyName: - Fn::Sub: cdk-${Qualifier}-permissions-boundary-${AWS::AccountId}-${AWS::Region} - Path: / - # The SSM parameter is used in pipeline-deployed templates to verify the version - # of the bootstrap resources. - CdkBootstrapVersion: - Type: AWS::SSM::Parameter - Properties: - Type: String - Name: - Fn::Sub: '/cdk-bootstrap/${Qualifier}/version' - Value: '25' -Outputs: - BucketName: - Description: The name of the S3 bucket owned by the CDK toolkit stack - Value: - Fn::Sub: "${StagingBucket}" - BucketDomainName: - Description: The domain name of the S3 bucket owned by the CDK toolkit stack - Value: - Fn::Sub: "${StagingBucket.RegionalDomainName}" - # @deprecated - This Export can be removed at some future point in time. - # We can't do it today because if there are stacks that use it, the bootstrap - # stack cannot be updated. Not used anymore by apps >= 1.60.0 - FileAssetKeyArn: - Description: The ARN of the KMS key used to encrypt the asset bucket (deprecated) - Value: - Fn::If: - - CreateNewKey - - Fn::Sub: "${FileAssetsBucketEncryptionKey.Arn}" - - Fn::Sub: "${FileAssetsBucketKmsKeyId}" - Export: - Name: - Fn::Sub: CdkBootstrap-${Qualifier}-FileAssetKeyArn - ImageRepositoryName: - Description: The name of the ECR repository which hosts docker image assets - Value: - Fn::Sub: "${ContainerAssetsRepository}" - # The Output is used by the CLI to verify the version of the bootstrap resources. - BootstrapVersion: - Description: The version of the bootstrap resources that are currently mastered - in this stack - Value: - Fn::GetAtt: [CdkBootstrapVersion, Value] diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.init-version.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.init-version.json deleted file mode 100644 index 650282ce..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.init-version.json +++ /dev/null @@ -1 +0,0 @@ -{"aws-cdk-lib": "0.0.0", "constructs": "^10.0.0"} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.no-packagejson-validator b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.no-packagejson-validator deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.recommended-feature-flags.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.recommended-feature-flags.json deleted file mode 100644 index c600491d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/.recommended-feature-flags.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "@aws-cdk/aws-lambda:recognizeLayerVersion": true, - "@aws-cdk/core:checkSecretUsage": true, - "@aws-cdk/core:target-partitions": [ - "aws", - "aws-cn" - ], - "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, - "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, - "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, - "@aws-cdk/aws-iam:minimizePolicies": true, - "@aws-cdk/core:validateSnapshotRemovalPolicy": true, - "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, - "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, - "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, - "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, - "@aws-cdk/core:enablePartitionLiterals": true, - "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, - "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, - "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, - "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, - "@aws-cdk/aws-route53-patters:useCertificate": true, - "@aws-cdk/customresources:installLatestAwsSdkDefault": false, - "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, - "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, - "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, - "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, - "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, - "@aws-cdk/aws-redshift:columnId": true, - "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, - "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, - "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, - "@aws-cdk/aws-kms:aliasNameRef": true, - "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, - "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, - "@aws-cdk/aws-efs:denyAnonymousAccess": true, - "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, - "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, - "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, - "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, - "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, - "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, - "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, - "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, - "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, - "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, - "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, - "@aws-cdk/aws-eks:nodegroupNameAttribute": true, - "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, - "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true, - "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false, - "@aws-cdk/aws-s3:keepNotificationInImportedBucket": false, - "@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature": false, - "@aws-cdk/aws-ecs:disableEcsImdsBlocking": true, - "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true, - "@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": true, - "@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": true, - "@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": true, - "@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": true, - "@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": true, - "@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": true, - "@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": true, - "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": true, - "@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": true, - "@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": true, - "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true, - "@aws-cdk/core:enableAdditionalMetadataCollection": true -} \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/LICENSE b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/LICENSE deleted file mode 100644 index a2f04c7c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -MIT No Attribution - -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/.template.gitignore deleted file mode 100644 index a4609e75..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/.template.gitignore +++ /dev/null @@ -1,342 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out - -# Created by https://www.gitignore.io/api/csharp - -### Csharp ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - - -# End of https://www.gitignore.io/api/csharp \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/README.md deleted file mode 100644 index f28e4d55..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Welcome to your CDK C# project! - -This is a blank project for CDK development with C#. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It uses the [.NET CLI](https://docs.microsoft.com/dotnet/articles/core/) to compile and execute your project. - -## Useful commands - -* `dotnet build src` compile this app -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk synth` emits the synthesized CloudFormation template \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/cdk.template.json deleted file mode 100644 index 054ecec5..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "dotnet run --project src/%name.PascalCased%/%name.PascalCased%.csproj", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "src/*/obj", - "src/*/bin", - "src/*.sln", - "src/*/GlobalSuppressions.cs", - "src/*/*.csproj" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln deleted file mode 100644 index 2f92ebd9..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%.template.sln +++ /dev/null @@ -1,18 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 -MinimumVisualStudioVersion = 15.0.26124.0 -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj deleted file mode 100644 index b9c30f09..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - - Major - - - - - - - - - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs deleted file mode 100644 index 2e8c5e65..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Amazon.CDK; -using Constructs; - -namespace %name.PascalCased% -{ - public class %name.PascalCased%Stack : Stack - { - internal %name.PascalCased%Stack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) - { - // The code that defines your stack goes here - } - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs deleted file mode 100644 index 26233fcb..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +++ /dev/null @@ -1 +0,0 @@ -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Potential Code Quality Issues", "RECS0026:Possible unassigned object created by 'new'", Justification = "Constructs add themselves to the scope in which they are created")] diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs deleted file mode 100644 index 0079f441..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/csharp/src/%name.PascalCased%/Program.template.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Amazon.CDK; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace %PascalNameSpace% -{ - sealed class Program - { - public static void Main(string[] args) - { - var app = new App(); - new %name.PascalCased%Stack(app, "%stackname%", new %PascalStackProps% - { - // If you don't specify 'env', this stack will be environment-agnostic. - // Account/Region-dependent features and context lookups will not work, - // but a single synthesized template can be deployed anywhere. - - // Uncomment the next block to specialize this stack for the AWS Account - // and Region that are implied by the current CLI configuration. - /* - Env = new Amazon.CDK.Environment - { - Account = System.Environment.GetEnvironmentVariable("CDK_DEFAULT_ACCOUNT"), - Region = System.Environment.GetEnvironmentVariable("CDK_DEFAULT_REGION"), - } - */ - - // Uncomment the next block if you know exactly what Account and Region you - // want to deploy the stack to. - /* - Env = new Amazon.CDK.Environment - { - Account = "123456789012", - Region = "us-east-1", - } - */ - - // For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html - }); - app.Synth(); - } - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/.template.gitignore deleted file mode 100644 index a4609e75..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/.template.gitignore +++ /dev/null @@ -1,342 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out - -# Created by https://www.gitignore.io/api/csharp - -### Csharp ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - - -# End of https://www.gitignore.io/api/csharp \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/README.md deleted file mode 100644 index 7054ece6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/README.md +++ /dev/null @@ -1,18 +0,0 @@ -## Welcome to your CDK F# project! - -This is a blank project for CDK development with F#. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It uses the [.NET Core CLI](https://docs.microsoft.com/dotnet/articles/core/) to compile and execute your project. - -## Useful commands - -* `dotnet build src` compile this app -* `cdk ls` list all stacks in the app -* `cdk synth` emits the synthesized CloudFormation template -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/cdk.template.json deleted file mode 100644 index b7b6120f..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/cdk.template.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "app": "dotnet run --project src/%name.PascalCased%/%name.PascalCased%.fsproj", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "src/*/obj", - "src/*/bin", - "src/*.sln", - "src/*/*.fsproj" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln deleted file mode 100644 index d73885e1..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%.template.sln +++ /dev/null @@ -1,18 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 -MinimumVisualStudioVersion = 15.0.26124.0 -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj deleted file mode 100644 index c9cb096e..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - Exe - net8.0 - - Major - - - - - - - - - - - - - - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs deleted file mode 100644 index 5e4d9ef9..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +++ /dev/null @@ -1,8 +0,0 @@ -namespace %name.PascalCased% - -open Amazon.CDK - -type %name.PascalCased%Stack(scope, id, props) as this = - inherit Stack(scope, id, props) - - // The code that defines your stack goes here diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs deleted file mode 100644 index 34190a2c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/fsharp/src/%name.PascalCased%/Program.template.fs +++ /dev/null @@ -1,11 +0,0 @@ -open Amazon.CDK -open %name.PascalCased% - -[] -let main _ = - let app = App(null) - - %name.PascalCased%Stack(app, "%stackname%", StackProps()) |> ignore - - app.Synth() |> ignore - 0 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%.template.go b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%.template.go deleted file mode 100644 index f97e0a2a..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%.template.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "github.com/aws/aws-cdk-go/awscdk/v2" - // "github.com/aws/aws-cdk-go/awscdk/v2/awssqs" - "github.com/aws/constructs-go/constructs/v10" - "github.com/aws/jsii-runtime-go" -) - -type %name.PascalCased%StackProps struct { - awscdk.StackProps -} - -func New%name.PascalCased%Stack(scope constructs.Construct, id string, props *%name.PascalCased%StackProps) awscdk.Stack { - var sprops awscdk.StackProps - if props != nil { - sprops = props.StackProps - } - stack := awscdk.NewStack(scope, &id, &sprops) - - // The code that defines your stack goes here - - // example resource - // queue := awssqs.NewQueue(stack, jsii.String("%name.PascalCased%Queue"), &awssqs.QueueProps{ - // VisibilityTimeout: awscdk.Duration_Seconds(jsii.Number(300)), - // }) - - return stack -} - -func main() { - defer jsii.Close() - - app := awscdk.NewApp(nil) - - New%name.PascalCased%Stack(app, "%stackname%", &%name.PascalCased%StackProps{ - awscdk.StackProps{ - Env: env(), - }, - }) - - app.Synth(nil) -} - -// env determines the AWS environment (account+region) in which our stack is to -// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html -func env() *awscdk.Environment { - // If unspecified, this stack will be "environment-agnostic". - // Account/Region-dependent features and context lookups will not work, but a - // single synthesized template can be deployed anywhere. - //--------------------------------------------------------------------------- - return nil - - // Uncomment if you know exactly what account and region you want to deploy - // the stack to. This is the recommendation for production stacks. - //--------------------------------------------------------------------------- - // return &awscdk.Environment{ - // Account: jsii.String("123456789012"), - // Region: jsii.String("us-east-1"), - // } - - // Uncomment to specialize this stack for the AWS Account and Region that are - // implied by the current CLI configuration. This is recommended for dev - // stacks. - //--------------------------------------------------------------------------- - // return &awscdk.Environment{ - // Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")), - // Region: jsii.String(os.Getenv("CDK_DEFAULT_REGION")), - // } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%_test.template.go b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%_test.template.go deleted file mode 100644 index 57cd5720..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/%name%_test.template.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -// import ( -// "testing" - -// "github.com/aws/aws-cdk-go/awscdk/v2" -// "github.com/aws/aws-cdk-go/awscdk/v2/assertions" -// "github.com/aws/jsii-runtime-go" -// ) - -// example tests. To run these tests, uncomment this file along with the -// example resource in %name%_test.go -// func Test%name.PascalCased%Stack(t *testing.T) { -// // GIVEN -// app := awscdk.NewApp(nil) - -// // WHEN -// stack := New%name.PascalCased%Stack(app, "MyStack", nil) - -// // THEN -// template := assertions.Template_FromStack(stack, nil) - -// template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ -// "VisibilityTimeout": 300, -// }) -// } diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/.template.gitignore deleted file mode 100644 index 92fe1ec3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/.template.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, built with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# go.sum should be committed -!go.sum - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/README.md deleted file mode 100644 index 79e5c455..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Welcome to your CDK Go project! - -This is a blank project for CDK development with Go. - -The `cdk.json` file tells the CDK toolkit how to execute your app. - -## Useful commands - - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk synth` emits the synthesized CloudFormation template - * `go test` run unit tests diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/cdk.template.json deleted file mode 100644 index a25485ed..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/cdk.template.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "app": "go mod download && go run %name%.go", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "go.mod", - "go.sum", - "**/*test.go" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/go.template.mod b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/go.template.mod deleted file mode 100644 index a6efe391..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/go/go.template.mod +++ /dev/null @@ -1,9 +0,0 @@ -module %name% - -go 1.18 - -require ( - github.com/aws/aws-cdk-go/awscdk/v2 v%cdk-version% - github.com/aws/constructs-go/constructs/v10 v10.0.5 - github.com/aws/jsii-runtime-go v1.29.0 -) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/info.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/info.json deleted file mode 100644 index 1a96dac2..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/info.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "description": "Template for a CDK Application", - "aliases": ["application", "default"] -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/.template.gitignore deleted file mode 100644 index 1db21f16..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/.template.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -.classpath.txt -target -.classpath -.project -.idea -.settings -.vscode -*.iml - -# CDK asset staging directory -.cdk.staging -cdk.out - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/README.md deleted file mode 100644 index 516ef71a..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Welcome to your CDK Java project! - -This is a blank project for CDK development with Java. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It is a [Maven](https://maven.apache.org/) based project, so you can open this project with any Maven compatible Java IDE to build and run tests. - -## Useful commands - - * `mvn package` compile and run tests - * `cdk ls` list all stacks in the app - * `cdk synth` emits the synthesized CloudFormation template - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/cdk.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/cdk.json deleted file mode 100644 index b21c3e47..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/cdk.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "app": "mvn -e -q compile exec:java", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "target", - "pom.xml", - "src/test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/pom.xml b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/pom.xml deleted file mode 100644 index 0b6306c3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - 4.0.0 - - com.myorg - %name% - 0.1 - - - UTF-8 - %cdk-version% - %constructs-version% - 5.7.1 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 - - 17 - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - com.myorg.%name.PascalCased%App - - - - - - - - - software.amazon.awscdk - aws-cdk-lib - ${cdk.version} - - - - software.constructs - constructs - ${constructs.version} - - - - org.junit.jupiter - junit-jupiter - ${junit.version} - test - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java deleted file mode 100644 index 5aee9b6d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.App; -import software.amazon.awscdk.Environment; -import software.amazon.awscdk.StackProps; - -import java.util.Arrays; - -public class %name.PascalCased%App { - public static void main(final String[] args) { - App app = new App(); - - new %name.PascalCased%Stack(app, "%stackname%", StackProps.builder() - // If you don't specify 'env', this stack will be environment-agnostic. - // Account/Region-dependent features and context lookups will not work, - // but a single synthesized template can be deployed anywhere. - - // Uncomment the next block to specialize this stack for the AWS Account - // and Region that are implied by the current CLI configuration. - /* - .env(Environment.builder() - .account(System.getenv("CDK_DEFAULT_ACCOUNT")) - .region(System.getenv("CDK_DEFAULT_REGION")) - .build()) - */ - - // Uncomment the next block if you know exactly what Account and Region you - // want to deploy the stack to. - /* - .env(Environment.builder() - .account("123456789012") - .region("us-east-1") - .build()) - */ - - // For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html - .build()); - - app.synth(); - } -} - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java deleted file mode 100644 index e944bde3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.myorg; - -import software.constructs.Construct; -import software.amazon.awscdk.Stack; -import software.amazon.awscdk.StackProps; -// import software.amazon.awscdk.Duration; -// import software.amazon.awscdk.services.sqs.Queue; - -public class %name.PascalCased%Stack extends Stack { - public %name.PascalCased%Stack(final Construct scope, final String id) { - this(scope, id, null); - } - - public %name.PascalCased%Stack(final Construct scope, final String id, final StackProps props) { - super(scope, id, props); - - // The code that defines your stack goes here - - // example resource - // final Queue queue = Queue.Builder.create(this, "%name.PascalCased%Queue") - // .visibilityTimeout(Duration.seconds(300)) - // .build(); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java deleted file mode 100644 index a87913e1..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/java/src/test/java/com/myorg/%name.PascalCased%Test.template.java +++ /dev/null @@ -1,26 +0,0 @@ -// package com.myorg; - -// import software.amazon.awscdk.App; -// import software.amazon.awscdk.assertions.Template; -// import java.io.IOException; - -// import java.util.HashMap; - -// import org.junit.jupiter.api.Test; - -// example test. To run these tests, uncomment this file, along with the -// example resource in java/src/main/java/com/myorg/%name.PascalCased%Stack.java -// public class %name.PascalCased%Test { - -// @Test -// public void testStack() throws IOException { -// App app = new App(); -// %name.PascalCased%Stack stack = new %name.PascalCased%Stack(app, "test"); - -// Template template = Template.fromStack(stack); - -// template.hasResourceProperties("AWS::SQS::Queue", new HashMap() {{ -// put("VisibilityTimeout", 300); -// }}); -// } -// } diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.gitignore deleted file mode 100644 index 21dc7626..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.npmignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.npmignore deleted file mode 100644 index 5de422a0..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/.template.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/README.md deleted file mode 100644 index 8b69061e..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Welcome to your CDK JavaScript project - -This is a blank project for CDK development with JavaScript. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. The build step is not required when using JavaScript. - -## Useful commands - -* `npm run test` perform the jest unit tests -* `npx cdk deploy` deploy this stack to your default AWS account/region -* `npx cdk diff` compare deployed stack with current state -* `npx cdk synth` emits the synthesized CloudFormation template diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/cdk.template.json deleted file mode 100644 index 60567272..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "node bin/%name%.js", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "jest.config.js", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/package.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/package.json deleted file mode 100644 index b6da3271..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/javascript/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "%name%", - "version": "0.1.0", - "bin": { - "%name%": "bin/%name%.js" - }, - "scripts": { - "build": "echo \"The build step is not required when using JavaScript!\" && exit 0", - "cdk": "cdk", - "test": "jest" - }, - "devDependencies": { - "aws-cdk": "%cdk-cli-version%", - "jest": "^29.7.0" - }, - "dependencies": { - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%" - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py deleted file mode 100644 index b93133ce..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +++ /dev/null @@ -1,19 +0,0 @@ -from aws_cdk import ( - # Duration, - Stack, - # aws_sqs as sqs, -) -from constructs import Construct - -class %name.PascalCased%Stack(Stack): - - def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - # The code that defines your stack goes here - - # example resource - # queue = sqs.Queue( - # self, "%name.PascalCased%Queue", - # visibility_timeout=Duration.seconds(300), - # ) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/%name.PythonModule%/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/.template.gitignore deleted file mode 100644 index 37833f8b..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/.template.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.swp -package-lock.json -__pycache__ -.pytest_cache -.venv -*.egg-info - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/README.template.md deleted file mode 100644 index 778d1bcd..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/README.template.md +++ /dev/null @@ -1,58 +0,0 @@ - -# Welcome to your CDK Python project! - -This is a blank project for CDK development with Python. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -This project is set up like a standard Python project. The initialization -process also creates a virtualenv within this project, stored under the `.venv` -directory. To create the virtualenv it assumes that there is a `python3` -(or `python` for Windows) executable in your path with access to the `venv` -package. If for any reason the automatic creation of the virtualenv fails, -you can create the virtualenv manually. - -To manually create a virtualenv on MacOS and Linux: - -``` -$ %python-executable% -m venv .venv -``` - -After the init process completes and the virtualenv is created, you can use the following -step to activate your virtualenv. - -``` -$ source .venv/bin/activate -``` - -If you are a Windows platform, you would activate the virtualenv like this: - -``` -% .venv\Scripts\activate.bat -``` - -Once the virtualenv is activated, you can install the required dependencies. - -``` -$ pip install -r requirements.txt -``` - -At this point you can now synthesize the CloudFormation template for this code. - -``` -$ cdk synth -``` - -To add additional dependencies, for example other CDK libraries, just add -them to your `setup.py` file and rerun the `pip install -r requirements.txt` -command. - -## Useful commands - - * `cdk ls` list all stacks in the app - * `cdk synth` emits the synthesized CloudFormation template - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/app.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/app.template.py deleted file mode 100644 index 1a79039b..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/app.template.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 -import os - -import aws_cdk as cdk - -from %name.PythonModule%.%name.PythonModule%_stack import %name.PascalCased%Stack - - -app = cdk.App() -%name.PascalCased%Stack(app, "%stackname%", - # If you don't specify 'env', this stack will be environment-agnostic. - # Account/Region-dependent features and context lookups will not work, - # but a single synthesized template can be deployed anywhere. - - # Uncomment the next line to specialize this stack for the AWS Account - # and Region that are implied by the current CLI configuration. - - #env=cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')), - - # Uncomment the next line if you know exactly what Account and Region you - # want to deploy the stack to. */ - - #env=cdk.Environment(account='123456789012', region='us-east-1'), - - # For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html - ) - -app.synth() diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/cdk.template.json deleted file mode 100644 index cbf387c5..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "%python-executable% app.py", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "requirements*.txt", - "source.bat", - "**/__init__.py", - "**/__pycache__", - "tests" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements-dev.txt b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements-dev.txt deleted file mode 100644 index 92709451..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements-dev.txt +++ /dev/null @@ -1 +0,0 @@ -pytest==6.2.5 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements.txt b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements.txt deleted file mode 100644 index bea43683..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -aws-cdk-lib==%cdk-version% -constructs%constructs-version% diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/source.bat b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/source.bat deleted file mode 100644 index 9e1a8344..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/source.bat +++ /dev/null @@ -1,13 +0,0 @@ -@echo off - -rem The sole purpose of this script is to make the command -rem -rem source .venv/bin/activate -rem -rem (which activates a Python virtualenv on Linux or Mac OS X) work on Windows. -rem On Windows, this command just runs this batch file (the argument is ignored). -rem -rem Now we don't need to document a Windows command for activating a virtualenv. - -echo Executing .venv\Scripts\activate.bat for you -.venv\Scripts\activate.bat diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py deleted file mode 100644 index 2bf2309d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/python/tests/unit/test_%name.PythonModule%_stack.template.py +++ /dev/null @@ -1,15 +0,0 @@ -import aws_cdk as core -import aws_cdk.assertions as assertions - -from %name.PythonModule%.%name.PythonModule%_stack import %name.PascalCased%Stack - -# example tests. To run these tests, uncomment this file along with the example -# resource in %name.PythonModule%/%name.PythonModule%_stack.py -def test_sqs_queue_created(): - app = core.App() - stack = %name.PascalCased%Stack(app, "%name.StackName%") - template = assertions.Template.from_stack(stack) - -# template.has_resource_properties("AWS::SQS::Queue", { -# "VisibilityTimeout": 300 -# }) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.gitignore deleted file mode 100644 index f60797b6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.npmignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.npmignore deleted file mode 100644 index c1d6d45d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/.template.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/README.md deleted file mode 100644 index 9315fe5b..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Welcome to your CDK TypeScript project - -This is a blank project for CDK development with TypeScript. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -## Useful commands - -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `npx cdk deploy` deploy this stack to your default AWS account/region -* `npx cdk diff` compare deployed stack with current state -* `npx cdk synth` emits the synthesized CloudFormation template diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/bin/%name%.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/bin/%name%.template.ts deleted file mode 100644 index 7c042a48..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/bin/%name%.template.ts +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node -import * as cdk from 'aws-cdk-lib'; -import { %name.PascalCased%Stack } from '../lib/%name%-stack'; - -const app = new cdk.App(); -new %name.PascalCased%Stack(app, '%stackname%', { - /* If you don't specify 'env', this stack will be environment-agnostic. - * Account/Region-dependent features and context lookups will not work, - * but a single synthesized template can be deployed anywhere. */ - - /* Uncomment the next line to specialize this stack for the AWS Account - * and Region that are implied by the current CLI configuration. */ - // env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION }, - - /* Uncomment the next line if you know exactly what Account and Region you - * want to deploy the stack to. */ - // env: { account: '123456789012', region: 'us-east-1' }, - - /* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */ -}); \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/cdk.template.json deleted file mode 100644 index e9b5bea3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/cdk.template.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "app": "npx ts-node --prefer-ts-exts bin/%name%.ts", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "**/*.d.ts", - "**/*.js", - "tsconfig.json", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/lib/%name%-stack.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/lib/%name%-stack.template.ts deleted file mode 100644 index 8ed0c827..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/lib/%name%-stack.template.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -// import * as sqs from 'aws-cdk-lib/aws-sqs'; - -export class %name.PascalCased%Stack extends cdk.Stack { - constructor(scope: Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - // The code that defines your stack goes here - - // example resource - // const queue = new sqs.Queue(this, '%name.PascalCased%Queue', { - // visibilityTimeout: cdk.Duration.seconds(300) - // }); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/package.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/package.json deleted file mode 100644 index 324a89ae..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "%name%", - "version": "0.1.0", - "bin": { - "%name%": "bin/%name%.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "devDependencies": { - "@types/jest": "^29.5.14", - "@types/node": "22.7.9", - "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "aws-cdk": "%cdk-cli-version%", - "ts-node": "^10.9.2", - "typescript": "~5.6.3" - }, - "dependencies": { - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%" - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/test/%name%.test.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/test/%name%.test.template.ts deleted file mode 100644 index b3fc1aaa..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/app/typescript/test/%name%.test.template.ts +++ /dev/null @@ -1,17 +0,0 @@ -// import * as cdk from 'aws-cdk-lib'; -// import { Template } from 'aws-cdk-lib/assertions'; -// import * as %name.PascalCased% from '../lib/%name%-stack'; - -// example test. To run these tests, uncomment this file along with the -// example resource in lib/%name%-stack.ts -test('SQS Queue Created', () => { -// const app = new cdk.App(); -// // WHEN -// const stack = new %name.PascalCased%.%name.PascalCased%Stack(app, 'MyTestStack'); -// // THEN -// const template = Template.fromStack(stack); - -// template.hasResourceProperties('AWS::SQS::Queue', { -// VisibilityTimeout: 300 -// }); -}); diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/info.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/info.json deleted file mode 100644 index ccc35fd2..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/info.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "description": "Template for a CDK Construct Library", - "aliases": "library" -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.gitignore deleted file mode 100644 index f60797b6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.npmignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.npmignore deleted file mode 100644 index c1d6d45d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/.template.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/README.template.md deleted file mode 100644 index adbdb936..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/README.template.md +++ /dev/null @@ -1,12 +0,0 @@ -# Welcome to your CDK TypeScript Construct Library project - -You should explore the contents of this project. It demonstrates a CDK Construct Library that includes a construct (`%name.PascalCased%`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The construct defines an interface (`%name.PascalCased%Props`) to configure the visibility timeout of the queue. - -## Useful commands - -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/lib/index.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/lib/index.template.ts deleted file mode 100644 index 38e63f67..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/lib/index.template.ts +++ /dev/null @@ -1,21 +0,0 @@ -// import * as cdk from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -// import * as sqs from 'aws-cdk-lib/aws-sqs'; - -export interface %name.PascalCased%Props { - // Define construct properties here -} - -export class %name.PascalCased% extends Construct { - - constructor(scope: Construct, id: string, props: %name.PascalCased%Props = {}) { - super(scope, id); - - // Define construct contents here - - // example resource - // const queue = new sqs.Queue(this, '%name.PascalCased%Queue', { - // visibilityTimeout: cdk.Duration.seconds(300) - // }); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/package.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/package.json deleted file mode 100644 index fca7a21c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "%name%", - "version": "0.1.0", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest" - }, - "devDependencies": { - "@types/jest": "^29.5.14", - "@types/node": "22.7.9", - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%", - "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typescript": "~5.6.3" - }, - "peerDependencies": { - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%" - } -} \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/test/%name%.test.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/test/%name%.test.template.ts deleted file mode 100644 index a94f62e6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/lib/typescript/test/%name%.test.template.ts +++ /dev/null @@ -1,18 +0,0 @@ -// import * as cdk from 'aws-cdk-lib'; -// import { Template } from 'aws-cdk-lib/assertions'; -// import * as %name.PascalCased% from '../lib/index'; - -// example test. To run these tests, uncomment this file along with the -// example resource in lib/index.ts -test('SQS Queue Created', () => { -// const app = new cdk.App(); -// const stack = new cdk.Stack(app, "TestStack"); -// // WHEN -// new %name.PascalCased%.%name.PascalCased%(stack, 'MyTestConstruct'); -// // THEN -// const template = Template.fromStack(stack); - -// template.hasResourceProperties('AWS::SQS::Queue', { -// VisibilityTimeout: 300 -// }); -}); diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/.template.gitignore deleted file mode 100644 index a4609e75..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/.template.gitignore +++ /dev/null @@ -1,342 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out - -# Created by https://www.gitignore.io/api/csharp - -### Csharp ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - - -# End of https://www.gitignore.io/api/csharp \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/README.template.md deleted file mode 100644 index 829e5976..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/README.template.md +++ /dev/null @@ -1,19 +0,0 @@ -# Welcome to your CDK C# project! - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PascalCased%Stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It uses the [.NET CLI](https://docs.microsoft.com/dotnet/articles/core/) to compile and execute your project. - -## Useful commands - -* `dotnet build src` compile this app -* `cdk ls` list all stacks in the app -* `cdk synth` emits the synthesized CloudFormation template -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/cdk.template.json deleted file mode 100644 index 054ecec5..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "dotnet run --project src/%name.PascalCased%/%name.PascalCased%.csproj", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "src/*/obj", - "src/*/bin", - "src/*.sln", - "src/*/GlobalSuppressions.cs", - "src/*/*.csproj" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln deleted file mode 100644 index 2f92ebd9..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%.template.sln +++ /dev/null @@ -1,18 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 -MinimumVisualStudioVersion = 15.0.26124.0 -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj deleted file mode 100644 index b9c30f09..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net8.0 - - Major - - - - - - - - - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs deleted file mode 100644 index c2934420..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Amazon.CDK; -using Amazon.CDK.AWS.SNS; -using Amazon.CDK.AWS.SNS.Subscriptions; -using Amazon.CDK.AWS.SQS; -using Constructs; - -namespace %name.PascalCased% -{ - public class %name.PascalCased%Stack : Stack - { - internal %name.PascalCased%Stack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) - { - // The CDK includes built-in constructs for most resource types, such as Queues and Topics. - var queue = new Queue(this, "%name.PascalCased%Queue", new QueueProps - { - VisibilityTimeout = Duration.Seconds(300) - }); - - var topic = new Topic(this, "%name.PascalCased%Topic"); - - topic.AddSubscription(new SqsSubscription(queue)); - } - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs deleted file mode 100644 index 26233fcb..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/GlobalSuppressions.cs +++ /dev/null @@ -1 +0,0 @@ -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Potential Code Quality Issues", "RECS0026:Possible unassigned object created by 'new'", Justification = "Constructs add themselves to the scope in which they are created")] diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs deleted file mode 100644 index 42a37ba7..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/Program.template.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Amazon.CDK; - -namespace %name.PascalCased% -{ - sealed class Program - { - public static void Main(string[] args) - { - var app = new App(); - new %name.PascalCased%Stack(app, "%stackname%"); - - app.Synth(); - } - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/.template.gitignore deleted file mode 100644 index a4609e75..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/.template.gitignore +++ /dev/null @@ -1,342 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out - -# Created by https://www.gitignore.io/api/csharp - -### Csharp ### -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - - -# End of https://www.gitignore.io/api/csharp \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/README.template.md deleted file mode 100644 index 71d05a9c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/README.template.md +++ /dev/null @@ -1,20 +0,0 @@ - -# Welcome to your CDK F# project! - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PascalCased%Stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It uses the [.NET CLI](https://docs.microsoft.com/dotnet/articles/core/) to compile and execute your project. - -## Useful commands - -* `dotnet build src` compile this app -* `cdk ls` list all stacks in the app -* `cdk synth` emits the synthesized CloudFormation template -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/cdk.template.json deleted file mode 100644 index b7b6120f..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/cdk.template.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "app": "dotnet run --project src/%name.PascalCased%/%name.PascalCased%.fsproj", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "src/*/obj", - "src/*/bin", - "src/*.sln", - "src/*/*.fsproj" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln deleted file mode 100644 index d73885e1..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%.template.sln +++ /dev/null @@ -1,18 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 -MinimumVisualStudioVersion = 15.0.26124.0 -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj deleted file mode 100644 index c9cb096e..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - Exe - net8.0 - - Major - - - - - - - - - - - - - - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs deleted file mode 100644 index 9ad4fac3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%Stack.template.fs +++ /dev/null @@ -1,14 +0,0 @@ -namespace %name.PascalCased% - -open Amazon.CDK -open Amazon.CDK.AWS.SNS -open Amazon.CDK.AWS.SNS.Subscriptions -open Amazon.CDK.AWS.SQS - -type %name.PascalCased%Stack(scope, id, props) as this = - inherit Stack(scope, id, props) - - let queue = Queue(this, "%name.PascalCased%Queue", QueueProps(VisibilityTimeout = Duration.Seconds(300.))) - - let topic = Topic(this, "%name.PascalCased%Topic") - do topic.AddSubscription(SqsSubscription(queue)) |> ignore diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs deleted file mode 100644 index 34190a2c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/Program.template.fs +++ /dev/null @@ -1,11 +0,0 @@ -open Amazon.CDK -open %name.PascalCased% - -[] -let main _ = - let app = App(null) - - %name.PascalCased%Stack(app, "%stackname%", StackProps()) |> ignore - - app.Synth() |> ignore - 0 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%.template.go b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%.template.go deleted file mode 100644 index f3a617f8..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%.template.go +++ /dev/null @@ -1,73 +0,0 @@ -package main - -import ( - "github.com/aws/aws-cdk-go/awscdk/v2" - "github.com/aws/aws-cdk-go/awscdk/v2/awssns" - "github.com/aws/aws-cdk-go/awscdk/v2/awssnssubscriptions" - "github.com/aws/aws-cdk-go/awscdk/v2/awssqs" - "github.com/aws/constructs-go/constructs/v10" - "github.com/aws/jsii-runtime-go" -) - -type %name.PascalCased%StackProps struct { - awscdk.StackProps -} - -func New%name.PascalCased%Stack(scope constructs.Construct, id string, props *%name.PascalCased%StackProps) awscdk.Stack { - var sprops awscdk.StackProps - if props != nil { - sprops = props.StackProps - } - stack := awscdk.NewStack(scope, &id, &sprops) - - - queue := awssqs.NewQueue(stack, jsii.String("%name.PascalCased%Queue"), &awssqs.QueueProps{ - VisibilityTimeout: awscdk.Duration_Seconds(jsii.Number(300)), - }) - - topic := awssns.NewTopic(stack, jsii.String("%name.PascalCased%Topic"), &awssns.TopicProps{}) - topic.AddSubscription(awssnssubscriptions.NewSqsSubscription(queue, &awssnssubscriptions.SqsSubscriptionProps{})) - - return stack -} - -func main() { - defer jsii.Close() - - app := awscdk.NewApp(nil) - - New%name.PascalCased%Stack(app, "%stackname%", &%name.PascalCased%StackProps{ - awscdk.StackProps{ - Env: env(), - }, - }) - - app.Synth(nil) -} - -// env determines the AWS environment (account+region) in which our stack is to -// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html -func env() *awscdk.Environment { - // If unspecified, this stack will be "environment-agnostic". - // Account/Region-dependent features and context lookups will not work, but a - // single synthesized template can be deployed anywhere. - //--------------------------------------------------------------------------- - return nil - - // Uncomment if you know exactly what account and region you want to deploy - // the stack to. This is the recommendation for production stacks. - //--------------------------------------------------------------------------- - // return &awscdk.Environment{ - // Account: jsii.String("123456789012"), - // Region: jsii.String("us-east-1"), - // } - - // Uncomment to specialize this stack for the AWS Account and Region that are - // implied by the current CLI configuration. This is recommended for dev - // stacks. - //--------------------------------------------------------------------------- - // return &awscdk.Environment{ - // Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")), - // Region: jsii.String(os.Getenv("CDK_DEFAULT_REGION")), - // } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%_test.template.go b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%_test.template.go deleted file mode 100644 index d7d6ce93..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/%name%_test.template.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "testing" - - "github.com/aws/aws-cdk-go/awscdk/v2" - "github.com/aws/aws-cdk-go/awscdk/v2/assertions" - "github.com/aws/jsii-runtime-go" -) - -func Test%name.PascalCased%Stack(t *testing.T) { - // GIVEN - app := awscdk.NewApp(nil) - - // WHEN - stack := New%name.PascalCased%Stack(app, "MyStack", nil) - - // THEN - template := assertions.Template_FromStack(stack, nil) - - template.HasResourceProperties(jsii.String("AWS::SQS::Queue"), map[string]interface{}{ - "VisibilityTimeout": 300, - }) - template.ResourceCountIs(jsii.String("AWS::SNS::Topic"), jsii.Number(1)) -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/.template.gitignore deleted file mode 100644 index 92fe1ec3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/.template.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Binaries for programs and plugins -*.exe -*.exe~ -*.dll -*.so -*.dylib - -# Test binary, built with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# go.sum should be committed -!go.sum - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/README.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/README.md deleted file mode 100644 index 7667f2ed..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Welcome to your CDK Go project! - -This is a blank project for Go development with CDK. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -## Useful commands - - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk synth` emits the synthesized CloudFormation template - * `go test` run unit tests diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/cdk.template.json deleted file mode 100644 index a25485ed..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/cdk.template.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "app": "go mod download && go run %name%.go", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "go.mod", - "go.sum", - "**/*test.go" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/go.template.mod b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/go.template.mod deleted file mode 100644 index a6efe391..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/go/go.template.mod +++ /dev/null @@ -1,9 +0,0 @@ -module %name% - -go 1.18 - -require ( - github.com/aws/aws-cdk-go/awscdk/v2 v%cdk-version% - github.com/aws/constructs-go/constructs/v10 v10.0.5 - github.com/aws/jsii-runtime-go v1.29.0 -) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/info.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/info.json deleted file mode 100644 index 1451c257..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/info.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "description": "Example CDK Application with some constructs", - "aliases": ["sample", "example"] -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/.template.gitignore deleted file mode 100644 index 1db21f16..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/.template.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -.classpath.txt -target -.classpath -.project -.idea -.settings -.vscode -*.iml - -# CDK asset staging directory -.cdk.staging -cdk.out - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/README.template.md deleted file mode 100644 index ecbdec16..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/README.template.md +++ /dev/null @@ -1,19 +0,0 @@ -# Welcome to your CDK Java project! - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PascalCased%Stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -It is a [Maven](https://maven.apache.org/) based project, so you can open this project with any Maven compatible Java IDE to build and run tests. - -## Useful commands - - * `mvn package` compile and run tests - * `cdk ls` list all stacks in the app - * `cdk synth` emits the synthesized CloudFormation template - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/cdk.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/cdk.json deleted file mode 100644 index b21c3e47..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/cdk.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "app": "mvn -e -q compile exec:java", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "target", - "pom.xml", - "src/test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/pom.xml b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/pom.xml deleted file mode 100644 index 877369a3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - 4.0.0 - com.myorg - %name% - 0.1 - - UTF-8 - %cdk-version% - %constructs-version% - 5.7.1 - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 - - 17 - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - com.myorg.%name.PascalCased%App - - - - - - - - software.amazon.awscdk - aws-cdk-lib - ${cdk.version} - - - software.constructs - constructs - ${constructs.version} - - - - org.junit.jupiter - junit-jupiter - ${junit.version} - test - - - diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java deleted file mode 100644 index 9a0c4233..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%App.template.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.App; - -public final class %name.PascalCased%App { - public static void main(final String[] args) { - App app = new App(); - - new %name.PascalCased%Stack(app, "%stackname%"); - - app.synth(); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java deleted file mode 100644 index 263b425b..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/main/java/com/myorg/%name.PascalCased%Stack.template.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.myorg; - -import software.constructs.Construct; -import software.amazon.awscdk.Duration; -import software.amazon.awscdk.Stack; -import software.amazon.awscdk.StackProps; -import software.amazon.awscdk.services.sns.Topic; -import software.amazon.awscdk.services.sns.subscriptions.SqsSubscription; -import software.amazon.awscdk.services.sqs.Queue; - -public class %name.PascalCased%Stack extends Stack { - public %name.PascalCased%Stack(final Construct parent, final String id) { - this(parent, id, null); - } - - public %name.PascalCased%Stack(final Construct parent, final String id, final StackProps props) { - super(parent, id, props); - - final Queue queue = Queue.Builder.create(this, "%name.PascalCased%Queue") - .visibilityTimeout(Duration.seconds(300)) - .build(); - - final Topic topic = Topic.Builder.create(this, "%name.PascalCased%Topic") - .displayName("My First Topic Yeah") - .build(); - - topic.addSubscription(new SqsSubscription(queue)); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java deleted file mode 100644 index 90f54277..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/java/src/test/java/com/myorg/%name.PascalCased%StackTest.template.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.myorg; - -import software.amazon.awscdk.App; -import software.amazon.awscdk.assertions.Template; -import software.amazon.awscdk.assertions.Match; -import java.io.IOException; - -import java.util.HashMap; - -import org.junit.jupiter.api.Test; - -public class %name.PascalCased%StackTest { - - @Test - public void testStack() throws IOException { - App app = new App(); - %name.PascalCased%Stack stack = new %name.PascalCased%Stack(app, "test"); - - Template template = Template.fromStack(stack); - - template.hasResourceProperties("AWS::SQS::Queue", new HashMap() {{ - put("VisibilityTimeout", 300); - }}); - - template.resourceCountIs("AWS::SNS::Topic", 1); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.gitignore deleted file mode 100644 index 21dc7626..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.npmignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.npmignore deleted file mode 100644 index 5de422a0..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/.template.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/README.template.md deleted file mode 100644 index 7c7bae1a..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/README.template.md +++ /dev/null @@ -1,13 +0,0 @@ -# Welcome to your CDK JavaScript project - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PascalCased%Stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. The build step is not required when using JavaScript. - -## Useful commands - -* `npm run test` perform the jest unit tests -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk synth` emits the synthesized CloudFormation template diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/cdk.template.json deleted file mode 100644 index 60567272..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "node bin/%name%.js", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "jest.config.js", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/package.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/package.json deleted file mode 100644 index b6da3271..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/javascript/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "%name%", - "version": "0.1.0", - "bin": { - "%name%": "bin/%name%.js" - }, - "scripts": { - "build": "echo \"The build step is not required when using JavaScript!\" && exit 0", - "cdk": "cdk", - "test": "jest" - }, - "devDependencies": { - "aws-cdk": "%cdk-cli-version%", - "jest": "^29.7.0" - }, - "dependencies": { - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%" - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py deleted file mode 100644 index 5b9c876d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/%name.PythonModule%_stack.template.py +++ /dev/null @@ -1,26 +0,0 @@ -from constructs import Construct -from aws_cdk import ( - Duration, - Stack, - aws_iam as iam, - aws_sqs as sqs, - aws_sns as sns, - aws_sns_subscriptions as subs, -) - - -class %name.PascalCased%Stack(Stack): - - def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: - super().__init__(scope, construct_id, **kwargs) - - queue = sqs.Queue( - self, "%name.PascalCased%Queue", - visibility_timeout=Duration.seconds(300), - ) - - topic = sns.Topic( - self, "%name.PascalCased%Topic" - ) - - topic.add_subscription(subs.SqsSubscription(queue)) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/%name.PythonModule%/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/.template.gitignore deleted file mode 100644 index 95f95442..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/.template.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -*.swp -package-lock.json -.pytest_cache -*.egg-info - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# CDK Context & Staging files -.cdk.staging/ -cdk.out/ \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/README.template.md deleted file mode 100644 index 1775b25f..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/README.template.md +++ /dev/null @@ -1,65 +0,0 @@ - -# Welcome to your CDK Python project! - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PythonModule%_stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -This project is set up like a standard Python project. The initialization process also creates -a virtualenv within this project, stored under the .venv directory. To create the virtualenv -it assumes that there is a `python3` executable in your path with access to the `venv` package. -If for any reason the automatic creation of the virtualenv fails, you can create the virtualenv -manually once the init process completes. - -To manually create a virtualenv on MacOS and Linux: - -``` -$ %python-executable% -m venv .venv -``` - -After the init process completes and the virtualenv is created, you can use the following -step to activate your virtualenv. - -``` -$ source .venv/bin/activate -``` - -If you are a Windows platform, you would activate the virtualenv like this: - -``` -% .venv\Scripts\activate.bat -``` - -Once the virtualenv is activated, you can install the required dependencies. - -``` -$ pip install -r requirements.txt -``` - -At this point you can now synthesize the CloudFormation template for this code. - -``` -$ cdk synth -``` - -You can now begin exploring the source code, contained in the hello directory. -There is also a very trivial test included that can be run like this: - -``` -$ pytest -``` - -To add additional dependencies, for example other CDK libraries, just add to -your requirements.txt file and rerun the `pip install -r requirements.txt` -command. - -## Useful commands - - * `cdk ls` list all stacks in the app - * `cdk synth` emits the synthesized CloudFormation template - * `cdk deploy` deploy this stack to your default AWS account/region - * `cdk diff` compare deployed stack with current state - * `cdk docs` open CDK documentation - -Enjoy! diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/app.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/app.template.py deleted file mode 100644 index 17857578..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/app.template.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python3 - -import aws_cdk as cdk - -from %name.PythonModule%.%name.PythonModule%_stack import %name.PascalCased%Stack - - -app = cdk.App() -%name.PascalCased%Stack(app, "%stackname%") - -app.synth() diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/cdk.template.json deleted file mode 100644 index 1c467275..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/cdk.template.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "app": "%python-executable% app.py", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "requirements*.txt", - "source.bat", - "**/__init__.py", - "python/__pycache__", - "tests" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements-dev.txt b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements-dev.txt deleted file mode 100644 index 92709451..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements-dev.txt +++ /dev/null @@ -1 +0,0 @@ -pytest==6.2.5 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements.txt b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements.txt deleted file mode 100644 index bea43683..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -aws-cdk-lib==%cdk-version% -constructs%constructs-version% diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/source.bat b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/source.bat deleted file mode 100644 index 9e1a8344..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/source.bat +++ /dev/null @@ -1,13 +0,0 @@ -@echo off - -rem The sole purpose of this script is to make the command -rem -rem source .venv/bin/activate -rem -rem (which activates a Python virtualenv on Linux or Mac OS X) work on Windows. -rem On Windows, this command just runs this batch file (the argument is ignored). -rem -rem Now we don't need to document a Windows command for activating a virtualenv. - -echo Executing .venv\Scripts\activate.bat for you -.venv\Scripts\activate.bat diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/__init__.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py deleted file mode 100644 index 1f4fd6b6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/python/tests/unit/test_%name.PythonModule%_stack.template.py +++ /dev/null @@ -1,21 +0,0 @@ -import aws_cdk as core -import aws_cdk.assertions as assertions -from %name.PythonModule%.%name.PythonModule%_stack import %name.PascalCased%Stack - - -def test_sqs_queue_created(): - app = core.App() - stack = %name.PascalCased%Stack(app, "%name.StackName%") - template = assertions.Template.from_stack(stack) - - template.has_resource_properties("AWS::SQS::Queue", { - "VisibilityTimeout": 300 - }) - - -def test_sns_topic_created(): - app = core.App() - stack = %name.PascalCased%Stack(app, "%name.StackName%") - template = assertions.Template.from_stack(stack) - - template.resource_count_is("AWS::SNS::Topic", 1) diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.gitignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.gitignore deleted file mode 100644 index f60797b6..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.npmignore b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.npmignore deleted file mode 100644 index c1d6d45d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/.template.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/README.template.md b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/README.template.md deleted file mode 100644 index 6bbe5aad..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/README.template.md +++ /dev/null @@ -1,15 +0,0 @@ -# Welcome to your CDK TypeScript project - -You should explore the contents of this project. It demonstrates a CDK app with an instance of a stack (`%name.PascalCased%Stack`) -which contains an Amazon SQS queue that is subscribed to an Amazon SNS topic. - -The `cdk.json` file tells the CDK Toolkit how to execute your app. - -## Useful commands - -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `cdk deploy` deploy this stack to your default AWS account/region -* `cdk diff` compare deployed stack with current state -* `cdk synth` emits the synthesized CloudFormation template diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/bin/%name%.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/bin/%name%.template.ts deleted file mode 100644 index 8c3c9d3f..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/bin/%name%.template.ts +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env node -import * as cdk from 'aws-cdk-lib'; -import { %name.PascalCased%Stack } from '../lib/%name%-stack'; - -const app = new cdk.App(); -new %name.PascalCased%Stack(app, '%stackname%'); diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/cdk.template.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/cdk.template.json deleted file mode 100644 index e9b5bea3..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/cdk.template.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "app": "npx ts-node --prefer-ts-exts bin/%name%.ts", - "watch": { - "include": ["**"], - "exclude": [ - "README.md", - "cdk*.json", - "**/*.d.ts", - "**/*.js", - "tsconfig.json", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts deleted file mode 100644 index ec44457c..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/lib/%name%-stack.template.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Duration, Stack, StackProps } from 'aws-cdk-lib'; -import * as sns from 'aws-cdk-lib/aws-sns'; -import * as subs from 'aws-cdk-lib/aws-sns-subscriptions'; -import * as sqs from 'aws-cdk-lib/aws-sqs'; -import { Construct } from 'constructs'; - -export class %name.PascalCased%Stack extends Stack { - constructor(scope: Construct, id: string, props?: StackProps) { - super(scope, id, props); - - const queue = new sqs.Queue(this, '%name.PascalCased%Queue', { - visibilityTimeout: Duration.seconds(300) - }); - - const topic = new sns.Topic(this, '%name.PascalCased%Topic'); - - topic.addSubscription(new subs.SqsSubscription(queue)); - } -} diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/package.json b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/package.json deleted file mode 100644 index b6b7f0ef..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "%name%", - "version": "0.1.0", - "bin": { - "%name%": "bin/%name%.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "test": "jest", - "cdk": "cdk" - }, - "devDependencies": { - "@types/jest": "^29.5.14", - "@types/node": "22.7.9", - "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "aws-cdk": "%cdk-cli-version%", - "ts-node": "^10.9.2", - "typescript": "~5.6.3" - }, - "dependencies": { - "aws-cdk-lib": "%cdk-version%", - "constructs": "%constructs-version%" - } -} \ No newline at end of file diff --git a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts b/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts deleted file mode 100644 index 7c8c4d7d..00000000 --- a/packages/@aws-cdk/cli-lib-alpha/lib/init-templates/sample-app/typescript/test/%name%.test.template.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import { Template, Match } from 'aws-cdk-lib/assertions'; -import * as %name.PascalCased% from '../lib/%name%-stack'; - -test('SQS Queue and SNS Topic Created', () => { - const app = new cdk.App(); - // WHEN - const stack = new %name.PascalCased%.%name.PascalCased%Stack(app, 'MyTestStack'); - // THEN - - const template = Template.fromStack(stack); - - template.hasResourceProperties('AWS::SQS::Queue', { - VisibilityTimeout: 300 - }); - template.resourceCountIs('AWS::SNS::Topic', 1); -}); diff --git a/packages/@aws-cdk/cli-plugin-contract/.npmignore b/packages/@aws-cdk/cli-plugin-contract/.npmignore index 2bde68b6..b68c0e7f 100644 --- a/packages/@aws-cdk/cli-plugin-contract/.npmignore +++ b/packages/@aws-cdk/cli-plugin-contract/.npmignore @@ -22,4 +22,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/cloud-assembly-schema/.npmignore b/packages/@aws-cdk/cloud-assembly-schema/.npmignore index 5ce4f73f..18c782a1 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/.npmignore +++ b/packages/@aws-cdk/cloud-assembly-schema/.npmignore @@ -20,6 +20,7 @@ tsconfig.tsbuildinfo /dist/changelog.md /dist/version.txt .eslintrc.js +build-tools !.jsii *.ts !*.d.ts diff --git a/packages/@aws-cdk/cloudformation-diff/.npmignore b/packages/@aws-cdk/cloudformation-diff/.npmignore index 2bde68b6..b68c0e7f 100644 --- a/packages/@aws-cdk/cloudformation-diff/.npmignore +++ b/packages/@aws-cdk/cloudformation-diff/.npmignore @@ -22,4 +22,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/node-bundle/.npmignore b/packages/@aws-cdk/node-bundle/.npmignore index 1edad021..98cb578d 100644 --- a/packages/@aws-cdk/node-bundle/.npmignore +++ b/packages/@aws-cdk/node-bundle/.npmignore @@ -21,4 +21,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/toolkit-lib/.gitignore b/packages/@aws-cdk/toolkit-lib/.gitignore index c11be0b9..99773b22 100644 --- a/packages/@aws-cdk/toolkit-lib/.gitignore +++ b/packages/@aws-cdk/toolkit-lib/.gitignore @@ -49,11 +49,12 @@ db.json.gz .init-version.json index_bg.wasm .recommended-feature-flags.json -!lib/init-templates/** docs build-info.json lib/**/*.wasm lib/**/*.yaml +lib/**/*.yml lib/**/*.js.map +lib/init-templates/** !test/_fixtures/**/app.js !test/_fixtures/**/cdk.out diff --git a/packages/@aws-cdk/toolkit-lib/.npmignore b/packages/@aws-cdk/toolkit-lib/.npmignore index f09bd06b..ccb176b4 100644 --- a/packages/@aws-cdk/toolkit-lib/.npmignore +++ b/packages/@aws-cdk/toolkit-lib/.npmignore @@ -22,13 +22,14 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts -assets build-tools +assets docs typedoc.json *.d.ts.map !build-info.json !db.json.gz +!lib/init-templates/**/*.ts !lib/api/bootstrap/bootstrap-template.yaml !lib/*.js !lib/*.d.ts diff --git a/packages/@aws-cdk/user-input-gen/.npmignore b/packages/@aws-cdk/user-input-gen/.npmignore index 49472ebd..b8c73a62 100644 --- a/packages/@aws-cdk/user-input-gen/.npmignore +++ b/packages/@aws-cdk/user-input-gen/.npmignore @@ -20,4 +20,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/@aws-cdk/yarn-cling/.npmignore b/packages/@aws-cdk/yarn-cling/.npmignore index 49472ebd..b8c73a62 100644 --- a/packages/@aws-cdk/yarn-cling/.npmignore +++ b/packages/@aws-cdk/yarn-cling/.npmignore @@ -20,4 +20,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/aws-cdk/.npmignore b/packages/aws-cdk/.npmignore index 419bc308..4de452b4 100644 --- a/packages/aws-cdk/.npmignore +++ b/packages/aws-cdk/.npmignore @@ -22,6 +22,7 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools !lib/init-templates/**/*.ts images/ CONTRIBUTING.md diff --git a/packages/cdk-assets/.npmignore b/packages/cdk-assets/.npmignore index 2bde68b6..b68c0e7f 100644 --- a/packages/cdk-assets/.npmignore +++ b/packages/cdk-assets/.npmignore @@ -22,4 +22,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes diff --git a/packages/cdk/.npmignore b/packages/cdk/.npmignore index 2bde68b6..b68c0e7f 100644 --- a/packages/cdk/.npmignore +++ b/packages/cdk/.npmignore @@ -22,4 +22,5 @@ tsconfig.tsbuildinfo .eslintrc.js *.ts !*.d.ts +build-tools /.gitattributes From 2a57bc9560d9a78ef01e8151a749e09e623a0913 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Tue, 25 Feb 2025 13:29:31 +0000 Subject: [PATCH 12/30] docs(toolkit-lib): include `VERSION` file (#131) The docs build requires this file to contain the current version number. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .projenrc.ts | 17 +++++++++-------- .../@aws-cdk/toolkit-lib/.projen/tasks.json | 5 ++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.projenrc.ts b/.projenrc.ts index d3d286a2..bc947298 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -1217,18 +1217,19 @@ for (const tsconfig of [toolkitLib.tsconfigDev]) { } } +// Ad a command for the docs const toolkitLibDocs = toolkitLib.addTask('docs', { exec: 'typedoc lib/index.ts', receiveArgs: true, }); -toolkitLib.packageTask.spawn(toolkitLibDocs, { - // the nested directory is important - // the zip file needs to have this structure when created - args: ['--out dist/docs/cdk/api/toolkit-lib'], -}); -toolkitLib.packageTask.exec('zip -r ../docs.zip cdk ', { - cwd: 'dist/docs', -}); + +// When packaging, output the docs into a specific nested directory +// This is required because the zip file needs to have this structure when created +toolkitLib.packageTask.spawn(toolkitLibDocs, { args: ['--out dist/docs/cdk/api/toolkit-lib'] }); +// The docs build needs the version in a specific file at the nested root +toolkitLib.packageTask.exec('(cat dist/version.txt || echo "latest") > dist/docs/cdk/api/toolkit-lib/VERSION'); +// Zip the whole thing up, again paths are important here to get the desired folder structure +toolkitLib.packageTask.exec('zip -r ../docs.zip cdk', { cwd: 'dist/docs' }); toolkitLib.addTask('publish-local', { exec: './build-tools/package.sh', diff --git a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json index c526c4e9..63fd8048 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json @@ -158,7 +158,10 @@ ] }, { - "exec": "zip -r ../docs.zip cdk ", + "exec": "(cat dist/version.txt || echo \"latest\") > dist/docs/cdk/api/toolkit-lib/VERSION" + }, + { + "exec": "zip -r ../docs.zip cdk", "cwd": "dist/docs" } ] From 757ae69e80931a83ac20ef32fe52e503961e2212 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Tue, 25 Feb 2025 15:40:12 +0100 Subject: [PATCH 13/30] feat(cli): can match notices against Node version (#128) This allows publishing notices that match against the version of Node we're executing on. Implemented by generalizing the code that matches against CLI version and bootstrap versions: it can now match against arbitrary named components. Also implement more complex matching rules: currently we match the pattern if one of them matches: ```ts // Matches if one of A, B or C matches components: [A, B, C] ``` Instead, generalize to Disjunctive Normal Form and treat the current case as a special case of DNF where every conjunction has one element: ```ts // The above gets interpreted as components: [[A], [B], [C]] // More complex rules: A and B together, or C components: [[A, B], [C]] ``` This way we can write rules to say that "component X on Node version Y" should get a notice. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- packages/aws-cdk/lib/notices.ts | 276 +++++++++++++++++--------- packages/aws-cdk/lib/tree.ts | 12 +- packages/aws-cdk/test/notices.test.ts | 120 ++++++++++- packages/aws-cdk/test/tree.test.ts | 4 +- 4 files changed, 312 insertions(+), 100 deletions(-) diff --git a/packages/aws-cdk/lib/notices.ts b/packages/aws-cdk/lib/notices.ts index ebeec4d0..8976d34d 100644 --- a/packages/aws-cdk/lib/notices.ts +++ b/packages/aws-cdk/lib/notices.ts @@ -11,8 +11,7 @@ import type { Context } from './api/context'; import { versionNumber } from './cli/version'; import { debug, info, warning, error } from './logging'; import { ToolkitError } from './toolkit/error'; -import { loadTreeFromDir, some } from './tree'; -import { flatMap } from './util'; +import { ConstructTreeNode, loadTreeFromDir } from './tree'; import { cdkCacheDir } from './util/directories'; import { formatErrorMessage } from './util/format-error'; @@ -84,116 +83,189 @@ export interface NoticesFilterFilterOptions { readonly bootstrappedEnvironments: BootstrappedEnvironment[]; } -export class NoticesFilter { +export abstract class NoticesFilter { public static filter(options: NoticesFilterFilterOptions): FilteredNotice[] { - return [ - ...this.findForCliVersion(options.data, options.cliVersion), - ...this.findForFrameworkVersion(options.data, options.outDir), - ...this.findForBootstrapVersion(options.data, options.bootstrappedEnvironments), + const components = [ + ...NoticesFilter.constructTreeComponents(options.outDir), + ...NoticesFilter.otherComponents(options), ]; + + return NoticesFilter.findForNamedComponents(options.data, components); } - private static findForCliVersion(data: Notice[], cliVersion: string): FilteredNotice[] { - return flatMap(data, notice => { - const affectedComponent = notice.components.find(component => component.name === 'cli'); - const affectedRange = affectedComponent?.version; + /** + * From a set of input options, return the notices components we are searching for + */ + private static otherComponents(options: NoticesFilterFilterOptions): ActualComponent[] { + return [ + // CLI + { + name: 'cli', + version: options.cliVersion, + }, + + // Node version + { + name: 'node', + version: process.version.replace(/^v/, ''), // remove the 'v' prefix. + dynamicName: 'node', + }, + + // Bootstrap environments + ...options.bootstrappedEnvironments.flatMap(env => { + const semverBootstrapVersion = semver.coerce(env.bootstrapStackVersion); + if (!semverBootstrapVersion) { + // we don't throw because notices should never crash the cli. + warning(`While filtering notices, could not coerce bootstrap version '${env.bootstrapStackVersion}' into semver`); + return []; + } - if (affectedRange == null) { - return []; - } + return [{ + name: 'bootstrap', + version: `${semverBootstrapVersion}`, + dynamicName: 'ENVIRONMENTS', + dynamicValue: env.environment.name, + }]; + }), + ]; + } - if (!semver.satisfies(cliVersion, affectedRange)) { - return []; + /** + * Based on a set of component names, find all notices that match one of the given components + */ + private static findForNamedComponents(data: Notice[], actualComponents: ActualComponent[]): FilteredNotice[] { + return data.flatMap(notice => { + const ors = this.resolveAliases(normalizeComponents(notice.components)); + + // Find the first set of the disjunctions of which all components match against the actual components. + // Return the actual components we found so that we can inject their dynamic values. A single filter + // component can match more than one actual component + for (const ands of ors) { + const matched = ands.map(affected => actualComponents.filter(actual => + NoticesFilter.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version))); + + // For every clause in the filter we matched one or more components + if (matched.every(xs => xs.length > 0)) { + const ret = new FilteredNotice(notice); + NoticesFilter.addDynamicValues(matched.flatMap(x => x), ret); + return [ret]; + } } - return [new FilteredNotice(notice)]; + return []; }); } - private static findForFrameworkVersion(data: Notice[], outDir: string): FilteredNotice[] { - const tree = loadTreeFromDir(outDir); - return flatMap(data, notice => { - // A match happens when: - // - // 1. The version of the node matches the version in the notice, interpreted - // as a semver range. - // - // AND - // - // 2. The name in the notice is a prefix of the node name when the query ends in '.', - // or the two names are exactly the same, otherwise. - - const matched = some(tree, node => { - return this.resolveAliases(notice.components).some(component => - compareNames(component.name, node.constructInfo?.fqn) && - compareVersions(component.version, node.constructInfo?.version)); - }); - - if (!matched) { - return []; - } - - return [new FilteredNotice(notice)]; + /** + * Whether the given "affected component" name applies to the given actual component name. + * + * The name matches if the name is exactly the same, or the name in the notice + * is a prefix of the node name when the query ends in '.'. + */ + private static componentNameMatches(pattern: Component, actual: ActualComponent): boolean { + return pattern.name.endsWith('.') ? actual.name.startsWith(pattern.name) : pattern.name === actual.name; + } - function compareNames(pattern: string, target: string | undefined): boolean { - if (target == null) { - return false; - } - return pattern.endsWith('.') ? target.startsWith(pattern) : pattern === target; + /** + * Adds dynamic values from the given ActualComponents + * + * If there are multiple components with the same dynamic name, they are joined + * by a comma. + */ + private static addDynamicValues(comps: ActualComponent[], notice: FilteredNotice) { + const dynamicValues: Record = {}; + for (const comp of comps) { + if (comp.dynamicName) { + dynamicValues[comp.dynamicName] = dynamicValues[comp.dynamicName] ?? []; + dynamicValues[comp.dynamicName].push(comp.dynamicValue ?? comp.version); } + } + for (const [key, values] of Object.entries(dynamicValues)) { + notice.addDynamicValue(key, values.join(',')); + } + } - function compareVersions(pattern: string, target: string | undefined): boolean { - return semver.satisfies(target ?? '', pattern); + /** + * Treat 'framework' as an alias for either `aws-cdk-lib.` or `@aws-cdk/core.`. + * + * Because it's EITHER `aws-cdk-lib` or `@aws-cdk/core`, we need to add multiple + * arrays at the top level. + */ + private static resolveAliases(ors: Component[][]): Component[][] { + return ors.flatMap(ands => { + const hasFramework = ands.find(c => c.name === 'framework'); + if (!hasFramework) { + return [ands]; } + + return [ + ands.map(c => c.name === 'framework' ? { ...c, name: '@aws-cdk/core.' } : c), + ands.map(c => c.name === 'framework' ? { ...c, name: 'aws-cdk-lib.' } : c), + ]; }); } - private static findForBootstrapVersion(data: Notice[], bootstrappedEnvironments: BootstrappedEnvironment[]): FilteredNotice[] { - return flatMap(data, notice => { - const affectedComponent = notice.components.find(component => component.name === 'bootstrap'); - const affectedRange = affectedComponent?.version; + /** + * Load the construct tree from the given directory and return its components + */ + private static constructTreeComponents(manifestDir: string): ActualComponent[] { + const tree = loadTreeFromDir(manifestDir); + if (!tree) { + return []; + } - if (affectedRange == null) { - return []; - } + const ret: ActualComponent[] = []; + recurse(tree); + return ret; - const affected = bootstrappedEnvironments.filter(i => { - const semverBootstrapVersion = semver.coerce(i.bootstrapStackVersion); - if (!semverBootstrapVersion) { - // we don't throw because notices should never crash the cli. - warning(`While filtering notices, could not coerce bootstrap version '${i.bootstrapStackVersion}' into semver`); - return false; - } - - return semver.satisfies(semverBootstrapVersion, affectedRange); - }); + function recurse(x: ConstructTreeNode) { + if (x.constructInfo?.fqn && x.constructInfo?.version) { + ret.push({ + name: x.constructInfo?.fqn, + version: x.constructInfo?.version, + }); + } - if (affected.length === 0) { - return []; + for (const child of Object.values(x.children ?? {})) { + recurse(child); } + } + } +} - const filtered = new FilteredNotice(notice); - filtered.addDynamicValue('ENVIRONMENTS', affected.map(s => s.environment.name).join(',')); +interface ActualComponent { + /** + * Name of the component + */ + readonly name: string; - return [filtered]; - }); - } + /** + * Version of the component + */ + readonly version: string; - private static resolveAliases(components: Component[]): Component[] { - return flatMap(components, component => { - if (component.name === 'framework') { - return [{ - name: '@aws-cdk/core.', - version: component.version, - }, { - name: 'aws-cdk-lib.', - version: component.version, - }]; - } else { - return [component]; - } - }); - } + /** + * If matched, under what name should it be added to the set of dynamic values + * + * These will be used to substitute placeholders in the message string, where + * placeholders look like `{resolve:XYZ}`. + * + * If there is more than one component with the same dynamic name, they are + * joined by ','. + * + * @default - Don't add to the set of dynamic values. + */ + readonly dynamicName?: string; + + /** + * If matched, what we should put in the set of dynamic values insstead of the version. + * + * Only used if `dynamicName` is set; by default we will add the actual version + * of the component. + * + * @default - The version. + */ + readonly dynamicValue?: string; } /** @@ -327,6 +399,10 @@ export class Notices { export interface Component { name: string; + + /** + * The range of affected versions + */ version: string; } @@ -334,11 +410,33 @@ export interface Notice { title: string; issueNumber: number; overview: string; - components: Component[]; + /** + * A set of affected components + * + * The canonical form of a list of components is in Disjunctive Normal Form + * (i.e., an OR of ANDs). This is the form when the list of components is a + * doubly nested array: the notice matches if all components of at least one + * of the top-level array matches. + * + * If the `components` is a single-level array, it is evaluated as an OR; it + * matches if any of the components matches. + */ + components: Array; schemaVersion: string; severity?: string; } +/** + * Normalizes the given components structure into DNF form + */ +function normalizeComponents(xs: Array): Component[][] { + return xs.map(x => Array.isArray(x) ? x : [x]); +} + +function renderConjunction(xs: Component[]): string { + return xs.map(c => `${c.name}: ${c.version}`).join(' AND '); +} + /** * Notice after passing the filter. A filter can augment a notice with * dynamic values as it has access to the dynamic matching data. @@ -354,7 +452,7 @@ export class FilteredNotice { } public format(): string { - const componentsValue = this.notice.components.map(c => `${c.name}: ${c.version}`).join(', '); + const componentsValue = normalizeComponents(this.notice.components).map(renderConjunction).join(', '); return this.resolveDynamicValues([ `${this.notice.issueNumber}\t${this.notice.title}`, this.formatOverview(), diff --git a/packages/aws-cdk/lib/tree.ts b/packages/aws-cdk/lib/tree.ts index 57ae5685..5368e9a1 100644 --- a/packages/aws-cdk/lib/tree.ts +++ b/packages/aws-cdk/lib/tree.ts @@ -29,30 +29,30 @@ export interface ConstructTreeNode { /** * Whether the provided predicate is true for at least one element in the construct (sub-)tree. */ -export function some(node: ConstructTreeNode, predicate: (n: ConstructTreeNode) => boolean): boolean { +export function some(node: ConstructTreeNode | undefined, predicate: (n: ConstructTreeNode) => boolean): boolean { return node != null && (predicate(node) || findInChildren()); function findInChildren(): boolean { - return Object.values(node.children ?? {}).some(child => some(child, predicate)); + return Object.values(node?.children ?? {}).some(child => some(child, predicate)); } } -export function loadTree(assembly: CloudAssembly) { +export function loadTree(assembly: CloudAssembly): ConstructTreeNode | undefined { try { const outdir = assembly.directory; const fileName = assembly.tree()?.file; return fileName ? fs.readJSONSync(path.join(outdir, fileName)).tree : {}; } catch (e) { trace(`Failed to get tree.json file: ${e}. Proceeding with empty tree.`); - return {}; + return undefined; } } -export function loadTreeFromDir(outdir: string) { +export function loadTreeFromDir(outdir: string): ConstructTreeNode | undefined { try { return fs.readJSONSync(path.join(outdir, 'tree.json')).tree; } catch (e) { trace(`Failed to get tree.json file: ${e}. Proceeding with empty tree.`); - return {}; + return undefined; } } diff --git a/packages/aws-cdk/test/notices.test.ts b/packages/aws-cdk/test/notices.test.ts index 76397318..cf031844 100644 --- a/packages/aws-cdk/test/notices.test.ts +++ b/packages/aws-cdk/test/notices.test.ts @@ -13,6 +13,7 @@ import { FilteredNotice, WebsiteNoticeDataSource, BootstrappedEnvironment, + Component, } from '../lib/notices'; import * as version from '../lib/cli/version'; import { Settings } from '../lib/api/settings'; @@ -21,7 +22,7 @@ import { Context } from '../lib/api/context'; const BASIC_BOOTSTRAP_NOTICE = { title: 'Exccessive permissions on file asset publishing role', issueNumber: 16600, - overview: 'FilePublishingRoleDefaultPolicy has too many permissions', + overview: 'FilePublishingRoleDefaultPolicy has too many permissions in {resolve:ENVIRONMENTS}', components: [{ name: 'bootstrap', version: '<25', @@ -281,12 +282,14 @@ describe(NoticesFilter, () => { }, ]; - expect(NoticesFilter.filter({ + const filtered = NoticesFilter.filter({ data: [BASIC_BOOTSTRAP_NOTICE], cliVersion, outDir, bootstrappedEnvironments: bootstrappedEnvironments, - }).map(f => f.notice)).toEqual([BASIC_BOOTSTRAP_NOTICE]); + }); + expect(filtered.map(f => f.notice)).toEqual([BASIC_BOOTSTRAP_NOTICE]); + expect(filtered.map(f => f.format()).join('\n')).toContain('env1,env2'); }); test('ignores invalid bootstrap versions', () => { @@ -301,9 +304,120 @@ describe(NoticesFilter, () => { bootstrappedEnvironments: [{ bootstrapStackVersion: NaN, environment: { account: 'account', region: 'region', name: 'env' } }], }).map(f => f.notice)).toEqual([]); }); + + test('node version', () => { + // can match node version + const outDir = path.join(__dirname, 'cloud-assembly-trees', 'built-with-2_12_0'); + const cliVersion = '1.0.0'; + + const filtered = NoticesFilter.filter({ + data: [ + { + title: 'matchme', + overview: 'You are running {resolve:node}', + issueNumber: 1, + schemaVersion: '1', + components: [ + { + name: 'node', + version: '>= 14.x', + }, + ] + }, + { + title: 'dontmatchme', + overview: 'dontmatchme', + issueNumber: 2, + schemaVersion: '1', + components: [ + { + name: 'node', + version: '>= 999.x', + }, + ] + }, + ] satisfies Notice[], + cliVersion, + outDir, + bootstrappedEnvironments: [], + }); + + expect(filtered.map(f => f.notice.title)).toEqual(['matchme']); + const nodeVersion = process.version.replace(/^v/, ''); + expect(filtered.map(f => f.format()).join('\n')).toContain(`You are running ${nodeVersion}`); + }); + + test.each([ + // No components => doesnt match + [ + [], + false, + ], + // Multiple single-level components => treated as an OR, one of them is fine + [ + [['cli 1.0.0'], ['node >=999.x']], + true, + ], + // OR of ANDS, all must match + [ + [['cli 1.0.0', 'node >=999.x']], + false, + ], + [ + [['cli 1.0.0', 'node >=14.x']], + true, + ], + [ + [['cli 1.0.0', 'node >=14.x'], ['cli >999.0.0']], + true, + ], + // Can combine matching against a construct and e.g. node version in the same query + [ + [['aws-cdk-lib.App ^2', 'node >=14.x']], + true, + ], + ])('disjunctive normal form: %j => %p', (components: string[][], shouldMatch) => { + // can match node version + const outDir = path.join(__dirname, 'cloud-assembly-trees', 'built-with-2_12_0'); + const cliVersion = '1.0.0'; + + // WHEN + const filtered = NoticesFilter.filter({ + data: [ + { + title: 'match', + overview: 'match', + issueNumber: 1, + schemaVersion: '1', + components: components.map(ands => ands.map(parseTestComponent)), + }, + ] satisfies Notice[], + cliVersion, + outDir, + bootstrappedEnvironments: [], + }); + + // THEN + expect(filtered.map(f => f.notice.title)).toEqual(shouldMatch ? ['match'] : []); + }); }); }); +/** + * Parse a test component from a string into a Component object. Just because this is easier to read in tests. + */ +function parseTestComponent(x: string): Component { + const parts = x.split(' '); + if (parts.length !== 2) { + throw new Error(`Invalid test component: ${x} (must use exactly 1 space)`); + } + return { + name: parts[0], + version: parts[1], + }; +} + + describe(WebsiteNoticeDataSource, () => { const dataSource = new WebsiteNoticeDataSource(); diff --git a/packages/aws-cdk/test/tree.test.ts b/packages/aws-cdk/test/tree.test.ts index 06a7e324..e47b621a 100644 --- a/packages/aws-cdk/test/tree.test.ts +++ b/packages/aws-cdk/test/tree.test.ts @@ -105,11 +105,11 @@ describe('some', () => { describe('loadTreeFromDir', () => { test('can find tree', () => { const tree = loadTreeFromDir(path.join(__dirname, 'cloud-assembly-trees', 'built-with-1_144_0')); - expect(tree.id).toEqual('App'); + expect(tree?.id).toEqual('App'); }); test('cannot find tree', () => { const tree = loadTreeFromDir(path.join(__dirname, 'cloud-assembly-trees', 'foo')); - expect(tree).toEqual({}); + expect(tree).toEqual(undefined); }); }); From fdf54d0fc1c878f85a72ec632f0dc7ab9d4bdc70 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:03:17 -0500 Subject: [PATCH 14/30] docs(toolkit-lib): CODE_REGISTRY.md tracks valid codes and their documentation (#44) closes https://github.com/aws/aws-cdk/issues/33434 generates `CODE_REGISTRY.md` using information gathered in `codes.ts`. this pr: - updates `codes.ts` to have additional information stored - introduces a script that generates a markdown table from the `CODES` object - updates projen to build `CODE_REGISTRY.md` as a post-build step --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Co-authored-by: Momo Kornher --- .projenrc.ts | 1 + .../@aws-cdk/toolkit-lib/.projen/tasks.json | 3 + .../@aws-cdk/toolkit-lib/CODE_REGISTRY.md | 31 +++ .../private/context-aware-source.ts | 6 +- .../cloud-assembly/private/prepare-source.ts | 4 +- .../cloud-assembly/private/source-builder.ts | 10 +- .../toolkit-lib/lib/api/io/private/codes.ts | 208 +++++++++++++++--- .../lib/api/io/private/messages.ts | 59 ++--- .../toolkit-lib/lib/api/io/private/timer.ts | 12 +- .../@aws-cdk/toolkit-lib/lib/toolkit/index.ts | 1 + .../toolkit-lib/lib/toolkit/toolkit.ts | 37 ++-- .../@aws-cdk/toolkit-lib/lib/toolkit/types.ts | 78 +++++++ .../toolkit-lib/scripts/gen-code-registry.ts | 29 +++ 13 files changed, 385 insertions(+), 94 deletions(-) create mode 100644 packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md create mode 100644 packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts create mode 100644 packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts diff --git a/.projenrc.ts b/.projenrc.ts index bc947298..31f05466 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -1174,6 +1174,7 @@ toolkitLib.package.addField('exports', { './package.json': './package.json', }); +toolkitLib.postCompileTask.exec('ts-node scripts/gen-code-registry.ts'); toolkitLib.postCompileTask.exec('node build-tools/bundle.mjs'); // Smoke test built JS files toolkitLib.postCompileTask.exec('node ./lib/index.js >/dev/null 2>/dev/null { switch (type) { case 'data_stdout': - await services.ioHost.notify(info(line, 'CDK_ASSEMBLY_I1001')); + await services.ioHost.notify(info(line, CODES.CDK_ASSEMBLY_I1001)); break; case 'data_stderr': - await services.ioHost.notify(error(line, 'CDK_ASSEMBLY_E1002')); + await services.ioHost.notify(error(line, CODES.CDK_ASSEMBLY_E1002)); break; } }, diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts index df36c116..3c35848f 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts @@ -1,4 +1,39 @@ -import { IoMessageCode } from '../io-message'; +import { IoMessageCode, IoMessageLevel } from '../io-message'; + +/** + * Information for each IO Message Code. + */ +export interface CodeInfo { + /** + * The message code. + */ + code: IoMessageCode; + + /** + * A brief description of the meaning of this IO Message. + */ + description: string; + + /** + * The message level + */ + level: IoMessageLevel; + + /** + * The name of the payload interface, if applicable. + * Some Io Messages include a payload, with a specific interface. The name of + * the interface is specified here so that it can be linked with the message + * when documentation is generated. + * + * The interface _must_ be exposed directly from toolkit-lib, so that it will + * have a documentation page generated (that can be linked to). + */ + interface?: string; +} + +function codeInfo(info: CodeInfo): CodeInfo { + return info; +} /** * We have a rough system by which we assign message codes: @@ -8,55 +43,162 @@ import { IoMessageCode } from '../io-message'; */ export const CODES = { // 1: Synth - CDK_TOOLKIT_I1000: 'Provides synthesis times', - CDK_TOOLKIT_I1901: 'Provides stack data', - CDK_TOOLKIT_I1902: 'Successfully deployed stacks', + CDK_TOOLKIT_I1000: codeInfo({ + code: 'CDK_TOOLKIT_I1000', + description: 'Provides synthesis times.', + level: 'info', + }), + CDK_TOOLKIT_I1901: codeInfo({ + code: 'CDK_TOOLKIT_I1901', + description: 'Provides stack data', + level: 'result', + interface: 'StackData', + }), + CDK_TOOLKIT_I1902: codeInfo({ + code: 'CDK_TOOLKIT_I1902', + description: 'Successfully deployed stacks', + level: 'result', + interface: 'AssemblyData', + }), // 2: List - CDK_TOOLKIT_I2901: 'Provides details on the selected stacks and their dependencies', + CDK_TOOLKIT_I2901: codeInfo({ + code: 'CDK_TOOLKIT_I2901', + description: 'Provides details on the selected stacks and their dependencies', + level: 'result', + }), // 3: Import & Migrate - CDK_TOOLKIT_E3900: 'Resource import failed', + CDK_TOOLKIT_E3900: codeInfo({ + code: 'CDK_TOOLKIT_E3900', + description: 'Resource import failed', + level: 'error', + }), // 4: Diff // 5: Deploy & Watch - CDK_TOOLKIT_I5000: 'Provides deployment times', - CDK_TOOLKIT_I5001: 'Provides total time in deploy action, including synth and rollback', - CDK_TOOLKIT_I5002: 'Provides time for resource migration', - CDK_TOOLKIT_I5031: 'Informs about any log groups that are traced as part of the deployment', - CDK_TOOLKIT_I5050: 'Confirm rollback during deployment', - CDK_TOOLKIT_I5060: 'Confirm deploy security sensitive changes', - CDK_TOOLKIT_I5900: 'Deployment results on success', + CDK_TOOLKIT_I5000: codeInfo({ + code: 'CDK_TOOLKIT_I5000', + description: 'Provides deployment times', + level: 'info', + }), + CDK_TOOLKIT_I5001: codeInfo({ + code: 'CDK_TOOLKIT_I5001', + description: 'Provides total time in deploy action, including synth and rollback', + level: 'info', + interface: 'Duration', + }), + CDK_TOOLKIT_I5002: codeInfo({ + code: 'CDK_TOOLKIT_I5002', + description: 'Provides time for resource migration', + level: 'info', + }), + CDK_TOOLKIT_I5031: codeInfo({ + code: 'CDK_TOOLKIT_I5031', + description: 'Informs about any log groups that are traced as part of the deployment', + level: 'info', + }), + CDK_TOOLKIT_I5050: codeInfo({ + code: 'CDK_TOOLKIT_I5050', + description: 'Confirm rollback during deployment', + level: 'info', + }), + CDK_TOOLKIT_I5060: codeInfo({ + code: 'CDK_TOOLKIT_I5060', + description: 'Confirm deploy security sensitive changes', + level: 'info', + }), + CDK_TOOLKIT_I5900: codeInfo({ + code: 'CDK_TOOLKIT_I5900', + description: 'Deployment results on success', + level: 'result', + interface: 'SuccessfulDeployStackResult', + }), - CDK_TOOLKIT_E5001: 'No stacks found', + CDK_TOOLKIT_E5001: codeInfo({ + code: 'CDK_TOOLKIT_E5001', + description: 'No stacks found', + level: 'error', + }), // 6: Rollback - CDK_TOOLKIT_I6000: 'Provides rollback times', + CDK_TOOLKIT_I6000: codeInfo({ + code: 'CDK_TOOLKIT_I6000', + description: 'Provides rollback times', + level: 'info', + }), - CDK_TOOLKIT_E6001: 'No stacks found', - CDK_TOOLKIT_E6900: 'Rollback failed', + CDK_TOOLKIT_E6001: codeInfo({ + code: 'CDK_TOOLKIT_E6001', + description: 'No stacks found', + level: 'error', + }), + CDK_TOOLKIT_E6900: codeInfo({ + code: 'CDK_TOOLKIT_E6900', + description: 'Rollback failed', + level: 'error', + }), // 7: Destroy - CDK_TOOLKIT_I7000: 'Provides destroy times', - CDK_TOOLKIT_I7010: 'Confirm destroy stacks', + CDK_TOOLKIT_I7000: codeInfo({ + code: 'CDK_TOOLKIT_I7000', + description: 'Provides destroy times', + level: 'info', + }), + CDK_TOOLKIT_I7010: codeInfo({ + code: 'CDK_TOOLKIT_I7010', + description: 'Confirm destroy stacks', + level: 'info', + }), - CDK_TOOLKIT_E7010: 'Action was aborted due to negative confirmation of request', - CDK_TOOLKIT_E7900: 'Stack deletion failed', + CDK_TOOLKIT_E7010: codeInfo({ + code: 'CDK_TOOLKIT_E7010', + description: 'Action was aborted due to negative confirmation of request', + level: 'error', + }), + CDK_TOOLKIT_E7900: codeInfo({ + code: 'CDK_TOOLKIT_E7900', + description: 'Stack deletion failed', + level: 'error', + }), // 9: Bootstrap // Assembly codes - CDK_ASSEMBLY_I0042: 'Writing updated context', - CDK_ASSEMBLY_I0241: 'Fetching missing context', - CDK_ASSEMBLY_I1000: 'Cloud assembly output starts', - CDK_ASSEMBLY_I1001: 'Output lines emitted by the cloud assembly to stdout', - CDK_ASSEMBLY_E1002: 'Output lines emitted by the cloud assembly to stderr', - CDK_ASSEMBLY_I1003: 'Cloud assembly output finished', - CDK_ASSEMBLY_E1111: 'Incompatible CDK CLI version. Upgrade needed.', + CDK_ASSEMBLY_I0042: codeInfo({ + code: 'CDK_ASSEMBLY_I0042', + description: 'Writing updated context', + level: 'debug', + }), + CDK_ASSEMBLY_I0241: codeInfo({ + code: 'CDK_ASSEMBLY_I0241', + description: 'Fetching missing context', + level: 'debug', + }), + CDK_ASSEMBLY_I1000: codeInfo({ + code: 'CDK_ASSEMBLY_I1000', + description: 'Cloud assembly output starts', + level: 'debug', + }), + CDK_ASSEMBLY_I1001: codeInfo({ + code: 'CDK_ASSEMBLY_I1001', + description: 'Output lines emitted by the cloud assembly to stdout', + level: 'info', + }), + CDK_ASSEMBLY_E1002: codeInfo({ + code: 'CDK_ASSEMBLY_E1002', + description: 'Output lines emitted by the cloud assembly to stderr', + level: 'error', + }), + CDK_ASSEMBLY_I1003: codeInfo({ + code: 'CDK_ASSEMBLY_I1003', + description: 'Cloud assembly output finished', + level: 'info', + }), + CDK_ASSEMBLY_E1111: codeInfo({ + code: 'CDK_ASSEMBLY_E1111', + description: 'Incompatible CDK CLI version. Upgrade needed.', + level: 'error', + }), }; - -// If we give CODES a type with key: IoMessageCode, -// this dynamically generated type will generalize to allow all IoMessageCodes. -// Instead, we will validate that VALID_CODE must be IoMessageCode with the '&'. -export type VALID_CODE = keyof typeof CODES & IoMessageCode; diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/messages.ts b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/messages.ts index 5c4d04cd..56aeac3b 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/messages.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/messages.ts @@ -1,6 +1,6 @@ import * as chalk from 'chalk'; -import type { IoMessageLevel } from '../io-message'; -import { type VALID_CODE } from './codes'; +import type { IoMessageCode, IoMessageLevel } from '../io-message'; +import { CodeInfo } from './codes'; import type { ActionLessMessage, ActionLessRequest, IoMessageCodeCategory, Optional, SimplifiedMessage } from './types'; /** @@ -8,11 +8,11 @@ import type { ActionLessMessage, ActionLessRequest, IoMessageCodeCategory, Optio * Handles string interpolation, format strings, and object parameter styles. * Applies optional styling and prepares the final message for logging. */ -export function formatMessage(msg: Optional, 'code'>, category: IoMessageCodeCategory = 'TOOLKIT'): ActionLessMessage { +function formatMessage(msg: Optional, 'code'>, category: IoMessageCodeCategory = 'TOOLKIT'): ActionLessMessage { return { time: new Date(), level: msg.level, - code: msg.code ?? defaultMessageCode(msg.level, category), + code: msg.code ?? defaultMessageCode(msg.level, category).code, message: msg.message, data: msg.data, }; @@ -22,18 +22,23 @@ export function formatMessage(msg: Optional, 'code'>, ca * Build a message code from level and category. The code must be valid for this function to pass. * Otherwise it returns a ToolkitError. */ -export function defaultMessageCode(level: IoMessageLevel, category: IoMessageCodeCategory = 'TOOLKIT'): VALID_CODE { +export function defaultMessageCode(level: IoMessageLevel, category: IoMessageCodeCategory = 'TOOLKIT'): CodeInfo { const levelIndicator = level === 'error' ? 'E' : level === 'warn' ? 'W' : 'I'; - return `CDK_${category}_${levelIndicator}0000` as VALID_CODE; + const code = `CDK_${category}_${levelIndicator}0000` as IoMessageCode; + return { + code, + description: `Generic ${level} message for CDK_${category}`, + level, + }; } /** * Requests a yes/no confirmation from the IoHost. */ export const confirm = ( - code: VALID_CODE, + code: CodeInfo, question: string, motivation: string, defaultResponse: boolean, @@ -49,14 +54,14 @@ export const confirm = ( }; /** - * Prompt for a a response from the IoHost. + * Prompt for a response from the IoHost. */ -export const prompt = (code: VALID_CODE, message: string, defaultResponse: U, payload?: T): ActionLessRequest => { +export const prompt = (code: CodeInfo, message: string, defaultResponse: U, payload?: T): ActionLessRequest => { return { defaultResponse, ...formatMessage({ - level: 'info', - code, + level: code.level, + code: code.code, message, data: payload, }), @@ -67,10 +72,10 @@ export const prompt = (code: VALID_CODE, message: string, defaultResponse: * Creates an error level message. * Errors must always have a unique code. */ -export const error = (message: string, code: VALID_CODE, payload?: T) => { +export const error = (message: string, code: CodeInfo, payload?: T) => { return formatMessage({ level: 'error', - code, + code: code.code, message, data: payload, }); @@ -83,10 +88,10 @@ export const error = (message: string, code: VALID_CODE, payload?: T) => { * However actions that operate on Cloud Assemblies might include a result per Stack. * Unlike other messages, results must always have a code and a payload. */ -export const result = (message: string, code: VALID_CODE, payload: T) => { +export const result = (message: string, code: CodeInfo, payload: T) => { return formatMessage({ level: 'result', - code, + code: code.code, message, data: payload, }); @@ -95,10 +100,10 @@ export const result = (message: string, code: VALID_CODE, payload: T) => { /** * Creates a warning level message. */ -export const warn = (message: string, code?: VALID_CODE, payload?: T) => { +export const warn = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'warn', - code, + code: code?.code, message, data: payload, }); @@ -107,10 +112,10 @@ export const warn = (message: string, code?: VALID_CODE, payload?: T) => { /** * Creates an info level message. */ -export const info = (message: string, code?: VALID_CODE, payload?: T) => { +export const info = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'info', - code, + code: code?.code, message, data: payload, }); @@ -119,10 +124,10 @@ export const info = (message: string, code?: VALID_CODE, payload?: T) => { /** * Creates a debug level message. */ -export const debug = (message: string, code?: VALID_CODE, payload?: T) => { +export const debug = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'debug', - code, + code: code?.code, message, data: payload, }); @@ -131,10 +136,10 @@ export const debug = (message: string, code?: VALID_CODE, payload?: T) => { /** * Creates a trace level message. */ -export const trace = (message: string, code?: VALID_CODE, payload?: T) => { +export const trace = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'trace', - code, + code: code?.code, message, data: payload, }); @@ -144,10 +149,10 @@ export const trace = (message: string, code?: VALID_CODE, payload?: T) => { * Creates an info level success message in green text. * @deprecated */ -export const success = (message: string, code?: VALID_CODE, payload?: T) => { +export const success = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'info', - code, + code: code?.code, message: chalk.green(message), data: payload, }); @@ -157,10 +162,10 @@ export const success = (message: string, code?: VALID_CODE, payload?: T) => { * Creates an info level message in bold text. * @deprecated */ -export const highlight = (message: string, code?: VALID_CODE, payload?: T) => { +export const highlight = (message: string, code?: CodeInfo, payload?: T) => { return formatMessage({ level: 'info', - code, + code: code?.code, message: chalk.bold(message), data: payload, }); diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/timer.ts b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/timer.ts index 2bfdafff..03ac403a 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/timer.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/timer.ts @@ -1,4 +1,4 @@ -import { VALID_CODE } from './codes'; +import { CodeInfo, CODES } from './codes'; import { info } from './messages'; import { ActionAwareIoHost } from './types'; import { formatTime } from '../../aws-cdk'; @@ -50,13 +50,13 @@ export class Timer { } function timerMessageProps(type: 'synth' | 'deploy' | 'rollback'| 'destroy'): { - code: VALID_CODE; + code: CodeInfo; text: string; } { switch (type) { - case 'synth': return { code: 'CDK_TOOLKIT_I1000', text: 'Synthesis' }; - case 'deploy': return { code: 'CDK_TOOLKIT_I5000', text: 'Deployment' }; - case 'rollback': return { code: 'CDK_TOOLKIT_I6000', text: 'Rollback' }; - case 'destroy': return { code: 'CDK_TOOLKIT_I7000', text: 'Destroy' }; + case 'synth': return { code: CODES.CDK_TOOLKIT_I1000, text: 'Synthesis' }; + case 'deploy': return { code: CODES.CDK_TOOLKIT_I5000, text: 'Deployment' }; + case 'rollback': return { code: CODES.CDK_TOOLKIT_I6000, text: 'Rollback' }; + case 'destroy': return { code: CODES.CDK_TOOLKIT_I7000, text: 'Destroy' }; } } diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/index.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/index.ts index 01ee9c2c..952bc9a3 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/toolkit/index.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/index.ts @@ -1 +1,2 @@ export * from './toolkit'; +export * from './types'; diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts index ddc9186f..d314eb70 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts @@ -4,6 +4,7 @@ import * as chalk from 'chalk'; import * as chokidar from 'chokidar'; import * as fs from 'fs-extra'; import { ToolkitServices } from './private'; +import { AssemblyData, StackAndAssemblyData } from './types'; import { AssetBuildTime, type DeployOptions, RequireApproval } from '../actions/deploy'; import { type ExtendedDeployOptions, buildParameterMap, createHotswapPropertyOverrides, removePublishedAssets } from '../actions/deploy/private'; import { type DestroyOptions } from '../actions/destroy'; @@ -19,7 +20,7 @@ import { ICloudAssemblySource, StackSelectionStrategy } from '../api/cloud-assem import { ALL_STACKS, CachedCloudAssemblySource, CloudAssemblySourceBuilder, IdentityCloudAssemblySource, StackAssembly } from '../api/cloud-assembly/private'; import { ToolkitError } from '../api/errors'; import { IIoHost, IoMessageCode, IoMessageLevel } from '../api/io'; -import { asSdkLogger, withAction, Timer, confirm, error, info, success, warn, ActionAwareIoHost, debug, result, withoutEmojis, withoutColor, withTrimmedWhitespace } from '../api/io/private'; +import { asSdkLogger, withAction, Timer, confirm, error, info, success, warn, ActionAwareIoHost, debug, result, withoutEmojis, withoutColor, withTrimmedWhitespace, CODES } from '../api/io/private'; /** * The current action being performed by the CLI. 'none' represents the absence of an action. @@ -167,7 +168,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab // if we have a single stack, print it to STDOUT const message = `Successfully synthesized to ${chalk.blue(path.resolve(stacks.assembly.directory))}`; - const assemblyData = { + const assemblyData: AssemblyData = { assemblyDirectory: stacks.assembly.directory, stacksCount: stacks.stackCount, stackIds: stacks.hierarchicalIds, @@ -177,7 +178,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const firstStack = stacks.firstStack!; const template = firstStack.template; const obscuredTemplate = obscureTemplate(template); - await ioHost.notify(result(message, 'CDK_TOOLKIT_I1901', { + await ioHost.notify(result(message, CODES.CDK_TOOLKIT_I1901, { ...assemblyData, stack: { stackName: firstStack.stackName, @@ -186,10 +187,10 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab stringifiedJson: serializeStructure(obscuredTemplate, true), stringifiedYaml: serializeStructure(obscuredTemplate, false), }, - })); + } as StackAndAssemblyData)); } else { // not outputting template to stdout, let's explain things to the user a little bit... - await ioHost.notify(result(chalk.green(message), 'CDK_TOOLKIT_I1902', assemblyData)); + await ioHost.notify(result(chalk.green(message), CODES.CDK_TOOLKIT_I1902, assemblyData)); await ioHost.notify(info(`Supply a stack id (${stacks.stackArtifacts.map((s) => chalk.green(s.hierarchicalId)).join(', ')}) to display its template.`)); } @@ -211,7 +212,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const stacks = stackCollection.withDependencies(); const message = stacks.map(s => s.id).join('\n'); - await ioHost.notify(result(message, 'CDK_TOOLKIT_I2901', { stacks })); + await ioHost.notify(result(message, CODES.CDK_TOOLKIT_I2901, { stacks })); return stacks; } @@ -236,7 +237,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const synthDuration = await synthTimer.endAs(ioHost, 'synth'); if (stackCollection.stackCount === 0) { - await ioHost.notify(error('This app contains no stacks', 'CDK_TOOLKIT_E5001')); + await ioHost.notify(error('This app contains no stacks', CODES.CDK_TOOLKIT_E5001)); return; } @@ -318,7 +319,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab if (diffRequiresApproval(currentTemplate, stack, requireApproval)) { const motivation = '"--require-approval" is enabled and stack includes security-sensitive updates.'; const question = `${motivation}\nDo you wish to deploy these changes`; - const confirmed = await ioHost.requestResponse(confirm('CDK_TOOLKIT_I5060', question, motivation, true, concurrency)); + const confirmed = await ioHost.requestResponse(confirm(CODES.CDK_TOOLKIT_I5060, question, motivation, true, concurrency)); if (!confirmed) { throw new ToolkitError('Aborted by user'); } @@ -397,7 +398,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab if (options.force) { await ioHost.notify(warn(`${motivation}. Rolling back first (--force).`)); } else { - const confirmed = await ioHost.requestResponse(confirm('CDK_TOOLKIT_I5050', question, motivation, true, concurrency)); + const confirmed = await ioHost.requestResponse(confirm(CODES.CDK_TOOLKIT_I5050, question, motivation, true, concurrency)); if (!confirmed) { throw new ToolkitError('Aborted by user'); } @@ -422,7 +423,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab if (options.force) { await ioHost.notify(warn(`${motivation}. Proceeding with regular deployment (--force).`)); } else { - const confirmed = await ioHost.requestResponse(confirm('CDK_TOOLKIT_I5050', question, motivation, true, concurrency)); + const confirmed = await ioHost.requestResponse(confirm(CODES.CDK_TOOLKIT_I5050, question, motivation, true, concurrency)); if (!confirmed) { throw new ToolkitError('Aborted by user'); } @@ -442,7 +443,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab ? ` ✅ ${stack.displayName} (no changes)` : ` ✅ ${stack.displayName}`; - await ioHost.notify(result(chalk.green('\n' + message), 'CDK_TOOLKIT_I5900', deployResult)); + await ioHost.notify(result(chalk.green('\n' + message), CODES.CDK_TOOLKIT_I5900, deployResult)); deployDuration = await deployTimer.endAs(ioHost, 'deploy'); if (Object.keys(deployResult.outputs).length > 0) { @@ -472,7 +473,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab foundLogGroupsResult.sdk, foundLogGroupsResult.logGroupNames, ); - await ioHost.notify(info(`The following log groups are added: ${foundLogGroupsResult.logGroupNames}`, 'CDK_TOOLKIT_I5031')); + await ioHost.notify(info(`The following log groups are added: ${foundLogGroupsResult.logGroupNames}`, CODES.CDK_TOOLKIT_I5031)); } // If an outputs file has been specified, create the file path and write stack outputs to it once. @@ -487,7 +488,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab } } const duration = synthDuration.asMs + (deployDuration?.asMs ?? 0); - await ioHost.notify(info(`\n✨ Total time: ${formatTime(duration)}s\n`, 'CDK_TOOLKIT_I5001', { duration })); + await ioHost.notify(info(`\n✨ Total time: ${formatTime(duration)}s\n`, CODES.CDK_TOOLKIT_I5001, { duration })); }; const assetBuildTime = options.assetBuildTime ?? AssetBuildTime.ALL_BEFORE_DEPLOY; @@ -646,7 +647,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab await synthTimer.endAs(ioHost, 'synth'); if (stacks.stackCount === 0) { - await ioHost.notify(error('No stacks selected', 'CDK_TOOLKIT_E6001')); + await ioHost.notify(error('No stacks selected', CODES.CDK_TOOLKIT_E6001)); return; } @@ -670,7 +671,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab } await rollbackTimer.endAs(ioHost, 'rollback'); } catch (e: any) { - await ioHost.notify(error(`\n ❌ ${chalk.bold(stack.displayName)} failed: ${formatErrorMessage(e)}`, 'CDK_TOOLKIT_E6900')); + await ioHost.notify(error(`\n ❌ ${chalk.bold(stack.displayName)} failed: ${formatErrorMessage(e)}`, CODES.CDK_TOOLKIT_E6900)); throw new ToolkitError('Rollback failed (use --force to orphan failing resources)'); } } @@ -701,9 +702,9 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const motivation = 'Destroying stacks is an irreversible action'; const question = `Are you sure you want to delete: ${chalk.red(stacks.hierarchicalIds.join(', '))}`; - const confirmed = await ioHost.requestResponse(confirm('CDK_TOOLKIT_I7010', question, motivation, true)); + const confirmed = await ioHost.requestResponse(confirm(CODES.CDK_TOOLKIT_I7010, question, motivation, true)); if (!confirmed) { - return ioHost.notify(error('Aborted by user', 'CDK_TOOLKIT_E7010')); + return ioHost.notify(error('Aborted by user', CODES.CDK_TOOLKIT_E7010)); } const destroyTimer = Timer.start(); @@ -720,7 +721,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab }); await ioHost.notify(success(`\n ✅ ${chalk.blue(stack.displayName)}: ${action}ed`)); } catch (e) { - await ioHost.notify(error(`\n ❌ ${chalk.blue(stack.displayName)}: ${action} failed ${e}`, 'CDK_TOOLKIT_E7900')); + await ioHost.notify(error(`\n ❌ ${chalk.blue(stack.displayName)}: ${action} failed ${e}`, CODES.CDK_TOOLKIT_E7900)); throw e; } } diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts new file mode 100644 index 00000000..73ebf35d --- /dev/null +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts @@ -0,0 +1,78 @@ +import { SuccessfulDeployStackResult as _SuccessfulDeployStackResult } from '../api/aws-cdk'; + +/** + * Assembly data returned in the payload of an IO Message. + */ +export interface AssemblyData { + /** + * The path to the assembly directory + */ + readonly assemblyDirectory: string; + + /** + * The number of stacks actioned on + */ + readonly stacksCount: number; + + /** + * The stack IDs + */ + readonly stackIds: string[]; +} + +/** + * A successful deploy stack result. Intentionally exposed in toolkit-lib so documentation + * can be generated from this interface. + */ +export interface SuccessfulDeployStackResult extends _SuccessfulDeployStackResult { +} + +/** + * Stack data returned in the payload of an IO Message. + */ +export interface StackData { + /** + * The stack name + */ + readonly stackName: string; + + /** + * The stack ID + */ + readonly hierarchicalId: string; + + /** + * The stack template + */ + readonly template: any; + + /** + * The stack template converted to JSON format + */ + readonly stringifiedJson: string; + + /** + * The stack template converted to YAML format + */ + readonly stringifiedYaml: string; +} + +/** + * Stack data returned in the payload of an IO Message. + */ +export interface StackAndAssemblyData extends AssemblyData { + /** + * Stack Data + */ + readonly stack: StackData; +} + +/** + * Duration information returned in the payload of an IO Message. + */ +export interface Duration { + /** + * The duration of the action. + */ + readonly duration: number; +} diff --git a/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts b/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts new file mode 100644 index 00000000..935efee8 --- /dev/null +++ b/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts @@ -0,0 +1,29 @@ +import * as fs from 'fs'; +import { CODES, CodeInfo } from '../lib/api/io/private/codes'; + +function codesToMarkdownTable(codes: Record, mdPrefix?: string, mdPostfix?: string) { + let table = '| Code | Description | Level | Data Interface |\n'; + table += '|------|-------------|-------|----------------|\n'; + + Object.entries(codes).forEach(([key, code]) => { + if (key !== code.code) { + throw new Error(`Code key ${key} does not match code.code ${code.code}. This is probably a typo.`); + } + table += `| ${code.code} | ${code.description} | ${code.level} | ${code.interface ? linkInterface(code.interface) : 'n/a'} |\n`; + }); + + const prefix = mdPrefix ? `${mdPrefix}\n\n` : ''; + const postfix = mdPostfix ? `\n\n${mdPostfix}\n` : ''; + + return prefix + table + postfix; +} + +function linkInterface(interfaceName: string) { + const docSite = 'docs/interfaces/'; + return `[${interfaceName}](${docSite}${interfaceName}.html)`; +} + +fs.writeFileSync('CODE_REGISTRY.md', codesToMarkdownTable( + CODES, + '## Toolkit Code Registry', +)); From 3b7115df801d96d9eac2ff25112ffc15fc596bdf Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Wed, 26 Feb 2025 04:17:00 -0500 Subject: [PATCH 15/30] chore: github issue templates (#153) Grrr, no projen support: https://github.com/projen/projen/issues/3567. I'm lazy so I just copied and pasted a few from the aws-cdk repo. This is somewhat necessary because it adds the `needs-triage` label automatically, that my other PR will need: https://github.com/aws/aws-cdk-cli/pull/118 --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/ISSUE_TEMPLATES/bug-report.yml | 144 ++++++++++++++++++++ .github/ISSUE_TEMPLATES/feature-request.yml | 59 ++++++++ .github/ISSUE_TEMPLATES/notice.yml | 58 ++++++++ 3 files changed, 261 insertions(+) create mode 100644 .github/ISSUE_TEMPLATES/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATES/feature-request.yml create mode 100644 .github/ISSUE_TEMPLATES/notice.yml diff --git a/.github/ISSUE_TEMPLATES/bug-report.yml b/.github/ISSUE_TEMPLATES/bug-report.yml new file mode 100644 index 00000000..7512a919 --- /dev/null +++ b/.github/ISSUE_TEMPLATES/bug-report.yml @@ -0,0 +1,144 @@ +--- +name: "🐛 Bug Report" +description: Report a bug +title: "(module name): (short issue description)" +labels: [bug, needs-triage] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + **⚠️ Please read this before filling out the form below:** + If the bug you are reporting is a security-related issue or a security vulnerability, + please report it via [Report a security vulnerability](https://github.com/aws/aws-cdk/security/advisories/new) instead of this template. + - type: textarea + id: description + attributes: + label: Describe the bug + description: What is the problem? A clear and concise description of the bug. + validations: + required: true + - type: checkboxes + id: regression + attributes: + label: Regression Issue + description: What is a regression? If it worked in a previous version but doesn’t in the latest version, it’s considered a regression. In this case, please provide specific version number in the report. + options: + - label: Select this option if this issue appears to be a regression. + required: false + - type: input + id: working-version + attributes: + label: Last Known Working CDK Version + description: Specify the last known CDK version where this code was functioning as expected (if applicable). + validations: + required: false + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: | + What did you expect to happen? + validations: + required: true + - type: textarea + id: current + attributes: + label: Current Behavior + description: | + What actually happened? + + Please include full errors, uncaught exceptions, stack traces, and relevant logs. + If service responses are relevant, please include wire logs. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + Provide a self-contained, concise snippet of code that can be used to reproduce the issue. + For more complex issues provide a repo with the smallest sample that reproduces the bug. + + Avoid including business logic or unrelated code, it makes diagnosis more difficult. + The code sample should be an SSCCE. See http://sscce.org/ for details. In short, please provide a code sample that we can copy/paste, run and reproduce. + validations: + required: true + - type: textarea + id: solution + attributes: + label: Possible Solution + description: | + Suggest a fix/reason for the bug + validations: + required: false + - type: textarea + id: context + attributes: + label: Additional Information/Context + description: | + Anything else that might be relevant for troubleshooting this bug. Providing context helps us come up with a solution that is most useful in the real world. + validations: + required: false + + - type: input + id: cdk-version + attributes: + label: CDK CLI Version + description: Output of `cdk version` + validations: + required: true + + - type: input + id: framework-version + attributes: + label: Framework Version + validations: + required: false + + - type: input + id: node-version + attributes: + label: Node.js Version + validations: + required: true + + - type: input + id: operating-system + attributes: + label: OS + validations: + required: true + + - type: dropdown + id: language + attributes: + label: Language + multiple: true + options: + - TypeScript + - Python + - .NET + - Java + - Go + validations: + required: true + + - type: input + id: language-version + attributes: + label: Language Version + description: E.g. TypeScript (3.8.3) | Java (8) | Python (3.7.3) + validations: + required: false + + - type: textarea + id: other + attributes: + label: Other information + description: | + e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. associated pull-request, stackoverflow, slack, etc + validations: + required: false diff --git a/.github/ISSUE_TEMPLATES/feature-request.yml b/.github/ISSUE_TEMPLATES/feature-request.yml new file mode 100644 index 00000000..3747a5aa --- /dev/null +++ b/.github/ISSUE_TEMPLATES/feature-request.yml @@ -0,0 +1,59 @@ +--- +name: 🚀 Feature Request +description: Suggest an idea for this project +title: "(module name): (short issue description)" +labels: [feature-request, needs-triage] +assignees: [] +body: + - type: textarea + id: description + attributes: + label: Describe the feature + description: A clear and concise description of the feature you are proposing. + validations: + required: true + - type: textarea + id: use-case + attributes: + label: Use Case + description: | + Why do you need this feature? For example: "I'm always frustrated when..." + validations: + required: true + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: | + Suggest how to implement the addition or change. Please include prototype/workaround/sketch/reference implementation. + validations: + required: false + - type: textarea + id: other + attributes: + label: Other Information + description: | + Any alternative solutions or features you considered, a more detailed explanation, stack traces, related issues, links for context, etc. + validations: + required: false + - type: checkboxes + id: ack + attributes: + label: Acknowledgements + options: + - label: I may be able to implement this feature request + required: false + - label: This feature might incur a breaking change + required: false + - type: input + id: sdk-version + attributes: + label: CDK version used + validations: + required: true + - type: input + id: environment + attributes: + label: Environment details (OS name and version, etc.) + validations: + required: true diff --git a/.github/ISSUE_TEMPLATES/notice.yml b/.github/ISSUE_TEMPLATES/notice.yml new file mode 100644 index 00000000..f90f63de --- /dev/null +++ b/.github/ISSUE_TEMPLATES/notice.yml @@ -0,0 +1,58 @@ +--- +name: "❗ Notice" +description: Post a notice for a high impact issue. Internal CDK team use only. +title: "❗ NOTICE (module name): (short notice description)" +labels: [needs-triage, management/tracking] +body: + - type: dropdown + attributes: + label: Status + description: What is the current status of this issue? + options: + - Investigating (Default) + - In-Progress + - Resolved + validations: + required: true + - type: textarea + attributes: + label: What is the issue? + description: A clear and concise description of the issue you want customers to be aware of + validations: + required: true + - type: textarea + attributes: + label: Error message + description: If available, paste the error message users are seeing (no need to backticks) + render: console + - type: textarea + attributes: + label: What is the impact? + description: | + What can occur if this issue isn't addressed? + validations: + required: true + - type: textarea + attributes: + label: Workaround + description: | + Please provide a detailed workaround outlining all steps required for implementation. If none exist yet, leave blank + - type: textarea + attributes: + label: Who is affected? + description: | + What segment of customers are affected? Think about specific construct usage, version, feature toggles, etc... + validations: + required: true + - type: textarea + attributes: + label: How do I resolve this? + description: | + What actions should customers take to resolve the issue. Also elaborate on any code changes the customer may need to do. If unknown yet, say TBD + validations: + required: true + - type: textarea + attributes: + label: Related issues + description: | + List all related issues here. If none related, leave blank From 88e2bdf7450a737140d2e5c88817774414fe32af Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Wed, 26 Feb 2025 11:46:18 +0000 Subject: [PATCH 16/30] chore: fix issue templates not working (#156) They were in the wrong path. See https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/bug-report.yml | 0 .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/feature-request.yml | 0 .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/notice.yml | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/bug-report.yml (100%) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/feature-request.yml (100%) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/notice.yml (100%) diff --git a/.github/ISSUE_TEMPLATES/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml similarity index 100% rename from .github/ISSUE_TEMPLATES/bug-report.yml rename to .github/ISSUE_TEMPLATE/bug-report.yml diff --git a/.github/ISSUE_TEMPLATES/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml similarity index 100% rename from .github/ISSUE_TEMPLATES/feature-request.yml rename to .github/ISSUE_TEMPLATE/feature-request.yml diff --git a/.github/ISSUE_TEMPLATES/notice.yml b/.github/ISSUE_TEMPLATE/notice.yml similarity index 100% rename from .github/ISSUE_TEMPLATES/notice.yml rename to .github/ISSUE_TEMPLATE/notice.yml From 130445d9521af976295e51b193c0d433311e87c0 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Wed, 26 Feb 2025 17:13:30 +0100 Subject: [PATCH 17/30] feat(cli): build your own `fromLookup()` imports with the new context provider for CloudControl API (#138) A generic Context Provider for CloudControl API. See https://github.com/aws/aws-cdk/pull/33258 for an example how to implement a `fromLookup()` method using the new context provider. (Extracted from https://github.com/aws/aws-cdk/pull/33258) --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions Co-authored-by: Momo Kornher --- .projenrc.ts | 2 + .../cli-lib-alpha/THIRD_PARTY_LICENSES | 206 ++++++++++++++++ .../@aws-cdk/toolkit-lib/.projen/deps.json | 5 + packages/@aws-cdk/toolkit-lib/package.json | 1 + packages/aws-cdk/.projen/deps.json | 5 + packages/aws-cdk/THIRD_PARTY_LICENSES | 206 ++++++++++++++++ packages/aws-cdk/lib/api/aws-auth/sdk.ts | 24 ++ .../lib/context-providers/cc-api-provider.ts | 127 ++++++++++ .../aws-cdk/lib/context-providers/index.ts | 2 + packages/aws-cdk/lib/util/json.ts | 64 +++++ packages/aws-cdk/package.json | 1 + .../aws-cdk/test/commands/migrate.test.ts | 2 + .../context-providers/cc-api-provider.test.ts | 227 ++++++++++++++++++ packages/aws-cdk/test/util/json.test.ts | 50 ++++ packages/aws-cdk/test/util/mock-sdk.ts | 3 + yarn.lock | 48 ++++ 16 files changed, 973 insertions(+) create mode 100644 packages/aws-cdk/lib/context-providers/cc-api-provider.ts create mode 100644 packages/aws-cdk/lib/util/json.ts create mode 100644 packages/aws-cdk/test/context-providers/cc-api-provider.test.ts create mode 100644 packages/aws-cdk/test/util/json.test.ts diff --git a/.projenrc.ts b/.projenrc.ts index 31f05466..c8c58c46 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -711,6 +711,7 @@ const cli = configureProject( `@aws-sdk/client-appsync@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-cloudformation@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-cloudwatch-logs@${CLI_SDK_V3_RANGE}`, + `@aws-sdk/client-cloudcontrol@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-codebuild@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-ec2@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-ecr@${CLI_SDK_V3_RANGE}`, @@ -1049,6 +1050,7 @@ const toolkitLib = configureProject( `@aws-sdk/client-appsync@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-cloudformation@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-cloudwatch-logs@${CLI_SDK_V3_RANGE}`, + `@aws-sdk/client-cloudcontrol@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-codebuild@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-ec2@${CLI_SDK_V3_RANGE}`, `@aws-sdk/client-ecr@${CLI_SDK_V3_RANGE}`, diff --git a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES index f0f8da5c..e51aef8a 100644 --- a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES +++ b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES @@ -822,6 +822,212 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l limitations under the License. +---------------- + +** @aws-sdk/client-cloudcontrol@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-cloudcontrol/v/3.741.0 | Apache-2.0 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ---------------- ** @aws-sdk/client-cloudformation@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-cloudformation/v/3.741.0 | Apache-2.0 diff --git a/packages/@aws-cdk/toolkit-lib/.projen/deps.json b/packages/@aws-cdk/toolkit-lib/.projen/deps.json index 4e5910d9..91cc3e33 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/deps.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/deps.json @@ -154,6 +154,11 @@ "version": "3.741", "type": "runtime" }, + { + "name": "@aws-sdk/client-cloudcontrol", + "version": "3.741", + "type": "runtime" + }, { "name": "@aws-sdk/client-cloudformation", "version": "3.741", diff --git a/packages/@aws-cdk/toolkit-lib/package.json b/packages/@aws-cdk/toolkit-lib/package.json index 0009969e..885e9203 100644 --- a/packages/@aws-cdk/toolkit-lib/package.json +++ b/packages/@aws-cdk/toolkit-lib/package.json @@ -71,6 +71,7 @@ "@aws-cdk/cx-api": "^2.180.0", "@aws-cdk/region-info": "^2.180.0", "@aws-sdk/client-appsync": "3.741", + "@aws-sdk/client-cloudcontrol": "3.741", "@aws-sdk/client-cloudformation": "3.741", "@aws-sdk/client-cloudwatch-logs": "3.741", "@aws-sdk/client-codebuild": "3.741", diff --git a/packages/aws-cdk/.projen/deps.json b/packages/aws-cdk/.projen/deps.json index 4730d65b..f904a0ce 100644 --- a/packages/aws-cdk/.projen/deps.json +++ b/packages/aws-cdk/.projen/deps.json @@ -228,6 +228,11 @@ "version": "3.741", "type": "runtime" }, + { + "name": "@aws-sdk/client-cloudcontrol", + "version": "3.741", + "type": "runtime" + }, { "name": "@aws-sdk/client-cloudformation", "version": "3.741", diff --git a/packages/aws-cdk/THIRD_PARTY_LICENSES b/packages/aws-cdk/THIRD_PARTY_LICENSES index 478003ae..05288a4e 100644 --- a/packages/aws-cdk/THIRD_PARTY_LICENSES +++ b/packages/aws-cdk/THIRD_PARTY_LICENSES @@ -822,6 +822,212 @@ The aws-cdk package includes the following third-party software/licensing: limitations under the License. +---------------- + +** @aws-sdk/client-cloudcontrol@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-cloudcontrol/v/3.741.0 | Apache-2.0 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ---------------- ** @aws-sdk/client-cloudformation@3.741.0 - https://www.npmjs.com/package/@aws-sdk/client-cloudformation/v/3.741.0 | Apache-2.0 diff --git a/packages/aws-cdk/lib/api/aws-auth/sdk.ts b/packages/aws-cdk/lib/api/aws-auth/sdk.ts index 5c6c3302..3ede58e6 100644 --- a/packages/aws-cdk/lib/api/aws-auth/sdk.ts +++ b/packages/aws-cdk/lib/api/aws-auth/sdk.ts @@ -19,6 +19,15 @@ import { type UpdateResolverCommandInput, type UpdateResolverCommandOutput, } from '@aws-sdk/client-appsync'; +import { + CloudControlClient, + GetResourceCommand, + GetResourceCommandInput, + GetResourceCommandOutput, + ListResourcesCommand, + ListResourcesCommandInput, + ListResourcesCommandOutput, +} from '@aws-sdk/client-cloudcontrol'; import { CloudFormationClient, ContinueUpdateRollbackCommand, @@ -371,6 +380,11 @@ export interface IAppSyncClient { listFunctions(input: ListFunctionsCommandInput): Promise; } +export interface ICloudControlClient{ + listResources(input: ListResourcesCommandInput): Promise; + getResource(input: GetResourceCommandInput): Promise; +} + export interface ICloudFormationClient { continueUpdateRollback(input: ContinueUpdateRollbackCommandInput): Promise; createChangeSet(input: CreateChangeSetCommandInput): Promise; @@ -603,6 +617,16 @@ export class SDK { }; } + public cloudControl(): ICloudControlClient { + const client = new CloudControlClient(this.config); + return { + listResources: (input: ListResourcesCommandInput): Promise => + client.send(new ListResourcesCommand(input)), + getResource: (input: GetResourceCommandInput): Promise => + client.send(new GetResourceCommand(input)), + }; + } + public cloudFormation(): ICloudFormationClient { const client = new CloudFormationClient({ ...this.config, diff --git a/packages/aws-cdk/lib/context-providers/cc-api-provider.ts b/packages/aws-cdk/lib/context-providers/cc-api-provider.ts new file mode 100644 index 00000000..38486d3b --- /dev/null +++ b/packages/aws-cdk/lib/context-providers/cc-api-provider.ts @@ -0,0 +1,127 @@ +import type { CcApiContextQuery } from '@aws-cdk/cloud-assembly-schema'; +import { ICloudControlClient } from '../api'; +import { type SdkProvider, initContextProviderSdk } from '../api/aws-auth/sdk-provider'; +import { ContextProviderPlugin } from '../api/plugin'; +import { ContextProviderError } from '../toolkit/error'; +import { findJsonValue, getResultObj } from '../util/json'; + +export class CcApiContextProviderPlugin implements ContextProviderPlugin { + constructor(private readonly aws: SdkProvider) { + } + + /** + * This returns a data object with the value from CloudControl API result. + * args.typeName - see https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/supported-resources.html + * args.exactIdentifier - use CC API getResource. + * args.propertyMatch - use CCP API listResources to get resources and propertyMatch to search through the list. + * args.propertiesToReturn - Properties from CC API to return. + */ + public async getValue(args: CcApiContextQuery) { + const cloudControl = (await initContextProviderSdk(this.aws, args)).cloudControl(); + + const result = await this.findResources(cloudControl, args); + return result; + } + + private async findResources(cc: ICloudControlClient, args: CcApiContextQuery): Promise<{[key: string]: any} []> { + if (args.exactIdentifier && args.propertyMatch) { + throw new ContextProviderError(`Specify either exactIdentifier or propertyMatch, but not both. Failed to find resources using CC API for type ${args.typeName}.`); + } + if (!args.exactIdentifier && !args.propertyMatch) { + throw new ContextProviderError(`Neither exactIdentifier nor propertyMatch is specified. Failed to find resources using CC API for type ${args.typeName}.`); + } + + if (args.exactIdentifier) { + // use getResource to get the exact indentifier + return this.getResource(cc, args.typeName, args.exactIdentifier, args.propertiesToReturn); + } else { + // use listResource + return this.listResources(cc, args.typeName, args.propertyMatch!, args.propertiesToReturn); + } + } + + /** + * Calls getResource from CC API to get the resource. + * See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/get-resource.html + * + * If the exactIdentifier is not found, then an empty map is returned. + * If the resource is found, then a map of the identifier to a map of property values is returned. + */ + private async getResource( + cc: ICloudControlClient, + typeName: string, + exactIdentifier: string, + propertiesToReturn: string[], + ): Promise<{[key: string]: any}[]> { + const resultObjs: {[key: string]: any}[] = []; + try { + const result = await cc.getResource({ + TypeName: typeName, + Identifier: exactIdentifier, + }); + const id = result.ResourceDescription?.Identifier ?? ''; + if (id !== '') { + const propsObject = JSON.parse(result.ResourceDescription?.Properties ?? ''); + const propsObj = getResultObj(propsObject, result.ResourceDescription?.Identifier!, propertiesToReturn); + resultObjs.push(propsObj); + } else { + throw new ContextProviderError(`Could not get resource ${exactIdentifier}.`); + } + } catch (err) { + throw new ContextProviderError(`Encountered CC API error while getting resource ${exactIdentifier}. Error: ${err}`); + } + return resultObjs; + } + + /** + * Calls listResources from CC API to get the resources and apply args.propertyMatch to find the resources. + * See https://docs.aws.amazon.com/cli/latest/reference/cloudcontrol/list-resources.html + * + * Since exactIdentifier is not specified, propertyMatch must be specified. + * This returns an object where the ids are object keys and values are objects with keys of args.propertiesToReturn. + */ + private async listResources( + cc: ICloudControlClient, + typeName: string, + propertyMatch: Record, + propertiesToReturn: string[], + ): Promise<{[key: string]: any}[]> { + const resultObjs: {[key: string]: any}[] = []; + + try { + const result = await cc.listResources({ + TypeName: typeName, + }); + result.ResourceDescriptions?.forEach((resource) => { + const id = resource.Identifier ?? ''; + if (id !== '') { + const propsObject = JSON.parse(resource.Properties ?? ''); + + const filters = Object.entries(propertyMatch); + let match = false; + if (filters) { + match = filters.every((record, _index, _arr) => { + const key = record[0]; + const expected = record[1]; + const actual = findJsonValue(propsObject, key); + return propertyMatchesFilter(actual, expected); + }); + + function propertyMatchesFilter(actual: any, expected: unknown) { + // For now we just check for strict equality, but we can implement pattern matching and fuzzy matching here later + return expected === actual; + } + } + + if (match) { + const propsObj = getResultObj(propsObject, resource.Identifier!, propertiesToReturn); + resultObjs.push(propsObj); + } + } + }); + } catch (err) { + throw new ContextProviderError(`Could not get resources ${propertyMatch}. Error: ${err}`); + } + return resultObjs; + } +} diff --git a/packages/aws-cdk/lib/context-providers/index.ts b/packages/aws-cdk/lib/context-providers/index.ts index ed5ae723..4f377676 100644 --- a/packages/aws-cdk/lib/context-providers/index.ts +++ b/packages/aws-cdk/lib/context-providers/index.ts @@ -2,6 +2,7 @@ import * as cxschema from '@aws-cdk/cloud-assembly-schema'; import * as cxapi from '@aws-cdk/cx-api'; import { AmiContextProviderPlugin } from './ami'; import { AZContextProviderPlugin } from './availability-zones'; +import { CcApiContextProviderPlugin } from './cc-api-provider'; import { EndpointServiceAZContextProviderPlugin } from './endpoint-service-availability-zones'; import { HostedZoneContextProviderPlugin } from './hosted-zones'; import { KeyContextProviderPlugin } from './keys'; @@ -118,4 +119,5 @@ const availableContextProviders: ProviderMap = { [cxschema.ContextProvider.LOAD_BALANCER_PROVIDER]: (s) => new LoadBalancerContextProviderPlugin(s), [cxschema.ContextProvider.LOAD_BALANCER_LISTENER_PROVIDER]: (s) => new LoadBalancerListenerContextProviderPlugin(s), [cxschema.ContextProvider.KEY_PROVIDER]: (s) => new KeyContextProviderPlugin(s), + [cxschema.ContextProvider.CC_API_PROVIDER]: (s) => new CcApiContextProviderPlugin(s), }; diff --git a/packages/aws-cdk/lib/util/json.ts b/packages/aws-cdk/lib/util/json.ts new file mode 100644 index 00000000..76f1c25b --- /dev/null +++ b/packages/aws-cdk/lib/util/json.ts @@ -0,0 +1,64 @@ +/** + * This gets the values of the jsonObject at the paths specified in propertiesToReturn. + * + * For example, jsonObject = { + * key1: 'abc', + * key2: { + * foo: 'qwerty', + * bar: 'data', + * } + * } + * + * propertiesToReturn = ['key1', 'key2.foo']; + * + * The returned object is: + * + * ``` + * { + * key1: 'abc', + * 'key2.foo': 'qwerty', + * Identifier: identifier + * } + * ``` + */ +export function getResultObj(jsonObject: any, identifier: string, propertiesToReturn: string[]): {[key: string]: any} { + const propsObj = {}; + propertiesToReturn.forEach((propName) => { + Object.assign(propsObj, { [propName]: findJsonValue(jsonObject, propName) }); + }); + Object.assign(propsObj, { ['Identifier']: identifier }); + return propsObj; +} + +/** + * This finds the value of the jsonObject at the path. Path is delimited by '.'. + * + * For example, jsonObject = { + * key1: 'abc', + * key2: { + * foo: 'qwerty', + * bar: 'data', + * } + * } + * + * If path is 'key1', then it will return 'abc'. + * If path is 'key2.foo', then it will return 'qwerty'. + * If path is 'key2', then it will return the object: + * { + * foo: 'qwerty', + * bar: 'data', + * } + * + * If the path is not found, an Error will be thrown stating which token is missing. + */ +export function findJsonValue(jsonObject: any, path: string): any { + const paths = path.split('.'); + let obj = jsonObject; + paths.forEach(p => { + obj = obj[p]; + if (obj === undefined) { + throw new TypeError(`Cannot read field ${path}. ${p} is not found.`); + } + }); + return obj; +} diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index f744c4b2..367494fb 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -90,6 +90,7 @@ "@aws-cdk/cx-api": "^2.180.0", "@aws-cdk/region-info": "^2.180.0", "@aws-sdk/client-appsync": "3.741", + "@aws-sdk/client-cloudcontrol": "3.741", "@aws-sdk/client-cloudformation": "3.741", "@aws-sdk/client-cloudwatch-logs": "3.741", "@aws-sdk/client-codebuild": "3.741", diff --git a/packages/aws-cdk/test/commands/migrate.test.ts b/packages/aws-cdk/test/commands/migrate.test.ts index 071cd2b3..3cff68a9 100644 --- a/packages/aws-cdk/test/commands/migrate.test.ts +++ b/packages/aws-cdk/test/commands/migrate.test.ts @@ -31,6 +31,8 @@ import { } from '../../lib/commands/migrate'; import { MockSdkProvider, mockCloudFormationClient, restoreSdkMocksToDefault } from '../util/mock-sdk'; +jest.setTimeout(120_000); + const exec = promisify(_exec); describe('Migrate Function Tests', () => { diff --git a/packages/aws-cdk/test/context-providers/cc-api-provider.test.ts b/packages/aws-cdk/test/context-providers/cc-api-provider.test.ts new file mode 100644 index 00000000..9f66b512 --- /dev/null +++ b/packages/aws-cdk/test/context-providers/cc-api-provider.test.ts @@ -0,0 +1,227 @@ +import { GetResourceCommand, ListResourcesCommand } from '@aws-sdk/client-cloudcontrol'; +import { CcApiContextProviderPlugin } from '../../lib/context-providers/cc-api-provider'; +import { mockCloudControlClient, MockSdkProvider, restoreSdkMocksToDefault } from '../util/mock-sdk'; + +let provider: CcApiContextProviderPlugin; + +beforeEach(() => { + provider = new CcApiContextProviderPlugin(new MockSdkProvider()); + restoreSdkMocksToDefault(); +}); + +/* eslint-disable */ +test('looks up RDS instance using CC API getResource', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).resolves({ + TypeName: 'AWS::RDS::DBInstance', + ResourceDescription: { + Identifier: 'my-db-instance-1', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-1","StorageEncrypted":"true"}', + }, + }); + + // WHEN + const results = await provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'my-db-instance-1', + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }); + + // THEN + const propsObj = results[0]; + expect(propsObj).toEqual(expect.objectContaining({ + DBInstanceArn: 'arn:aws:rds:us-east-1:123456789012:db:test-instance-1', + StorageEncrypted: 'true', + Identifier: 'my-db-instance-1', + })); +}); + +// In theory, this should never happen. We ask for my-db-instance-1 but CC API returns ''. +// Included this to test the code path. +test('looks up RDS instance using CC API getResource - wrong match', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).resolves({ + TypeName: 'AWS::RDS::DBInstance', + ResourceDescription: { + Identifier: '', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-1","StorageEncrypted":"true"}', + }, + }); + + await expect( + // WHEN + provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'my-db-instance-1', + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }), + ).rejects.toThrow('Encountered CC API error while getting resource my-db-instance-1.'); // THEN +}); + +test('looks up RDS instance using CC API getResource - empty response', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).resolves({ + }); + + await expect( + // WHEN + provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'bad-identifier', + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }), + ).rejects.toThrow('Encountered CC API error while getting resource bad-identifier.'); // THEN +}); + +test('looks up RDS instance using CC API getResource - error in CC API', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).rejects('No data found'); + + await expect( + // WHEN + provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'bad-identifier', + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }), + ).rejects.toThrow('Encountered CC API error while getting resource bad-identifier.'); // THEN +}); + +test('looks up RDS instance using CC API listResources', async () => { + // GIVEN + mockCloudControlClient.on(ListResourcesCommand).resolves({ + ResourceDescriptions: [ + { + Identifier: 'my-db-instance-1', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-1","StorageEncrypted":"true","Endpoint":{"Address":"address1.amazonaws.com","Port":"5432"}}', + }, + { + Identifier: 'my-db-instance-2', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-2","StorageEncrypted":"false","Endpoint":{"Address":"address2.amazonaws.com","Port":"5432"}}', + }, + { + Identifier: 'my-db-instance-3', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-3","StorageEncrypted":"true","Endpoint":{"Address":"address3.amazonaws.com","Port":"6000"}}', + }, + ], + }); + + // WHEN + const results = await provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + propertyMatch: { + StorageEncrypted: 'true', + }, + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted', 'Endpoint.Port'], + }); + + // THEN + let propsObj = results[0]; + expect(propsObj).toEqual(expect.objectContaining({ + DBInstanceArn: 'arn:aws:rds:us-east-1:123456789012:db:test-instance-1', + StorageEncrypted: 'true', + 'Endpoint.Port': '5432', + Identifier: 'my-db-instance-1', + })); + + propsObj = results[1]; + expect(propsObj).toEqual(expect.objectContaining({ + DBInstanceArn: 'arn:aws:rds:us-east-1:123456789012:db:test-instance-3', + StorageEncrypted: 'true', + 'Endpoint.Port': '6000', + Identifier: 'my-db-instance-3', + })); + + expect(results.length).toEqual(2); +}); + +test('looks up RDS instance using CC API listResources - nested prop', async () => { + // GIVEN + mockCloudControlClient.on(ListResourcesCommand).resolves({ + ResourceDescriptions: [ + { + Identifier: 'my-db-instance-1', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-1","StorageEncrypted":"true","Endpoint":{"Address":"address1.amazonaws.com","Port":"5432"}}', + }, + { + Identifier: 'my-db-instance-2', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-2","StorageEncrypted":"false","Endpoint":{"Address":"address2.amazonaws.com","Port":"5432"}}', + }, + { + Identifier: 'my-db-instance-3', + Properties: '{"DBInstanceArn":"arn:aws:rds:us-east-1:123456789012:db:test-instance-3","StorageEncrypted":"true","Endpoint":{"Address":"address3.amazonaws.com","Port":"6000"}}', + }, + ], + }); + + // WHEN + const results = await provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + propertyMatch: { + 'StorageEncrypted': 'true', + 'Endpoint.Port': '5432', + }, + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted', 'Endpoint.Port'], + }); + + // THEN + let propsObj = results[0]; + expect(propsObj).toEqual(expect.objectContaining({ + DBInstanceArn: 'arn:aws:rds:us-east-1:123456789012:db:test-instance-1', + StorageEncrypted: 'true', + 'Endpoint.Port': '5432', + Identifier: 'my-db-instance-1', + })); + + expect(results.length).toEqual(1); +}); + +test('error by specifying both exactIdentifier and propertyMatch', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).resolves({ + }); + + await expect( + // WHEN + provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'bad-identifier', + propertyMatch: { + 'StorageEncrypted': 'true', + 'Endpoint.Port': '5432', + }, + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }), + ).rejects.toThrow('Specify either exactIdentifier or propertyMatch, but not both. Failed to find resources using CC API for type AWS::RDS::DBInstance.'); // THEN +}); + +test('error by specifying neither exactIdentifier or propertyMatch', async () => { + // GIVEN + mockCloudControlClient.on(GetResourceCommand).resolves({ + }); + + await expect( + // WHEN + provider.getValue({ + account: '123456789012', + region: 'us-east-1', + typeName: 'AWS::RDS::DBInstance', + propertiesToReturn: ['DBInstanceArn', 'StorageEncrypted'], + }), + ).rejects.toThrow('Neither exactIdentifier nor propertyMatch is specified. Failed to find resources using CC API for type AWS::RDS::DBInstance.'); // THEN +}); +/* eslint-enable */ diff --git a/packages/aws-cdk/test/util/json.test.ts b/packages/aws-cdk/test/util/json.test.ts new file mode 100644 index 00000000..21d600a7 --- /dev/null +++ b/packages/aws-cdk/test/util/json.test.ts @@ -0,0 +1,50 @@ +import { findJsonValue, getResultObj } from '../../lib/util/json'; + +const jsonObj = { + DBInstanceArn: 'arn:aws:rds:us-east-1:123456789012:db:test-instance-1', + StorageEncrypted: 'true', + Endpoint: { + Address: 'address1.amazonaws.com', + Port: '5432', + }, +}; + +test('findJsonValue for paths', async () => { + expect(findJsonValue(jsonObj, 'DBInstanceArn')).toEqual('arn:aws:rds:us-east-1:123456789012:db:test-instance-1'); + expect(findJsonValue(jsonObj, 'Endpoint.Address')).toEqual('address1.amazonaws.com'); + + const answer = { + Address: 'address1.amazonaws.com', + Port: '5432', + }; + expect(findJsonValue(jsonObj, 'Endpoint')).toEqual(answer); +}); + +test('findJsonValue for nonexisting paths', async () => { + expect(() => findJsonValue(jsonObj, 'Blah')).toThrow('Cannot read field Blah. Blah is not found.'); + + expect(() => findJsonValue(jsonObj, 'Endpoint.Blah')).toThrow('Cannot read field Endpoint.Blah. Blah is not found.'); + + expect(() => findJsonValue(jsonObj, 'Endpoint.Address.Blah')).toThrow('Cannot read field Endpoint.Address.Blah. Blah is not found.'); +}); + +test('getResultObj returns correct objects', async () => { + const propertiesToReturn = ['DBInstanceArn', 'Endpoint.Port', 'Endpoint']; + + const result = getResultObj(jsonObj, '12345', propertiesToReturn); + expect(result.DBInstanceArn).toEqual('arn:aws:rds:us-east-1:123456789012:db:test-instance-1'); + expect(result['Endpoint.Port']).toEqual('5432'); + expect(result.Identifier).toEqual('12345'); + + const answer = { + Address: 'address1.amazonaws.com', + Port: '5432', + }; + expect(result.Endpoint).toEqual(answer); +}); + +test('getResultObj throws error for missing property', async () => { + const propertiesToReturn = ['DBInstanceArn', 'NoSuchProp']; + + expect(() => getResultObj(jsonObj, '12345', propertiesToReturn)).toThrow('Cannot read field NoSuchProp. NoSuchProp is not found.'); +}); diff --git a/packages/aws-cdk/test/util/mock-sdk.ts b/packages/aws-cdk/test/util/mock-sdk.ts index 04dca429..9666a6e0 100644 --- a/packages/aws-cdk/test/util/mock-sdk.ts +++ b/packages/aws-cdk/test/util/mock-sdk.ts @@ -1,6 +1,7 @@ import 'aws-sdk-client-mock-jest'; import { Environment } from '@aws-cdk/cx-api'; import { AppSyncClient } from '@aws-sdk/client-appsync'; +import { CloudControlClient } from '@aws-sdk/client-cloudcontrol'; import { CloudFormationClient, Stack, StackStatus } from '@aws-sdk/client-cloudformation'; import { CloudWatchLogsClient } from '@aws-sdk/client-cloudwatch-logs'; import { CodeBuildClient } from '@aws-sdk/client-codebuild'; @@ -34,6 +35,7 @@ export const FAKE_CREDENTIAL_CHAIN = createCredentialChain(() => Promise.resolve // Default implementations export const mockAppSyncClient = mockClient(AppSyncClient); +export const mockCloudControlClient = mockClient(CloudControlClient); export const mockCloudFormationClient = mockClient(CloudFormationClient); export const mockCloudWatchClient = mockClient(CloudWatchLogsClient); export const mockCodeBuildClient = mockClient(CodeBuildClient); @@ -64,6 +66,7 @@ export const restoreSdkMocksToDefault = () => { applyToAllMocks('reset'); mockAppSyncClient.onAnyCommand().resolves({}); + mockCloudControlClient.onAnyCommand().resolves({}); mockCloudFormationClient.onAnyCommand().resolves({}); mockCloudWatchClient.onAnyCommand().resolves({}); mockCodeBuildClient.onAnyCommand().resolves({}); diff --git a/yarn.lock b/yarn.lock index cda6e179..3cef79fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -187,6 +187,54 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" +"@aws-sdk/client-cloudcontrol@3.741": + version "3.741.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudcontrol/-/client-cloudcontrol-3.741.0.tgz#20c6f91ac99c44c8d3ad3aff6315a8484593c2cf" + integrity sha512-naskjecQk44T3LzJ9FITbpwkN9QDKy97V49ponbVB89PlBHWgj6gjAL5seuu445tKir9drrHVkIO29icsA9yKw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.734.0" + "@aws-sdk/credential-provider-node" "3.741.0" + "@aws-sdk/middleware-host-header" "3.734.0" + "@aws-sdk/middleware-logger" "3.734.0" + "@aws-sdk/middleware-recursion-detection" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/region-config-resolver" "3.734.0" + "@aws-sdk/types" "3.734.0" + "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-user-agent-browser" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.734.0" + "@smithy/config-resolver" "^4.0.1" + "@smithy/core" "^3.1.1" + "@smithy/fetch-http-handler" "^5.0.1" + "@smithy/hash-node" "^4.0.1" + "@smithy/invalid-dependency" "^4.0.1" + "@smithy/middleware-content-length" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.2" + "@smithy/middleware-retry" "^4.0.3" + "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-stack" "^4.0.1" + "@smithy/node-config-provider" "^4.0.1" + "@smithy/node-http-handler" "^4.0.2" + "@smithy/protocol-http" "^5.0.1" + "@smithy/smithy-client" "^4.1.2" + "@smithy/types" "^4.1.0" + "@smithy/url-parser" "^4.0.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.3" + "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-endpoints" "^3.0.1" + "@smithy/util-middleware" "^4.0.1" + "@smithy/util-retry" "^4.0.1" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.2" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-cloudformation@3.741": version "3.741.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudformation/-/client-cloudformation-3.741.0.tgz#38ce1a13c41203256b0b0bfce43f229e645ee746" From 9873ff2a55a997f5ca03d0983f4f6a6789a35935 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Wed, 26 Feb 2025 18:10:01 +0100 Subject: [PATCH 18/30] chore: add idToken permissions for OIDC authentication (#125) The release steps don't work without these permissions. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license Co-authored-by: Momo Kornher --- .github/workflows/release.yml | 2 ++ projenrc/adc-publishing.ts | 1 + projenrc/record-publishing-timestamp.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dd45848a..b64886f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -986,6 +986,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write environment: releasing if: ${{ needs.release.outputs.latest_commit == github.sha }} steps: @@ -1018,6 +1019,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write environment: releasing if: ${{ needs.release.outputs.latest_commit == github.sha }} steps: diff --git a/projenrc/adc-publishing.ts b/projenrc/adc-publishing.ts index 3b8de404..d9914734 100644 --- a/projenrc/adc-publishing.ts +++ b/projenrc/adc-publishing.ts @@ -35,6 +35,7 @@ export class AdcPublishing extends Component { runsOn: ['ubuntu-latest'], permissions: { contents: JobPermission.WRITE, + idToken: JobPermission.WRITE, }, if: '${{ needs.release.outputs.latest_commit == github.sha }}', steps: [ diff --git a/projenrc/record-publishing-timestamp.ts b/projenrc/record-publishing-timestamp.ts index 3c92c103..6b10a774 100644 --- a/projenrc/record-publishing-timestamp.ts +++ b/projenrc/record-publishing-timestamp.ts @@ -25,6 +25,7 @@ export class RecordPublishingTimestamp extends Component { runsOn: ['ubuntu-latest'], permissions: { contents: JobPermission.WRITE, + idToken: JobPermission.WRITE, }, if: '${{ needs.release.outputs.latest_commit == github.sha }}', steps: [ From f9e65cb0fb5ba0fc5718406dc5dab943750e86b8 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Thu, 27 Feb 2025 03:52:34 +0000 Subject: [PATCH 19/30] chore(toolkit-lib): role duration and session tags don't work (#162) Fixes another few issues with various publishing jobs: - Role chaining doesn't actually work with a [session duration over one hour.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#:~:text=However%2C%20if%20you%20assume%20a%20role%20using%20role%20chaining%20and%20provide%20a%20DurationSeconds%20parameter%20value%20greater%20than%20one%20hour%2C%20the%20operation%20fails.) - Also I realized none of these job actually take that long. This was a copy-and-paste fail from the integ-tests (which do take longer). So let's go back to a shorter duration for these jobs - Use different session names for all jobs - Consistently use `mask-aws-account-id` everywhere. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/workflows/release.yml | 15 ++++++--------- projenrc/adc-publishing.ts | 3 +-- projenrc/record-publishing-timestamp.ts | 4 +--- projenrc/s3-docs-publishing.ts | 8 ++++---- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b64886f9..498cfd3b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1003,9 +1003,8 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 - role-duration-seconds: 14400 role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} - role-session-name: releasing@aws-cdk-cli + role-session-name: standalone-release@aws-cdk-cli output-credentials: true mask-aws-account-id: true - name: Publish artifacts @@ -1036,10 +1035,8 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 - role-duration-seconds: 14400 role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} - role-session-name: releasing@aws-cdk-cli - output-credentials: true + role-session-name: publish-timestamps@aws-cdk-cli mask-aws-account-id: true - name: Publish artifacts run: |- @@ -1064,17 +1061,17 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 - role-duration-seconds: 14400 role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} - role-session-name: releasing@aws-cdk-cli + role-session-name: s3-docs-publishing@aws-cdk-cli + mask-aws-account-id: true - name: Assume the publishing role id: publishing-creds uses: aws-actions/configure-aws-credentials@v4 with: aws-region: us-east-1 - role-duration-seconds: 14400 role-to-assume: ${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }} - role-session-name: s3publishing@aws-cdk-cli + role-session-name: s3-docs-publishing@aws-cdk-cli + mask-aws-account-id: true role-chaining: true - name: Publish docs env: diff --git a/projenrc/adc-publishing.ts b/projenrc/adc-publishing.ts index d9914734..9949941e 100644 --- a/projenrc/adc-publishing.ts +++ b/projenrc/adc-publishing.ts @@ -59,9 +59,8 @@ export class AdcPublishing extends Component { uses: 'aws-actions/configure-aws-credentials@v4', with: { 'aws-region': 'us-east-1', - 'role-duration-seconds': 14400, 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', - 'role-session-name': 'releasing@aws-cdk-cli', + 'role-session-name': 'standalone-release@aws-cdk-cli', 'output-credentials': true, 'mask-aws-account-id': true, }, diff --git a/projenrc/record-publishing-timestamp.ts b/projenrc/record-publishing-timestamp.ts index 6b10a774..28f9d075 100644 --- a/projenrc/record-publishing-timestamp.ts +++ b/projenrc/record-publishing-timestamp.ts @@ -48,10 +48,8 @@ export class RecordPublishingTimestamp extends Component { uses: 'aws-actions/configure-aws-credentials@v4', with: { 'aws-region': 'us-east-1', - 'role-duration-seconds': 14400, 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', - 'role-session-name': 'releasing@aws-cdk-cli', - 'output-credentials': true, + 'role-session-name': 'publish-timestamps@aws-cdk-cli', 'mask-aws-account-id': true, }, }, diff --git a/projenrc/s3-docs-publishing.ts b/projenrc/s3-docs-publishing.ts index d6755bbb..f8c23846 100644 --- a/projenrc/s3-docs-publishing.ts +++ b/projenrc/s3-docs-publishing.ts @@ -71,9 +71,9 @@ export class S3DocsPublishing extends Component { uses: 'aws-actions/configure-aws-credentials@v4', with: { 'aws-region': 'us-east-1', - 'role-duration-seconds': 14400, 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', - 'role-session-name': 'releasing@aws-cdk-cli', + 'role-session-name': 's3-docs-publishing@aws-cdk-cli', + 'mask-aws-account-id': true, }, }, { @@ -82,9 +82,9 @@ export class S3DocsPublishing extends Component { uses: 'aws-actions/configure-aws-credentials@v4', with: { 'aws-region': 'us-east-1', - 'role-duration-seconds': 14400, 'role-to-assume': this.props.roleToAssume, - 'role-session-name': 's3publishing@aws-cdk-cli', + 'role-session-name': 's3-docs-publishing@aws-cdk-cli', + 'mask-aws-account-id': true, 'role-chaining': true, }, }, From 04ac50c8940c5a8f4e2d107f6480c7cd07544795 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 27 Feb 2025 03:32:15 -0500 Subject: [PATCH 20/30] docs(toolkit-lib): code registry links to public doc page (#161) and `IoMessage` doc page links to code registry --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md | 8 ++++---- packages/@aws-cdk/toolkit-lib/lib/api/io/io-message.ts | 2 +- .../@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md b/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md index c5c65d2c..220144b0 100644 --- a/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md +++ b/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md @@ -3,17 +3,17 @@ | Code | Description | Level | Data Interface | |------|-------------|-------|----------------| | CDK_TOOLKIT_I1000 | Provides synthesis times. | info | n/a | -| CDK_TOOLKIT_I1901 | Provides stack data | result | [StackData](docs/interfaces/StackData.html) | -| CDK_TOOLKIT_I1902 | Successfully deployed stacks | result | [AssemblyData](docs/interfaces/AssemblyData.html) | +| CDK_TOOLKIT_I1901 | Provides stack data | result | [StackData](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/StackData.html) | +| CDK_TOOLKIT_I1902 | Successfully deployed stacks | result | [AssemblyData](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/AssemblyData.html) | | CDK_TOOLKIT_I2901 | Provides details on the selected stacks and their dependencies | result | n/a | | CDK_TOOLKIT_E3900 | Resource import failed | error | n/a | | CDK_TOOLKIT_I5000 | Provides deployment times | info | n/a | -| CDK_TOOLKIT_I5001 | Provides total time in deploy action, including synth and rollback | info | [Duration](docs/interfaces/Duration.html) | +| CDK_TOOLKIT_I5001 | Provides total time in deploy action, including synth and rollback | info | [Duration](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/Duration.html) | | CDK_TOOLKIT_I5002 | Provides time for resource migration | info | n/a | | CDK_TOOLKIT_I5031 | Informs about any log groups that are traced as part of the deployment | info | n/a | | CDK_TOOLKIT_I5050 | Confirm rollback during deployment | info | n/a | | CDK_TOOLKIT_I5060 | Confirm deploy security sensitive changes | info | n/a | -| CDK_TOOLKIT_I5900 | Deployment results on success | result | [SuccessfulDeployStackResult](docs/interfaces/SuccessfulDeployStackResult.html) | +| CDK_TOOLKIT_I5900 | Deployment results on success | result | [SuccessfulDeployStackResult](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/SuccessfulDeployStackResult.html) | | CDK_TOOLKIT_E5001 | No stacks found | error | n/a | | CDK_TOOLKIT_I6000 | Provides rollback times | info | n/a | | CDK_TOOLKIT_E6001 | No stacks found | error | n/a | diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/io/io-message.ts b/packages/@aws-cdk/toolkit-lib/lib/api/io/io-message.ts index fcfef497..b4d70939 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/io/io-message.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/io/io-message.ts @@ -7,7 +7,7 @@ import { ToolkitAction } from '../../toolkit'; export type IoMessageLevel = 'error'| 'result' | 'warn' | 'info' | 'debug' | 'trace'; /** - * A valid message code + * A valid message code. See https://github.com/aws/aws-cdk-cli/blob/main/packages/%40aws-cdk/toolkit-lib/CODE_REGISTRY.md */ export type IoMessageCode = `CDK_${string}_${'E' | 'W' | 'I'}${number}${number}${number}${number}`; diff --git a/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts b/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts index 935efee8..c461fc62 100644 --- a/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts +++ b/packages/@aws-cdk/toolkit-lib/scripts/gen-code-registry.ts @@ -19,7 +19,7 @@ function codesToMarkdownTable(codes: Record, mdPrefix?: string } function linkInterface(interfaceName: string) { - const docSite = 'docs/interfaces/'; + const docSite = 'https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/'; return `[${interfaceName}](${docSite}${interfaceName}.html)`; } From ce77923bd19814d698563e7ea9e7537262d3cff5 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 27 Feb 2025 03:34:14 -0500 Subject: [PATCH 21/30] chore: add git-secrets-scan to repository (#122) Will also need to be added to aws-cdk-cli-testing i believe. `git-secrets-scan.sh` is copied directly from the old repo; i didn't want to also change it to a typescript file. it runs now before `npx projen build`. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- .gitallowed | 42 ++++++++++++++++++++++++++++++++++++ .gitignore | 1 + .projen/tasks.json | 11 ++++++++++ .projenrc.ts | 15 ++++++++++++- package.json | 1 + projenrc/git-secrets-scan.sh | 30 ++++++++++++++++++++++++++ 6 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 .gitallowed create mode 100644 projenrc/git-secrets-scan.sh diff --git a/.gitallowed b/.gitallowed new file mode 100644 index 00000000..1ba82386 --- /dev/null +++ b/.gitallowed @@ -0,0 +1,42 @@ +# The only AWS account number allowed to be used in tests (used by git-secrets) +account = '123456789012'; +# account used for cross-environment tests in addition to the one above +account: '234567890123' +# Account patterns used in the README +account: '000000000000' +account: '111111111111' +account: '222222222222' +account: '333333333333' + +# used in physical names tests in @aws-cdk/core +account: '012345678912' +account: '012345678913' + +# Account patterns used in the CHANGELOG +account: '123456789012' + +111111111111 +222222222222 +123456789012 +333333333333 + +# The account ID's of public facing ECR images for App Mesh Envoy +# https://docs.aws.amazon.com/app-mesh/latest/userguide/envoy.html +account: '772975370895' +account: '856666278305' +account: '840364872350' +account: '422531588944' +account: '924023996002' +account: '919366029133' #cn-north-1 +account: '919830735681' #cn-northwest-1 +account: '909464085924' #ap-southeast-3 +account: '564877687649' #il-central-1 + +# The account IDs of password rotation applications of Serverless Application Repository +# https://docs.aws.amazon.com/secretsmanager/latest/userguide/enable-rotation-rds.html +# partition aws +account: '297356227824' +# partition aws-cn +account: '193023089310' +# partition aws-us-gov +account: '023102451235' diff --git a/.gitignore b/.gitignore index 5b69bb86..2ecaf4ae 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ jspm_packages/ .yarn-integrity .cache .DS_Store +.tools !/.github/workflows/build.yml !/.github/workflows/upgrade.yml !/.github/pull_request_template.md diff --git a/.projen/tasks.json b/.projen/tasks.json index cd8caa4d..50040601 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -12,6 +12,9 @@ { "spawn": "eslint" }, + { + "spawn": "git-secrets-scan" + }, { "exec": "tsx projenrc/build-standalone-zip.task.ts" }, @@ -83,6 +86,14 @@ } ] }, + "git-secrets-scan": { + "name": "git-secrets-scan", + "steps": [ + { + "exec": "/bin/bash ./projenrc/git-secrets-scan.sh" + } + ] + }, "install": { "name": "install", "description": "Install project dependencies and update lockfile (non-frozen)", diff --git a/.projenrc.ts b/.projenrc.ts index c8c58c46..55a37808 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -183,7 +183,7 @@ const repoProject = new yarn.Monorepo({ workflowNodeVersion: 'lts/*', workflowRunsOn, - gitignore: ['.DS_Store'], + gitignore: ['.DS_Store', '.tools'], autoApproveUpgrades: true, autoApproveOptions: { @@ -215,6 +215,7 @@ const repoProject = new yarn.Monorepo({ }, }, }, + buildWorkflowOptions: { preBuildSteps: [ // Need this for the init tests @@ -241,11 +242,23 @@ repoProject.eslint = new pj.javascript.Eslint(repoProject, { fileExtensions: ['.ts', '.tsx'], lintProjenRc: false, }); + // always lint projen files as part of the build if (repoProject.eslint?.eslintTask) { repoProject.tasks.tryFind('build')?.spawn(repoProject.eslint?.eslintTask); } +// always scan for git secrets before building +const gitSecretsScan = repoProject.addTask('git-secrets-scan', { + steps: [ + { + exec: '/bin/bash ./projenrc/git-secrets-scan.sh', + }, + ], +}); + +repoProject.tasks.tryFind('build')!.spawn(gitSecretsScan); + new AdcPublishing(repoProject); const repo = configureProject(repoProject); diff --git a/package.json b/package.json index 64337051..8f7df4a3 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "compile": "npx projen compile", "default": "npx projen default", "eslint": "npx projen eslint", + "git-secrets-scan": "npx projen git-secrets-scan", "package": "npx projen package", "post-upgrade": "npx projen post-upgrade", "release": "npx projen release", diff --git a/projenrc/git-secrets-scan.sh b/projenrc/git-secrets-scan.sh new file mode 100644 index 00000000..95c2425a --- /dev/null +++ b/projenrc/git-secrets-scan.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -euo pipefail + +mkdir -p .tools +[[ ! -d .tools/git-secrets ]] && { + echo "=============================================================================================" + echo "Downloading git-secrets..." + (cd .tools && git clone --depth 1 https://github.com/awslabs/git-secrets.git) +} + +# As the name implies, git-secrets heavily depends on git: +# +# a) the config is stored and fetched using 'git config'. +# b) the search is performed using 'git grep' (other search methods don't work +# properly, see https://github.com/awslabs/git-secrets/issues/66) +# +# When we run in a CodeBuild build, we don't have a git repo, unfortunately. So +# when that's the case, 'git init' one on the spot, add all files to it (which +# because of the .gitignore will exclude dependencies and generated files) and +# then call 'git-secrets' as usual. +git rev-parse --git-dir > /dev/null 2>&1 || { + git init --quiet + git add -A . +} + +# AWS config needs to be added to this repository's config +.tools/git-secrets/git-secrets --register-aws + +.tools/git-secrets/git-secrets --scan +echo "git-secrets scan ok" From 47beb66ff701748a75f0dd83e945e72064c0ab30 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Thu, 27 Feb 2025 10:28:59 +0100 Subject: [PATCH 22/30] chore: add checkout step for ADC publishing (#164) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This tries to run a script from the source repo, so it should checkout the source otherwise the script isn't going to be there 😭. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/workflows/release.yml | 2 ++ projenrc/adc-publishing.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 498cfd3b..e01c7fdb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -990,6 +990,8 @@ jobs: environment: releasing if: ${{ needs.release.outputs.latest_commit == github.sha }} steps: + - name: Checkout + uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: lts/* diff --git a/projenrc/adc-publishing.ts b/projenrc/adc-publishing.ts index 9949941e..d8be4047 100644 --- a/projenrc/adc-publishing.ts +++ b/projenrc/adc-publishing.ts @@ -39,6 +39,7 @@ export class AdcPublishing extends Component { }, if: '${{ needs.release.outputs.latest_commit == github.sha }}', steps: [ + github.WorkflowSteps.checkout(), { uses: 'actions/setup-node@v4', with: { From 5b3afbef8b0859dcdad0ab579dec0ce0dd15b723 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 27 Feb 2025 05:44:51 -0500 Subject: [PATCH 23/30] docs(cli): unstable flag documentation (#159) document `--unstable` flag outside of `cdk gc`, since it is a global option available to additional use cases. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license Co-authored-by: Rico Hermans --- packages/aws-cdk/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/aws-cdk/README.md b/packages/aws-cdk/README.md index d9ab0750..0a580ed6 100644 --- a/packages/aws-cdk/README.md +++ b/packages/aws-cdk/README.md @@ -39,6 +39,21 @@ The AWS CDK Toolkit provides the `cdk` command-line interface that can be used t This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. +## Global Options + +### `unstable` + +The `--unstable` flag indicates that the scope and API of a feature might still change. +Otherwise the feature is generally production ready and fully supported. For example, +`cdk gc` is gated behind an `--unstable` flag: + +```bash +cdk gc --unstable=gc +``` + +The command will fail if `--unstable=gc` is not passed in, which acknowledges that the user +is aware of the caveats in place for the feature. + ## Commands ### `cdk docs` From f92555104c8bd54b0654999e5e5fb61ffceba1d2 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Thu, 27 Feb 2025 13:52:37 +0100 Subject: [PATCH 24/30] feat(cli): control library init version with a command-line parameter (#149) Allows controlling of the `cdk init` version of `aws-cdk-lib`: ``` cdk init --lib-version=1.2.3 ``` Mainly intended to be used by tests (to smoke-test that upcoming library versions still `init` properly), but it can be used by users as well. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- packages/aws-cdk/lib/cli/cli-config.ts | 1 + packages/aws-cdk/lib/cli/cli.ts | 1 + .../aws-cdk/lib/cli/convert-to-user-input.ts | 2 ++ .../lib/cli/parse-command-line-arguments.ts | 6 ++++++ packages/aws-cdk/lib/cli/user-input.ts | 9 ++++++++ packages/aws-cdk/lib/init.ts | 21 ++++++++++++++----- packages/aws-cdk/test/init.test.ts | 13 ++++++++++++ 7 files changed, 48 insertions(+), 5 deletions(-) diff --git a/packages/aws-cdk/lib/cli/cli-config.ts b/packages/aws-cdk/lib/cli/cli-config.ts index de9cf0f4..11ef8dc6 100644 --- a/packages/aws-cdk/lib/cli/cli-config.ts +++ b/packages/aws-cdk/lib/cli/cli-config.ts @@ -345,6 +345,7 @@ export async function makeConfig(): Promise { 'language': { type: 'string', alias: 'l', desc: 'The language to be used for the new project (default can be configured in ~/.cdk.json)', choices: await availableInitLanguages() }, 'list': { type: 'boolean', desc: 'List the available templates' }, 'generate-only': { type: 'boolean', default: false, desc: 'If true, only generates project files, without executing additional operations such as setting up a git repo, installing dependencies or compiling the project' }, + 'lib-version': { type: 'string', alias: 'V', default: undefined, desc: 'The version of the CDK library (aws-cdk-lib) to initialize the project with. Defaults to the version that was current when this CLI was built.' }, }, }, migrate: { diff --git a/packages/aws-cdk/lib/cli/cli.ts b/packages/aws-cdk/lib/cli/cli.ts index 98bc9a2a..019045ec 100644 --- a/packages/aws-cdk/lib/cli/cli.ts +++ b/packages/aws-cdk/lib/cli/cli.ts @@ -480,6 +480,7 @@ export async function exec(args: string[], synthesizer?: Synthesizer): Promise): any { default: false, type: 'boolean', desc: 'If true, only generates project files, without executing additional operations such as setting up a git repo, installing dependencies or compiling the project', + }) + .option('lib-version', { + default: undefined, + type: 'string', + alias: 'V', + desc: 'The version of the CDK library (aws-cdk-lib) to initialize the project with. Defaults to the version that was current when this CLI was built.', }), ) .command('migrate', 'Migrate existing AWS resources into a CDK app', (yargs: Argv) => diff --git a/packages/aws-cdk/lib/cli/user-input.ts b/packages/aws-cdk/lib/cli/user-input.ts index dc5f80b5..5d292a9b 100644 --- a/packages/aws-cdk/lib/cli/user-input.ts +++ b/packages/aws-cdk/lib/cli/user-input.ts @@ -1182,6 +1182,15 @@ export interface InitOptions { */ readonly generateOnly?: boolean; + /** + * The version of the CDK library (aws-cdk-lib) to initialize the project with. Defaults to the version that was current when this CLI was built. + * + * aliases: V + * + * @default - undefined + */ + readonly libVersion?: string; + /** * Positional argument for init */ diff --git a/packages/aws-cdk/lib/init.ts b/packages/aws-cdk/lib/init.ts index ab3e3a5d..59577bc4 100644 --- a/packages/aws-cdk/lib/init.ts +++ b/packages/aws-cdk/lib/init.ts @@ -24,6 +24,11 @@ export interface CliInitOptions { readonly workDir?: string; readonly stackName?: string; readonly migrate?: boolean; + + /** + * Override the built-in CDK version + */ + readonly libVersion?: string; } /** @@ -64,6 +69,7 @@ export async function cliInit(options: CliInitOptions) { workDir, options.stackName, options.migrate, + options.libVersion, ); } @@ -116,7 +122,7 @@ export class InitTemplate { * @param language the language to instantiate this template with * @param targetDirectory the directory where the template is to be instantiated into */ - public async install(language: string, targetDirectory: string, stackName?: string) { + public async install(language: string, targetDirectory: string, stackName?: string, libVersion?: string) { if (this.languages.indexOf(language) === -1) { error( `The ${chalk.blue(language)} language is not supported for ${chalk.green(this.name)} ` + @@ -131,6 +137,10 @@ export class InitTemplate { versions: await loadInitVersions(), }; + if (libVersion) { + projectInfo.versions['aws-cdk-lib'] = libVersion; + } + const sourceDirectory = path.join(this.basePath, language); await this.installFiles(sourceDirectory, targetDirectory, language, projectInfo); @@ -323,10 +333,11 @@ async function initializeProject( workDir: string, stackName?: string, migrate?: boolean, + cdkVersion?: string, ) { await assertIsEmptyDirectory(workDir); info(`Applying project template ${chalk.green(template.name)} for ${chalk.blue(language)}`); - await template.install(language, workDir, stackName); + await template.install(language, workDir, stackName, cdkVersion); if (migrate) { await template.addMigrateContext(workDir); } @@ -490,8 +501,8 @@ interface Versions { * This has been built into the CLI at build time. */ async function loadInitVersions(): Promise { - const recommendedFlagsFile = path.join(__dirname, './init-templates/.init-version.json'); - const contents = JSON.parse(await fs.readFile(recommendedFlagsFile, { encoding: 'utf-8' })); + const initVersionFile = path.join(__dirname, './init-templates/.init-version.json'); + const contents = JSON.parse(await fs.readFile(initVersionFile, { encoding: 'utf-8' })); const ret = { 'aws-cdk-lib': contents['aws-cdk-lib'], @@ -501,7 +512,7 @@ async function loadInitVersions(): Promise { for (const [key, value] of Object.entries(ret)) { /* istanbul ignore next */ if (!value) { - throw new ToolkitError(`Missing init version from ${recommendedFlagsFile}: ${key}`); + throw new ToolkitError(`Missing init version from ${initVersionFile}: ${key}`); } } diff --git a/packages/aws-cdk/test/init.test.ts b/packages/aws-cdk/test/init.test.ts index 505f641d..fb21e3c1 100644 --- a/packages/aws-cdk/test/init.test.ts +++ b/packages/aws-cdk/test/init.test.ts @@ -17,6 +17,19 @@ describe('constructs version', () => { expect(await fs.pathExists(path.join(workDir, 'lib'))).toBeTruthy(); }); + cliTest('can override requested version with environment variable', async (workDir) => { + await cliInit({ + type: 'lib', + language: 'typescript', + workDir, + libVersion: '2.100', + }); + + // Check that package.json and lib/ got created in the current directory + const pj = JSON.parse(await fs.readFile(path.join(workDir, 'package.json'), 'utf-8')); + expect(Object.entries(pj.devDependencies)).toContainEqual(['aws-cdk-lib', '2.100']); + }); + cliTest('asking for a nonexistent template fails', async (workDir) => { await expect(cliInit({ type: 'banana', From bf338292739835b5f9766982ccc8474caf69bcee Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Thu, 27 Feb 2025 14:45:19 +0000 Subject: [PATCH 25/30] fix(cli): change-set arn is not printed on `cdk deploy --no-execute` (#166) Fixes: https://github.com/aws/aws-cdk-cli/issues/160 Fixes three message statements that did not get send to the IoHost. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- packages/aws-cdk/lib/api/deployments/deploy-stack.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk/lib/api/deployments/deploy-stack.ts b/packages/aws-cdk/lib/api/deployments/deploy-stack.ts index 2d7e81a1..696fb9eb 100644 --- a/packages/aws-cdk/lib/api/deployments/deploy-stack.ts +++ b/packages/aws-cdk/lib/api/deployments/deploy-stack.ts @@ -426,9 +426,9 @@ class FullCloudFormationDeployment { await this.updateTerminationProtection(); if (changeSetHasNoChanges(changeSetDescription)) { - debug(this.action, format('No changes are to be performed on %s.', this.stackName)); + await this.ioHost.notify(debug(this.action, format('No changes are to be performed on %s.', this.stackName))); if (execute) { - debug(this.action, format('Deleting empty change set %s', changeSetDescription.ChangeSetId)); + await this.ioHost.notify(debug(this.action, format('Deleting empty change set %s', changeSetDescription.ChangeSetId))); await this.cfn.deleteChangeSet({ StackName: this.stackName, ChangeSetName: changeSetName, @@ -457,10 +457,10 @@ class FullCloudFormationDeployment { } if (!execute) { - info(this.action, format( + await this.ioHost.notify(info(this.action, format( 'Changeset %s created and waiting in review for manual execution (--no-execute)', changeSetDescription.ChangeSetId, - )); + ))); return { type: 'did-deploy-stack', noOp: false, From 97d02a886f7ae872d28f23501cdba548501e1314 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:07:59 -0500 Subject: [PATCH 26/30] chore: issue labeler workflow (#118) Attempting to copy and projenify this workflow: https://github.com/aws/aws-cdk/blob/main/.github/workflows/issue-label-assign.yml --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --------- Signed-off-by: github-actions Co-authored-by: github-actions --- .gitattributes | 1 + .github/workflows/issue-label-assign.yml | 49 ++++++++++ .gitignore | 1 + .projen/files.json | 1 + .projenrc.ts | 3 + projenrc/issue-labeler.ts | 114 +++++++++++++++++++++++ 6 files changed, 169 insertions(+) create mode 100644 .github/workflows/issue-label-assign.yml create mode 100644 projenrc/issue-labeler.ts diff --git a/.gitattributes b/.gitattributes index 743cd7bf..8851706b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,6 +11,7 @@ /.github/workflows/build.yml linguist-generated /.github/workflows/codecov.yml linguist-generated /.github/workflows/integ.yml linguist-generated +/.github/workflows/issue-label-assign.yml linguist-generated /.github/workflows/pull-request-lint.yml linguist-generated /.github/workflows/release.yml linguist-generated /.github/workflows/upgrade.yml linguist-generated diff --git a/.github/workflows/issue-label-assign.yml b/.github/workflows/issue-label-assign.yml new file mode 100644 index 00000000..4268d20b --- /dev/null +++ b/.github/workflows/issue-label-assign.yml @@ -0,0 +1,49 @@ +# ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen". + +name: issue-label-assign +on: + pull_request_target: + types: + - opened + issues: + types: + - opened + - edited +jobs: + Triage Issues: + name: Triage Manager + runs-on: aws-cdk_ubuntu-latest_4-core + permissions: + issues: write + pull-requests: write + env: + AREA_PARAMS: '[{"area":"@aws-cdk/cli-lib-alpha","keywords":["cli","cli-lib","cli-lib-alpha"],"labels":["@aws-cdk/cli-lib-alpha"]},{"area":"@aws-cdk/cloud-assembly-schema","keywords":["cloud-assembly","schema"],"labels":["@aws-cdk/cloud-assembly-schema"]},{"area":"@aws-cdk/cloudformation-diff","keywords":["diff","cloudformation"],"labels":["@aws-cdk/cloudformation-diff"]},{"area":"@aws-cdk/toolkit-lib","keywords":["toolkit","programmtic toolkit","toolkit-lib"],"labels":["@aws-cdk/toolkit-lib"]},{"area":"aws-cdk","keywords":["aws-cdk","cli","cdk cli"],"labels":["aws-cdk"]},{"area":"cdk-assets","keywords":["assets","cdk-assets"],"labels":["cdk-assets"]}]' + AREA_AFFIXES: '{"prefixes":["@aws-cdk/"]}' + OSDS_DEVS: '{"assignees":["ashishdhingra","khushail","hunhsieh"]}' + steps: + - name: Triage Manager + uses: aws-github-ops/aws-issue-triage-manager@main + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + target: issues + excluded-expressions: "[CDK CLI Version|TypeScript|Java|Python|Go]" + included-labels: "[needs-triage]" + excluded-labels: "[p1|p2|p0|effort-small|effort-medium|effort-large|guidance]" + default-area: ${{ env.OSDS_DEVS }} + parameters: ${{ env.AREA_PARAMS }} + affixes: ${{ env.AREA_AFFIXES }} + Triage Pull Requests: + name: Triage Manager + runs-on: aws-cdk_ubuntu-latest_4-core + permissions: + issues: write + pull-requests: write + steps: + - name: Triage Manager + uses: aws-github-ops/aws-issue-triage-manager@main + with: + github-token: ${{ secrets.PROJEN_GITHUB_TOKEN }} + target: pull-requests + default-area: '{"reviewers":{"teamReviewers":["aws-cdk-owners"]}}' + parameters: '[{"area":"pullrequests","keywords":["pullrequestkeyword"]}]' + area-is-keyword: true diff --git a/.gitignore b/.gitignore index 2ecaf4ae..b9c3303a 100644 --- a/.gitignore +++ b/.gitignore @@ -49,5 +49,6 @@ jspm_packages/ !/.github/dependabot.yml !/.github/workflows/integ.yml !/.github/workflows/codecov.yml +!/.github/workflows/issue-label-assign.yml !/.projenrc.ts !/.github/workflows/release.yml diff --git a/.projen/files.json b/.projen/files.json index 3d48f956..ed7690bd 100644 --- a/.projen/files.json +++ b/.projen/files.json @@ -9,6 +9,7 @@ ".github/workflows/build.yml", ".github/workflows/codecov.yml", ".github/workflows/integ.yml", + ".github/workflows/issue-label-assign.yml", ".github/workflows/pull-request-lint.yml", ".github/workflows/release.yml", ".github/workflows/upgrade.yml", diff --git a/.projenrc.ts b/.projenrc.ts index 55a37808..9ddf8156 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -6,6 +6,7 @@ import { AdcPublishing } from './projenrc/adc-publishing'; import { BundleCli } from './projenrc/bundle'; import { CodeCovWorkflow } from './projenrc/codecov'; import { ESLINT_RULES } from './projenrc/eslint'; +import { IssueLabeler } from './projenrc/issue-labeler'; import { JsiiBuild } from './projenrc/jsii'; import { RecordPublishingTimestamp } from './projenrc/record-publishing-timestamp'; import { S3DocsPublishing } from './projenrc/s3-docs-publishing'; @@ -1352,4 +1353,6 @@ new CodeCovWorkflow(repo, { packages: [cli.name], }); +new IssueLabeler(repo); + repo.synth(); diff --git a/projenrc/issue-labeler.ts b/projenrc/issue-labeler.ts new file mode 100644 index 00000000..66e8616d --- /dev/null +++ b/projenrc/issue-labeler.ts @@ -0,0 +1,114 @@ +import { Component, github } from 'projen'; +import { JobPermission } from 'projen/lib/github/workflows-model'; +import { TypeScriptProject } from 'projen/lib/typescript'; + +const OSDS_DEVS = ['ashishdhingra', 'khushail', 'hunhsieh']; +const AREA_AFFIXES = ['@aws-cdk/']; +const AREA_PARAMS = [ + { area: '@aws-cdk/cli-lib-alpha', keywords: ['cli', 'cli-lib', 'cli-lib-alpha'], labels: ['@aws-cdk/cli-lib-alpha'] }, + { area: '@aws-cdk/cloud-assembly-schema', keywords: ['cloud-assembly', 'schema'], labels: ['@aws-cdk/cloud-assembly-schema'] }, + { area: '@aws-cdk/cloudformation-diff', keywords: ['diff', 'cloudformation'], labels: ['@aws-cdk/cloudformation-diff'] }, + { area: '@aws-cdk/toolkit-lib', keywords: ['toolkit', 'programmtic toolkit', 'toolkit-lib'], labels: ['@aws-cdk/toolkit-lib'] }, + { area: 'aws-cdk', keywords: ['aws-cdk', 'cli', 'cdk cli'], labels: ['aws-cdk'] }, + { area: 'cdk-assets', keywords: ['assets', 'cdk-assets'], labels: ['cdk-assets'] }, +]; + +enum GitHubToken { + GITHUB_TOKEN = 'secrets.GITHUB_TOKEN', + PROJEN_GITHUB_TOKEN = 'secrets.PROJEN_GITHUB_TOKEN', +} + +/** + * See https://github.com/aws-github-ops/aws-issue-triage-manager + */ +interface TriageManagerOptions { + target: 'pull-requests' | 'issues' | 'both'; + excludedExpressions?: string[]; + includedLabels?: string[]; + excludedLabels?: string[]; + defaultArea?: string; + parameters?: string; + affixes?: string; + areaIsKeyword?: boolean; + /** + * Whether or not the env variables are needed for the job. + * Workflow-level env variables are not configurable via Projen + */ + needEnvs?: boolean; + /** + * @default GitHubToken.GITHUB_TOKEN + */ + githubToken?: GitHubToken; +} + +function stringifyList(list: string[]) { + return `[${list.join('|')}]`; +} + +function triageManagerJob(triageManagerOptions: TriageManagerOptions) { + return { + name: 'Triage Manager', + runsOn: ['aws-cdk_ubuntu-latest_4-core'], + permissions: { issues: JobPermission.WRITE, pullRequests: JobPermission.WRITE }, + steps: [ + { + name: 'Triage Manager', + uses: 'aws-github-ops/aws-issue-triage-manager@main', + with: { + 'github-token': `\${{ ${triageManagerOptions.githubToken ?? 'secrets.GITHUB_TOKEN'} }}`, + 'target': triageManagerOptions.target, + 'excluded-expressions': triageManagerOptions.excludedExpressions ? stringifyList(triageManagerOptions.excludedExpressions) : undefined, + 'included-labels': triageManagerOptions.includedLabels ? stringifyList(triageManagerOptions.includedLabels) : undefined, + 'excluded-labels': triageManagerOptions.excludedLabels ? stringifyList(triageManagerOptions.excludedLabels) : undefined, + 'default-area': triageManagerOptions.defaultArea, + 'parameters': triageManagerOptions.parameters, + 'affixes': triageManagerOptions.affixes, + 'area-is-keyword': triageManagerOptions.areaIsKeyword, + }, + }, + ], + ...(triageManagerOptions.needEnvs ? { + env: { + AREA_PARAMS: JSON.stringify(AREA_PARAMS), + AREA_AFFIXES: `{"prefixes":${JSON.stringify(AREA_AFFIXES)}}`, + OSDS_DEVS: `{"assignees":${JSON.stringify(OSDS_DEVS)}}`, + }, + } : {}), + }; +} + +export class IssueLabeler extends Component { + public readonly workflow: github.GithubWorkflow; + + constructor(repo: TypeScriptProject) { + super(repo); + + if (!repo.github) { + throw new Error('Given repository does not have a GitHub component'); + } + + this.workflow = repo.github.addWorkflow('issue-label-assign'); + this.workflow.on({ + pullRequestTarget: { types: ['opened'] }, + issues: { types: ['opened', 'edited'] }, + }); + + this.workflow.addJob('Triage Issues', triageManagerJob({ + target: 'issues', + excludedExpressions: ['CDK CLI Version', 'TypeScript', 'Java', 'Python', 'Go'], + includedLabels: ['needs-triage'], + excludedLabels: ['p1', 'p2', 'p0', 'effort-small', 'effort-medium', 'effort-large', 'guidance'], + defaultArea: '${{ env.OSDS_DEVS }}', + parameters: '${{ env.AREA_PARAMS }}', + affixes: '${{ env.AREA_AFFIXES }}', + needEnvs: true, + })); + this.workflow.addJob('Triage Pull Requests', triageManagerJob({ + target: 'pull-requests', + areaIsKeyword: true, + defaultArea: '{"reviewers":{"teamReviewers":["aws-cdk-owners"]}}', + parameters: '[{"area":"pullrequests","keywords":["pullrequestkeyword"]}]', + githubToken: GitHubToken.PROJEN_GITHUB_TOKEN, + })); + } +} From 7373ad76e66721ada79b016778c5326f64f435e8 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy <36202692+kaizencc@users.noreply.github.com> Date: Thu, 27 Feb 2025 11:06:08 -0500 Subject: [PATCH 27/30] chore: rename jobs in issue-label-assign workflow (#167) IDs may only contain alphanumeric characters, '_', and '-'. Would love for this to be a synth-time check in projen... --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .github/workflows/issue-label-assign.yml | 4 ++-- projenrc/issue-labeler.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/issue-label-assign.yml b/.github/workflows/issue-label-assign.yml index 4268d20b..b94bed2b 100644 --- a/.github/workflows/issue-label-assign.yml +++ b/.github/workflows/issue-label-assign.yml @@ -10,7 +10,7 @@ on: - opened - edited jobs: - Triage Issues: + Triage-Issues: name: Triage Manager runs-on: aws-cdk_ubuntu-latest_4-core permissions: @@ -32,7 +32,7 @@ jobs: default-area: ${{ env.OSDS_DEVS }} parameters: ${{ env.AREA_PARAMS }} affixes: ${{ env.AREA_AFFIXES }} - Triage Pull Requests: + Triage-Pull-Requests: name: Triage Manager runs-on: aws-cdk_ubuntu-latest_4-core permissions: diff --git a/projenrc/issue-labeler.ts b/projenrc/issue-labeler.ts index 66e8616d..0c8e6654 100644 --- a/projenrc/issue-labeler.ts +++ b/projenrc/issue-labeler.ts @@ -93,7 +93,7 @@ export class IssueLabeler extends Component { issues: { types: ['opened', 'edited'] }, }); - this.workflow.addJob('Triage Issues', triageManagerJob({ + this.workflow.addJob('Triage-Issues', triageManagerJob({ target: 'issues', excludedExpressions: ['CDK CLI Version', 'TypeScript', 'Java', 'Python', 'Go'], includedLabels: ['needs-triage'], @@ -103,7 +103,7 @@ export class IssueLabeler extends Component { affixes: '${{ env.AREA_AFFIXES }}', needEnvs: true, })); - this.workflow.addJob('Triage Pull Requests', triageManagerJob({ + this.workflow.addJob('Triage-Pull-Requests', triageManagerJob({ target: 'pull-requests', areaIsKeyword: true, defaultArea: '{"reviewers":{"teamReviewers":["aws-cdk-owners"]}}', From f0677df8f0847bea76f7bba99b0cd0ba2c43bc11 Mon Sep 17 00:00:00 2001 From: Rico Hermans Date: Thu, 27 Feb 2025 18:05:28 +0100 Subject: [PATCH 28/30] chore: enable `unbound-method` eslint rule (#165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unbound method calls using `this` are likely to have unintended effects. Here is an example with static methods, but the same thing applies to object methods: ```ts class Class { public static staticMethod() { this.otherStaticMethod() } public static otherStaticMethod() { } } // ✅ valid Class.staticMethod(); // ❌ boom const x = Class.staticMethod; x(); ``` When assigning a method to a variable, you need to take extra care and this linter rule is going to remind you. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .eslintrc.json | 1 + packages/@aws-cdk/cdk-build-tools/.eslintrc.json | 1 + packages/@aws-cdk/cdk-cli-wrapper/.eslintrc.json | 1 + packages/@aws-cdk/cli-lib-alpha/.eslintrc.json | 1 + packages/@aws-cdk/cli-plugin-contract/.eslintrc.json | 1 + packages/@aws-cdk/cloud-assembly-schema/.eslintrc.json | 1 + packages/@aws-cdk/cloud-assembly-schema/lib/manifest.ts | 5 +++-- packages/@aws-cdk/cloudformation-diff/.eslintrc.json | 1 + packages/@aws-cdk/node-bundle/.eslintrc.json | 1 + packages/@aws-cdk/toolkit-lib/.eslintrc.json | 1 + packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts | 2 +- .../toolkit-lib/test/_helpers/jest-bufferedconsole.ts | 2 +- packages/@aws-cdk/user-input-gen/.eslintrc.json | 1 + packages/@aws-cdk/yarn-cling/.eslintrc.json | 1 + packages/aws-cdk/.eslintrc.json | 1 + packages/aws-cdk/lib/api/work-graph/work-graph-builder.ts | 6 +++--- packages/aws-cdk/lib/cli/cdk-toolkit.ts | 2 +- packages/aws-cdk/test/jest-bufferedconsole.ts | 2 +- packages/cdk-assets/.eslintrc.json | 1 + packages/cdk/.eslintrc.json | 1 + projenrc/eslint.ts | 3 +++ 21 files changed, 27 insertions(+), 9 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 149220ab..8e927659 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -316,6 +316,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cdk-build-tools/.eslintrc.json b/packages/@aws-cdk/cdk-build-tools/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/cdk-build-tools/.eslintrc.json +++ b/packages/@aws-cdk/cdk-build-tools/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cdk-cli-wrapper/.eslintrc.json b/packages/@aws-cdk/cdk-cli-wrapper/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/cdk-cli-wrapper/.eslintrc.json +++ b/packages/@aws-cdk/cdk-cli-wrapper/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cli-lib-alpha/.eslintrc.json b/packages/@aws-cdk/cli-lib-alpha/.eslintrc.json index 3f477052..43235402 100644 --- a/packages/@aws-cdk/cli-lib-alpha/.eslintrc.json +++ b/packages/@aws-cdk/cli-lib-alpha/.eslintrc.json @@ -303,6 +303,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cli-plugin-contract/.eslintrc.json b/packages/@aws-cdk/cli-plugin-contract/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/cli-plugin-contract/.eslintrc.json +++ b/packages/@aws-cdk/cli-plugin-contract/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cloud-assembly-schema/.eslintrc.json b/packages/@aws-cdk/cloud-assembly-schema/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/.eslintrc.json +++ b/packages/@aws-cdk/cloud-assembly-schema/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/cloud-assembly-schema/lib/manifest.ts b/packages/@aws-cdk/cloud-assembly-schema/lib/manifest.ts index c2e3b222..400a983b 100644 --- a/packages/@aws-cdk/cloud-assembly-schema/lib/manifest.ts +++ b/packages/@aws-cdk/cloud-assembly-schema/lib/manifest.ts @@ -259,7 +259,7 @@ export class Manifest { * Ideally, we would start writing the `camelCased` and translate to how CloudFormation expects it when needed. But this requires nasty * backwards-compatibility code and it just doesn't seem to be worth the effort. */ - private static patchStackTagsOnRead(manifest: assembly.AssemblyManifest) { + private static patchStackTagsOnRead(this: void, manifest: assembly.AssemblyManifest) { return Manifest.replaceStackTags(manifest, (tags) => tags.map((diskTag: any) => ({ key: diskTag.Key, @@ -273,6 +273,7 @@ export class Manifest { * should have dedicated properties preceding this (e.g `assumeRoleArn` and `assumeRoleExternalId`). */ private static validateAssumeRoleAdditionalOptions( + this: void, instance: any, key: string, _schema: jsonschema.Schema, @@ -301,7 +302,7 @@ export class Manifest { * * Translate stack tags metadata if it has the "right" casing. */ - private static patchStackTagsOnWrite(manifest: assembly.AssemblyManifest) { + private static patchStackTagsOnWrite(this: void, manifest: assembly.AssemblyManifest) { return Manifest.replaceStackTags(manifest, (tags) => tags.map( (memTag) => diff --git a/packages/@aws-cdk/cloudformation-diff/.eslintrc.json b/packages/@aws-cdk/cloudformation-diff/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/cloudformation-diff/.eslintrc.json +++ b/packages/@aws-cdk/cloudformation-diff/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/node-bundle/.eslintrc.json b/packages/@aws-cdk/node-bundle/.eslintrc.json index f34f9496..8df41e01 100644 --- a/packages/@aws-cdk/node-bundle/.eslintrc.json +++ b/packages/@aws-cdk/node-bundle/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/toolkit-lib/.eslintrc.json b/packages/@aws-cdk/toolkit-lib/.eslintrc.json index 59578d7e..6fa46cbe 100644 --- a/packages/@aws-cdk/toolkit-lib/.eslintrc.json +++ b/packages/@aws-cdk/toolkit-lib/.eslintrc.json @@ -303,6 +303,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts index d314eb70..f0e9d839 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts @@ -501,7 +501,7 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const stacksAndTheirAssetManifests = stacks.flatMap((stack) => [ stack, - ...stack.dependencies.filter(cxapi.AssetManifestArtifact.isAssetManifestArtifact), + ...stack.dependencies.filter(x => cxapi.AssetManifestArtifact.isAssetManifestArtifact(x)), ]); const workGraph = new WorkGraphBuilder({ ioHost, action }, prebuildAssets).build(stacksAndTheirAssetManifests); diff --git a/packages/@aws-cdk/toolkit-lib/test/_helpers/jest-bufferedconsole.ts b/packages/@aws-cdk/toolkit-lib/test/_helpers/jest-bufferedconsole.ts index 7dac07c7..470cb208 100644 --- a/packages/@aws-cdk/toolkit-lib/test/_helpers/jest-bufferedconsole.ts +++ b/packages/@aws-cdk/toolkit-lib/test/_helpers/jest-bufferedconsole.ts @@ -1,4 +1,4 @@ -/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable import/no-extraneous-dependencies,@typescript-eslint/unbound-method */ /** * A Jest environment that buffers outputs to `console.log()` and only shows it for failing tests. */ diff --git a/packages/@aws-cdk/user-input-gen/.eslintrc.json b/packages/@aws-cdk/user-input-gen/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/user-input-gen/.eslintrc.json +++ b/packages/@aws-cdk/user-input-gen/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/@aws-cdk/yarn-cling/.eslintrc.json b/packages/@aws-cdk/yarn-cling/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/@aws-cdk/yarn-cling/.eslintrc.json +++ b/packages/@aws-cdk/yarn-cling/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/aws-cdk/.eslintrc.json b/packages/aws-cdk/.eslintrc.json index d69bbb85..adc00fd8 100644 --- a/packages/aws-cdk/.eslintrc.json +++ b/packages/aws-cdk/.eslintrc.json @@ -304,6 +304,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/aws-cdk/lib/api/work-graph/work-graph-builder.ts b/packages/aws-cdk/lib/api/work-graph/work-graph-builder.ts index 034c9050..ca3f1acc 100644 --- a/packages/aws-cdk/lib/api/work-graph/work-graph-builder.ts +++ b/packages/aws-cdk/lib/api/work-graph/work-graph-builder.ts @@ -177,8 +177,8 @@ export class WorkGraphBuilder { function stacksFromAssets(artifacts: cxapi.CloudArtifact[]) { const ret = new Map(); - for (const stack of artifacts.filter(cxapi.CloudFormationStackArtifact.isCloudFormationStackArtifact)) { - const assetArtifacts = stack.dependencies.filter(cxapi.AssetManifestArtifact.isAssetManifestArtifact); + for (const stack of artifacts.filter(x => cxapi.CloudFormationStackArtifact.isCloudFormationStackArtifact(x))) { + const assetArtifacts = stack.dependencies.filter((x) => cxapi.AssetManifestArtifact.isAssetManifestArtifact(x)); for (const art of assetArtifacts) { ret.set(art, stack); } @@ -188,5 +188,5 @@ function stacksFromAssets(artifacts: cxapi.CloudArtifact[]) { } function onlyStacks(artifacts: cxapi.CloudArtifact[]) { - return artifacts.filter(cxapi.CloudFormationStackArtifact.isCloudFormationStackArtifact); + return artifacts.filter(x => cxapi.CloudFormationStackArtifact.isCloudFormationStackArtifact(x)); } diff --git a/packages/aws-cdk/lib/cli/cdk-toolkit.ts b/packages/aws-cdk/lib/cli/cdk-toolkit.ts index fb7567b8..f8434246 100644 --- a/packages/aws-cdk/lib/cli/cdk-toolkit.ts +++ b/packages/aws-cdk/lib/cli/cdk-toolkit.ts @@ -581,7 +581,7 @@ export class CdkToolkit { const stacksAndTheirAssetManifests = stacks.flatMap((stack) => [ stack, - ...stack.dependencies.filter(cxapi.AssetManifestArtifact.isAssetManifestArtifact), + ...stack.dependencies.filter(x => cxapi.AssetManifestArtifact.isAssetManifestArtifact(x)), ]); const workGraph = new WorkGraphBuilder({ ioHost: this.ioHost, diff --git a/packages/aws-cdk/test/jest-bufferedconsole.ts b/packages/aws-cdk/test/jest-bufferedconsole.ts index 7dac07c7..470cb208 100644 --- a/packages/aws-cdk/test/jest-bufferedconsole.ts +++ b/packages/aws-cdk/test/jest-bufferedconsole.ts @@ -1,4 +1,4 @@ -/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable import/no-extraneous-dependencies,@typescript-eslint/unbound-method */ /** * A Jest environment that buffers outputs to `console.log()` and only shows it for failing tests. */ diff --git a/packages/cdk-assets/.eslintrc.json b/packages/cdk-assets/.eslintrc.json index 7b0dd17b..a98cc2ab 100644 --- a/packages/cdk-assets/.eslintrc.json +++ b/packages/cdk-assets/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/packages/cdk/.eslintrc.json b/packages/cdk/.eslintrc.json index 05af8db4..691af85e 100644 --- a/packages/cdk/.eslintrc.json +++ b/packages/cdk/.eslintrc.json @@ -306,6 +306,7 @@ "message": "Use the md5hash() function from the core library if you want md5" } ], + "@typescript-eslint/unbound-method": "error", "jest/expect-expect": "off", "jest/no-conditional-expect": "off", "jest/no-done-callback": "off", diff --git a/projenrc/eslint.ts b/projenrc/eslint.ts index b5ee27b1..a4df9d08 100644 --- a/projenrc/eslint.ts +++ b/projenrc/eslint.ts @@ -165,6 +165,9 @@ export const ESLINT_RULES = { ], }], + // Unbound methods are a JavaScript footgun + '@typescript-eslint/unbound-method': 'error', + // Overrides for plugin:jest/recommended 'jest/expect-expect': 'off', 'jest/no-conditional-expect': 'off', From 0d9912f9c90dd435cc991a903aff6767016f46b1 Mon Sep 17 00:00:00 2001 From: Momo Kornher Date: Thu, 27 Feb 2025 17:08:38 +0000 Subject: [PATCH 29/30] refactor(cli): stack monitor uses io-host (#150) Provides stack events to the IoHost in a structured way. The main change here is that `StackActivityMonitor` does not directly talk to the `ActivityPrinter` anymore. Instead messages are emitted to the `IoHost`. This caused two related changes: - Progress tracking has been split into a more generic `StackProgressMonitor` and progress information is now provided directly by the `StackActivityMonitor` - Originally we only had a single timer that covered polling events and printing them. With the split, we now have two separate timers: one for polling events and a separate one for updating the view Removed low-level options: - `progress` -> now a `CliIoHost` property - `ci` -> use value from `CliIoHost` directly instead of passing through all the layers - `quiet` -> surprisingly this was unused by CLI. We should have something like this again, but can be implemented in a follow up PR. Manually tested the changes in addition to integ tests. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- .../@aws-cdk/toolkit-lib/CODE_REGISTRY.md | 4 + .../toolkit-lib/lib/actions/deploy/index.ts | 8 +- .../@aws-cdk/toolkit-lib/lib/api/aws-cdk.ts | 1 - .../toolkit-lib/lib/api/io/private/codes.ts | 26 + .../toolkit-lib/lib/toolkit/toolkit.ts | 8 +- .../@aws-cdk/toolkit-lib/lib/toolkit/types.ts | 10 + .../lib/api/deployments/deploy-stack.ts | 61 +- .../lib/api/deployments/deployments.ts | 54 +- .../lib/api/resource-import/importer.ts | 9 - .../lib/api/resource-import/migrator.ts | 1 - .../stack-events/stack-activity-monitor.ts | 801 ++++-------------- .../api/stack-events/stack-event-poller.ts | 7 + .../stack-events/stack-progress-monitor.ts | 129 +++ .../aws-cdk/lib/cli/activity-printer/base.ts | 154 ++++ .../lib/cli/activity-printer/current.ts | 165 ++++ .../activity-printer}/display.ts | 0 .../lib/cli/activity-printer/history.ts | 145 ++++ .../aws-cdk/lib/cli/activity-printer/index.ts | 3 + packages/aws-cdk/lib/cli/cdk-toolkit.ts | 16 +- packages/aws-cdk/lib/cli/cli-config.ts | 2 +- packages/aws-cdk/lib/cli/cli.ts | 1 + packages/aws-cdk/lib/commands/deploy.ts | 14 + packages/aws-cdk/lib/legacy-exports-source.ts | 2 +- packages/aws-cdk/lib/toolkit/cli-io-host.ts | 94 ++ packages/aws-cdk/lib/util/cloudformation.ts | 26 + .../aws-cdk/lib/util/string-manipulation.ts | 12 +- .../api/stack-events/progress-monitor.test.ts | 116 +++ .../stack-activity-monitor.test.ts | 520 ++++++------ .../api/stack-events/stack-monitor.test.ts | 271 ------ .../{api => cli}/_helpers/console-listener.ts | 0 .../activity-monitor}/display.test.ts | 2 +- .../test/cli/activity-monitor/history.test.ts | 166 ++++ .../aws-cdk/test/util/cloudformation.test.ts | 111 +++ .../util/validate-notification-arn.test.ts | 30 - 34 files changed, 1659 insertions(+), 1310 deletions(-) create mode 100644 packages/aws-cdk/lib/api/stack-events/stack-progress-monitor.ts create mode 100644 packages/aws-cdk/lib/cli/activity-printer/base.ts create mode 100644 packages/aws-cdk/lib/cli/activity-printer/current.ts rename packages/aws-cdk/lib/{api/stack-events => cli/activity-printer}/display.ts (100%) create mode 100644 packages/aws-cdk/lib/cli/activity-printer/history.ts create mode 100644 packages/aws-cdk/lib/cli/activity-printer/index.ts create mode 100644 packages/aws-cdk/lib/commands/deploy.ts create mode 100644 packages/aws-cdk/test/api/stack-events/progress-monitor.test.ts delete mode 100644 packages/aws-cdk/test/api/stack-events/stack-monitor.test.ts rename packages/aws-cdk/test/{api => cli}/_helpers/console-listener.ts (100%) rename packages/aws-cdk/test/{api/stack-events => cli/activity-monitor}/display.test.ts (96%) create mode 100644 packages/aws-cdk/test/cli/activity-monitor/history.test.ts create mode 100644 packages/aws-cdk/test/util/cloudformation.test.ts delete mode 100644 packages/aws-cdk/test/util/validate-notification-arn.test.ts diff --git a/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md b/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md index 220144b0..bf9d4dae 100644 --- a/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md +++ b/packages/@aws-cdk/toolkit-lib/CODE_REGISTRY.md @@ -13,8 +13,12 @@ | CDK_TOOLKIT_I5031 | Informs about any log groups that are traced as part of the deployment | info | n/a | | CDK_TOOLKIT_I5050 | Confirm rollback during deployment | info | n/a | | CDK_TOOLKIT_I5060 | Confirm deploy security sensitive changes | info | n/a | +| CDK_TOOLKIT_I5501 | Stack Monitoring: Start monitoring of a single stack | info | [StackMonitoringControlEvent](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/StackMonitoringControlEvent.html) | +| CDK_TOOLKIT_I5502 | Stack Monitoring: Activity event for a single stack | info | [StackActivity](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/StackActivity.html) | +| CDK_TOOLKIT_I5503 | Stack Monitoring: Finished monitoring of a single stack | info | [StackMonitoringControlEvent](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/StackMonitoringControlEvent.html) | | CDK_TOOLKIT_I5900 | Deployment results on success | result | [SuccessfulDeployStackResult](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/SuccessfulDeployStackResult.html) | | CDK_TOOLKIT_E5001 | No stacks found | error | n/a | +| CDK_TOOLKIT_E5500 | Stack Monitoring error | error | [ErrorPayload](https://docs.aws.amazon.com/cdk/api/toolkit-lib/interfaces/ErrorPayload.html) | | CDK_TOOLKIT_I6000 | Provides rollback times | info | n/a | | CDK_TOOLKIT_E6001 | No stacks found | error | n/a | | CDK_TOOLKIT_E6900 | Rollback failed | error | n/a | diff --git a/packages/@aws-cdk/toolkit-lib/lib/actions/deploy/index.ts b/packages/@aws-cdk/toolkit-lib/lib/actions/deploy/index.ts index be8b0511..d129838a 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/actions/deploy/index.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/actions/deploy/index.ts @@ -1,5 +1,5 @@ import type { BaseDeployOptions } from './private/deploy-options'; -import type { StackActivityProgress, Tag } from '../../api/aws-cdk'; +import type { Tag } from '../../api/aws-cdk'; export type DeploymentMethod = DirectDeploymentMethod | ChangeSetDeploymentMethod; @@ -164,16 +164,16 @@ export interface DeployOptions extends BaseDeployOptions { /** * Change stack watcher output to CI mode. * - * @deprecated Implement in IoHost instead + * @deprecated has no functionality, please implement in your IoHost */ readonly ci?: boolean; /** * Display mode for stack deployment progress. * - * @deprecated Implement in IoHost instead + * @deprecated has no functionality, please implement in your IoHost */ - readonly progress?: StackActivityProgress; + readonly progress?: any; /** * Represents configuration property overrides for hotswap deployments. diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/aws-cdk.ts b/packages/@aws-cdk/toolkit-lib/lib/api/aws-cdk.ts index a6e85dd3..8171d85a 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/aws-cdk.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/aws-cdk.ts @@ -8,7 +8,6 @@ export { Settings } from '../../../../aws-cdk/lib/api/settings'; export { tagsForStack, Tag } from '../../../../aws-cdk/lib/api/tags'; export { DEFAULT_TOOLKIT_STACK_NAME } from '../../../../aws-cdk/lib/api/toolkit-info'; export { ResourceMigrator } from '../../../../aws-cdk/lib/api/resource-import'; -export { StackActivityProgress } from '../../../../aws-cdk/lib/api/stack-events'; export { CloudWatchLogEventMonitor, findCloudWatchLogGroups } from '../../../../aws-cdk/lib/api/logs'; export { type WorkGraph, WorkGraphBuilder, AssetBuildNode, AssetPublishNode, StackNode, Concurrency } from '../../../../aws-cdk/lib/api/work-graph'; diff --git a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts index 3c35848f..f11d968c 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/api/io/private/codes.ts @@ -109,6 +109,26 @@ export const CODES = { description: 'Confirm deploy security sensitive changes', level: 'info', }), + + CDK_TOOLKIT_I5501: codeInfo({ + code: 'CDK_TOOLKIT_I5501', + description: 'Stack Monitoring: Start monitoring of a single stack', + level: 'info', + interface: 'StackMonitoringControlEvent', + }), + CDK_TOOLKIT_I5502: codeInfo({ + code: 'CDK_TOOLKIT_I5502', + description: 'Stack Monitoring: Activity event for a single stack', + level: 'info', + interface: 'StackActivity', + }), + CDK_TOOLKIT_I5503: codeInfo({ + code: 'CDK_TOOLKIT_I5503', + description: 'Stack Monitoring: Finished monitoring of a single stack', + level: 'info', + interface: 'StackMonitoringControlEvent', + }), + CDK_TOOLKIT_I5900: codeInfo({ code: 'CDK_TOOLKIT_I5900', description: 'Deployment results on success', @@ -121,6 +141,12 @@ export const CODES = { description: 'No stacks found', level: 'error', }), + CDK_TOOLKIT_E5500: codeInfo({ + code: 'CDK_TOOLKIT_E5500', + description: 'Stack Monitoring error', + level: 'error', + interface: 'ErrorPayload', + }), // 6: Rollback CDK_TOOLKIT_I6000: codeInfo({ diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts index f0e9d839..5e24fa62 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts @@ -15,7 +15,7 @@ import { type SynthOptions } from '../actions/synth'; import { WatchOptions } from '../actions/watch'; import { patternsArrayForWatch } from '../actions/watch/private'; import { type SdkConfig } from '../api/aws-auth'; -import { DEFAULT_TOOLKIT_STACK_NAME, SdkProvider, SuccessfulDeployStackResult, StackCollection, Deployments, HotswapMode, StackActivityProgress, ResourceMigrator, obscureTemplate, serializeStructure, tagsForStack, CliIoHost, validateSnsTopicArn, Concurrency, WorkGraphBuilder, AssetBuildNode, AssetPublishNode, StackNode, formatErrorMessage, CloudWatchLogEventMonitor, findCloudWatchLogGroups, formatTime, StackDetails } from '../api/aws-cdk'; +import { DEFAULT_TOOLKIT_STACK_NAME, SdkProvider, SuccessfulDeployStackResult, StackCollection, Deployments, HotswapMode, ResourceMigrator, obscureTemplate, serializeStructure, tagsForStack, CliIoHost, validateSnsTopicArn, Concurrency, WorkGraphBuilder, AssetBuildNode, AssetPublishNode, StackNode, formatErrorMessage, CloudWatchLogEventMonitor, findCloudWatchLogGroups, formatTime, StackDetails } from '../api/aws-cdk'; import { ICloudAssemblySource, StackSelectionStrategy } from '../api/cloud-assembly'; import { ALL_STACKS, CachedCloudAssemblySource, CloudAssemblySourceBuilder, IdentityCloudAssemblySource, StackAssembly } from '../api/cloud-assembly/private'; import { ToolkitError } from '../api/errors'; @@ -375,8 +375,6 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab force: options.force, parameters: Object.assign({}, parameterMap['*'], parameterMap[stack.stackName]), usePreviousParameters: options.parameters?.keepExistingParameters, - progress, - ci: options.ci, rollback, hotswap: hotswapMode, extraUserAgent: options.extraUserAgent, @@ -494,10 +492,6 @@ export class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposab const assetBuildTime = options.assetBuildTime ?? AssetBuildTime.ALL_BEFORE_DEPLOY; const prebuildAssets = assetBuildTime === AssetBuildTime.ALL_BEFORE_DEPLOY; const concurrency = options.concurrency || 1; - const progress = concurrency > 1 ? StackActivityProgress.EVENTS : options.progress; - if (concurrency > 1 && options.progress && options.progress != StackActivityProgress.EVENTS) { - await ioHost.notify(warn('⚠️ The --concurrency flag only supports --progress "events". Switching to "events".')); - } const stacksAndTheirAssetManifests = stacks.flatMap((stack) => [ stack, diff --git a/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts b/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts index 73ebf35d..4baedf29 100644 --- a/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts +++ b/packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts @@ -76,3 +76,13 @@ export interface Duration { */ readonly duration: number; } + +/** + * Generic payload of error IoMessages that pass on an instance of `Error` + */ +export interface ErrorPayload { + /** + * The error that occurred + */ + readonly error: Error; +} diff --git a/packages/aws-cdk/lib/api/deployments/deploy-stack.ts b/packages/aws-cdk/lib/api/deployments/deploy-stack.ts index 696fb9eb..898c6f73 100644 --- a/packages/aws-cdk/lib/api/deployments/deploy-stack.ts +++ b/packages/aws-cdk/lib/api/deployments/deploy-stack.ts @@ -36,7 +36,7 @@ import type { SDK, SdkProvider, ICloudFormationClient } from '../aws-auth'; import type { EnvironmentResources } from '../environment'; import { CfnEvaluationException } from '../evaluate-cloudformation-template'; import { HotswapMode, HotswapPropertyOverrides, ICON } from '../hotswap/common'; -import { StackActivityMonitor, type StackActivityProgress } from '../stack-events'; +import { StackActivityMonitor } from '../stack-events'; import { StringWithoutPlaceholders } from '../util/placeholders'; import { type TemplateBodyParameter, makeBodyParameter } from '../util/template-body-parameter'; @@ -105,13 +105,6 @@ export interface DeployStackOptions { */ readonly deployName?: string; - /** - * Quiet or verbose deployment - * - * @default false - */ - readonly quiet?: boolean; - /** * List of asset IDs which shouldn't be built * @@ -153,27 +146,12 @@ export interface DeployStackOptions { */ readonly usePreviousParameters?: boolean; - /** - * Display mode for stack deployment progress. - * - * @default StackActivityProgress.Bar stack events will be displayed for - * the resource currently being deployed. - */ - readonly progress?: StackActivityProgress; - /** * Deploy even if the deployed template is identical to the one we are about to deploy. * @default false */ readonly force?: boolean; - /** - * Whether we are on a CI system - * - * @default false - */ - readonly ci?: boolean; - /** * Rollback failed deployments * @@ -612,14 +590,16 @@ class FullCloudFormationDeployment { } private async monitorDeployment(startTime: Date, expectedChanges: number | undefined): Promise { - const monitor = this.options.quiet - ? undefined - : StackActivityMonitor.withDefaultPrinter(this.cfn, this.stackName, this.stackArtifact, { - resourcesTotal: expectedChanges, - progress: this.options.progress, - changeSetCreationTime: startTime, - ci: this.options.ci, - }).start(); + const monitor = new StackActivityMonitor({ + cfn: this.cfn, + stack: this.stackArtifact, + stackName: this.stackName, + resourcesTotal: expectedChanges, + ioHost: this.ioHost, + action: this.action, + changeSetCreationTime: startTime, + }); + await monitor.start(); let finalState = this.cloudFormationStack; try { @@ -631,9 +611,9 @@ class FullCloudFormationDeployment { } finalState = successStack; } catch (e: any) { - throw new ToolkitError(suffixWithErrors(formatErrorMessage(e), monitor?.errors)); + throw new ToolkitError(suffixWithErrors(formatErrorMessage(e), monitor.errors)); } finally { - await monitor?.stop(); + await monitor.stop(); } debug(this.action, format('Stack %s has completed updating', this.stackName)); return { @@ -696,11 +676,14 @@ export async function destroyStack(options: DestroyStackOptions, { ioHost, actio if (!currentStack.exists) { return; } - const monitor = options.quiet - ? undefined - : StackActivityMonitor.withDefaultPrinter(cfn, deployName, options.stack, { - ci: options.ci, - }).start(); + const monitor = new StackActivityMonitor({ + cfn, + stack: options.stack, + stackName: deployName, + ioHost, + action, + }); + await monitor.start(); try { await cfn.deleteStack({ StackName: deployName, RoleARN: options.roleArn }); @@ -709,7 +692,7 @@ export async function destroyStack(options: DestroyStackOptions, { ioHost, actio throw new ToolkitError(`Failed to destroy ${deployName}: ${destroyedStack.stackStatus}`); } } catch (e: any) { - throw new ToolkitError(suffixWithErrors(formatErrorMessage(e), monitor?.errors)); + throw new ToolkitError(suffixWithErrors(formatErrorMessage(e), monitor.errors)); } finally { if (monitor) { await monitor.stop(); diff --git a/packages/aws-cdk/lib/api/deployments/deployments.ts b/packages/aws-cdk/lib/api/deployments/deployments.ts index a9cc3b00..6bd75b79 100644 --- a/packages/aws-cdk/lib/api/deployments/deployments.ts +++ b/packages/aws-cdk/lib/api/deployments/deployments.ts @@ -31,7 +31,7 @@ import { formatErrorMessage } from '../../util/format-error'; import type { SdkProvider } from '../aws-auth/sdk-provider'; import { type EnvironmentResources, EnvironmentAccess } from '../environment'; import { HotswapMode, HotswapPropertyOverrides } from '../hotswap/common'; -import { StackActivityMonitor, StackActivityProgress, StackEventPoller, RollbackChoice } from '../stack-events'; +import { StackActivityMonitor, StackEventPoller, RollbackChoice } from '../stack-events'; import type { Tag } from '../tags'; import { DEFAULT_TOOLKIT_STACK_NAME } from '../toolkit-info'; import { makeBodyParameter } from '../util/template-body-parameter'; @@ -65,13 +65,6 @@ export interface DeployStackOptions { */ readonly deployName?: string; - /** - * Don't show stack deployment events, just wait - * - * @default false - */ - readonly quiet?: boolean; - /** * Name of the toolkit stack, if not the default name * @@ -135,21 +128,6 @@ export interface DeployStackOptions { */ readonly usePreviousParameters?: boolean; - /** - * Display mode for stack deployment progress. - * - * @default - StackActivityProgress.Bar - stack events will be displayed for - * the resource currently being deployed. - */ - readonly progress?: StackActivityProgress; - - /** - * Whether we are on a CI system - * - * @default false - */ - readonly ci?: boolean; - /** * Rollback failed deployments * @@ -255,14 +233,6 @@ export interface RollbackStackOptions { */ readonly orphanLogicalIds?: string[]; - /** - * Display mode for stack deployment progress. - * - * @default - StackActivityProgress.Bar - stack events will be displayed for - * the resource currently being deployed. - */ - readonly progress?: StackActivityProgress; - /** * Whether to validate the version of the bootstrap stack permissions * @@ -463,7 +433,6 @@ export class Deployments { resolvedEnvironment: env.resolvedEnvironment, deployName: options.deployName, notificationArns: options.notificationArns, - quiet: options.quiet, sdk: env.sdk, sdkProvider: this.deployStackSdkProvider, roleArn: executionRoleArn, @@ -474,8 +443,6 @@ export class Deployments { force: options.force, parameters: options.parameters, usePreviousParameters: options.usePreviousParameters, - progress: options.progress, - ci: options.ci, rollback: options.rollback, hotswap: options.hotswap, hotswapPropertyOverrides: options.hotswapPropertyOverrides, @@ -565,11 +532,14 @@ export class Deployments { throw new ToolkitError(`Unexpected rollback choice: ${cloudFormationStack.stackStatus.rollbackChoice}`); } - const monitor = options.quiet - ? undefined - : StackActivityMonitor.withDefaultPrinter(cfn, deployName, options.stack, { - ci: options.ci, - }).start(); + const monitor = new StackActivityMonitor({ + cfn, + stack: options.stack, + stackName: deployName, + ioHost: this.ioHost, + action: this.action, + }); + await monitor.start(); let stackErrorMessage: string | undefined = undefined; let finalStackState = cloudFormationStack; @@ -582,14 +552,14 @@ export class Deployments { } finalStackState = successStack; - const errors = monitor?.errors?.join(', '); + const errors = monitor.errors.join(', '); if (errors) { stackErrorMessage = errors; } } catch (e: any) { - stackErrorMessage = suffixWithErrors(formatErrorMessage(e), monitor?.errors); + stackErrorMessage = suffixWithErrors(formatErrorMessage(e), monitor.errors); } finally { - await monitor?.stop(); + await monitor.stop(); } if (finalStackState.stackStatus.isRollbackSuccess || !stackErrorMessage) { diff --git a/packages/aws-cdk/lib/api/resource-import/importer.ts b/packages/aws-cdk/lib/api/resource-import/importer.ts index 89411331..044d0549 100644 --- a/packages/aws-cdk/lib/api/resource-import/importer.ts +++ b/packages/aws-cdk/lib/api/resource-import/importer.ts @@ -9,7 +9,6 @@ import { error, info, warn } from '../../cli/messages'; import { IIoHost, ToolkitAction } from '../../toolkit/cli-io-host'; import { ToolkitError } from '../../toolkit/error'; import { assertIsSuccessfulDeployStackResult, type Deployments, DeploymentMethod, ResourceIdentifierProperties, ResourcesToImport } from '../deployments'; -import type { StackActivityProgress } from '../stack-events'; import type { Tag } from '../tags'; export interface ResourceImporterProps { @@ -49,14 +48,6 @@ export interface ImportDeploymentOptions { */ readonly usePreviousParameters?: boolean; - /** - * Display mode for stack deployment progress. - * - * @default - StackActivityProgress.Bar - stack events will be displayed for - * the resource currently being deployed. - */ - readonly progress?: StackActivityProgress; - /** * Rollback failed deployments * diff --git a/packages/aws-cdk/lib/api/resource-import/migrator.ts b/packages/aws-cdk/lib/api/resource-import/migrator.ts index e0f2e421..0180fd6f 100644 --- a/packages/aws-cdk/lib/api/resource-import/migrator.ts +++ b/packages/aws-cdk/lib/api/resource-import/migrator.ts @@ -67,7 +67,6 @@ export class ResourceMigrator { roleArn: options.roleArn, deploymentMethod: options.deploymentMethod, usePreviousParameters: true, - progress: options.progress, rollback: options.rollback, }); diff --git a/packages/aws-cdk/lib/api/stack-events/stack-activity-monitor.ts b/packages/aws-cdk/lib/api/stack-events/stack-activity-monitor.ts index 962b505d..74fb2e75 100644 --- a/packages/aws-cdk/lib/api/stack-events/stack-activity-monitor.ts +++ b/packages/aws-cdk/lib/api/stack-events/stack-activity-monitor.ts @@ -1,15 +1,68 @@ + import * as util from 'util'; import { ArtifactMetadataEntryType, type MetadataEntry } from '@aws-cdk/cloud-assembly-schema'; import type { CloudFormationStackArtifact } from '@aws-cdk/cx-api'; -import * as chalk from 'chalk'; -import { ResourceEvent, StackEventPoller } from './stack-event-poller'; -import { error, info } from '../../logging'; -import { CliIoHost, IoMessageLevel } from '../../toolkit/cli-io-host'; +import { StackEvent } from '@aws-sdk/client-cloudformation'; +import * as uuid from 'uuid'; +import { StackEventPoller } from './stack-event-poller'; +import { debug, error, info } from '../../cli/messages'; +import { IoMessaging } from '../../toolkit/cli-io-host'; +import { stackEventHasErrorMessage } from '../../util'; import type { ICloudFormationClient } from '../aws-auth'; -import { RewritableBlock } from './display'; +import { StackProgress, StackProgressMonitor } from './stack-progress-monitor'; + +/** + * Payload when stack monitoring is starting or stopping for a given stack deployment. + */ +export interface StackMonitoringControlEvent { + /** + * A unique identifier for a specific stack deployment. + * + * Use this value to attribute stack activities received for concurrent deployments. + */ + readonly deployment: string; + + /** + * The stack artifact that is getting deployed + */ + readonly stack: CloudFormationStackArtifact; + + /** + * The name of the Stack that is getting deployed + */ + readonly stackName: string; + + /** + * Total number of resources taking part in this deployment + * + * The number might not always be known or accurate. + * Only use for informational purposes and handle the case when it's unavailable. + */ + readonly resourcesTotal?: number; +} + +export interface StackActivity { + /** + * A unique identifier for a specific stack deployment. + * + * Use this value to attribute stack activities received for concurrent deployments. + */ + readonly deployment: string; + + /** + * The Stack Event as received from CloudFormation + */ + readonly event: StackEvent; -export interface StackActivity extends ResourceEvent { + /** + * Additional resource metadata + */ readonly metadata?: ResourceMetadata; + + /** + * The stack progress + */ + readonly progress: StackProgress; } export interface ResourceMetadata { @@ -17,58 +70,40 @@ export interface ResourceMetadata { constructPath: string; } -/** - * Supported display modes for stack deployment activity - */ -export enum StackActivityProgress { +export interface StackActivityMonitorProps { /** - * Displays a progress bar with only the events for the resource currently being deployed + * The CloudFormation client */ - BAR = 'bar', + readonly cfn: ICloudFormationClient; /** - * Displays complete history with all CloudFormation stack events + * The IoHost used for messaging */ - EVENTS = 'events', -} + readonly ioHost: IoMessaging['ioHost']; -export interface WithDefaultPrinterProps { /** - * Total number of resources to update - * - * Used to calculate a progress bar. - * - * @default - No progress reporting. + * The current ToolkitAction */ - readonly resourcesTotal?: number; + readonly action: IoMessaging['action']; /** - * The log level that was requested in the CLI - * - * If verbose or trace is requested, we'll always use the full history printer. - * - * @default - Use value from logging.logLevel + * The stack artifact that is getting deployed */ - readonly logLevel?: IoMessageLevel; + readonly stack: CloudFormationStackArtifact; /** - * Whether to display all stack events or to display only the events for the - * resource currently being deployed - * - * If not set, the stack history with all stack events will be displayed - * - * @default false + * The name of the Stack that is getting deployed */ - progress?: StackActivityProgress; + readonly stackName: string; /** - * Whether we are on a CI system + * Total number of resources to update * - * If so, disable the "optimized" stack monitor. + * Used to calculate a progress bar. * - * @default false + * @default - No progress reporting. */ - readonly ci?: boolean; + readonly resourcesTotal?: number; /** * Creation time of the change set @@ -82,50 +117,34 @@ export interface WithDefaultPrinterProps { * @default - local machine's current time */ readonly changeSetCreationTime?: Date; + + /** + * Time to wait between fetching new activities. + * + * Must wait a reasonable amount of time between polls, since we need to consider CloudFormation API limits + * + * @default 2_000 + */ + readonly pollingInterval?: number; } export class StackActivityMonitor { /** - * Create a Stack Activity Monitor using a default printer, based on context clues + * The poller used to read stack events */ - public static withDefaultPrinter( - cfn: ICloudFormationClient, - stackName: string, - stackArtifact: CloudFormationStackArtifact, - options: WithDefaultPrinterProps = {}, - ) { - const stream = options.ci ? process.stdout : process.stderr; - - const props: PrinterProps = { - resourceTypeColumnWidth: calcMaxResourceTypeLength(stackArtifact.template), - resourcesTotal: options.resourcesTotal, - stream, - }; - - const isWindows = process.platform === 'win32'; - const verbose = options.logLevel ?? 'info'; - // On some CI systems (such as CircleCI) output still reports as a TTY so we also - // need an individual check for whether we're running on CI. - // see: https://discuss.circleci.com/t/circleci-terminal-is-a-tty-but-term-is-not-set/9965 - const fancyOutputAvailable = !isWindows && stream.isTTY && !options.ci; - const progress = options.progress ?? StackActivityProgress.BAR; - - const printer = - fancyOutputAvailable && !verbose && progress === StackActivityProgress.BAR - ? new CurrentActivityPrinter(props) - : new HistoryActivityPrinter(props); - - return new StackActivityMonitor(cfn, stackName, printer, stackArtifact, options.changeSetCreationTime); - } + private readonly poller: StackEventPoller; /** - * The poller used to read stack events + * Fetch new activity every 1 second + * Printers can decide to update a view less frequently if desired */ - public readonly poller: StackEventPoller; + private readonly pollingInterval: number; public readonly errors: string[] = []; - private active = false; + private monitorId?: string; + + private readonly progressMonitor: StackProgressMonitor; /** * Current tick timer @@ -137,28 +156,49 @@ export class StackActivityMonitor { */ private readPromise?: Promise; - constructor( - cfn: ICloudFormationClient, - private readonly stackName: string, - private readonly printer: IActivityPrinter, - private readonly stack?: CloudFormationStackArtifact, - changeSetCreationTime?: Date, - ) { + private readonly ioHost: IoMessaging['ioHost']; + private readonly action: IoMessaging['action']; + private readonly stackName: string; + private readonly stack: CloudFormationStackArtifact; + + constructor({ + cfn, + ioHost, + action, + stack, + stackName, + resourcesTotal, + changeSetCreationTime, + pollingInterval = 2_000, + }: StackActivityMonitorProps) { + this.ioHost = ioHost; + this.action = action; + this.stack = stack; + this.stackName = stackName; + + this.progressMonitor = new StackProgressMonitor(resourcesTotal); + this.pollingInterval = pollingInterval; this.poller = new StackEventPoller(cfn, { stackName, startTime: changeSetCreationTime?.getTime() ?? Date.now(), }); } - public start() { - this.active = true; - this.printer.start(); + public async start() { + this.monitorId = uuid.v4(); + await this.ioHost.notify(debug(this.action, `Deploying ${this.stackName}`, 'CDK_TOOLKIT_I5501', { + deployment: this.monitorId, + stack: this.stack, + stackName: this.stackName, + resourcesTotal: this.progressMonitor.total, + } as StackMonitoringControlEvent)); this.scheduleNextTick(); return this; } public async stop() { - this.active = false; + const oldMonitorId = this.monitorId!; + this.monitorId = undefined; if (this.tickTimer) { clearTimeout(this.tickTimer); } @@ -166,43 +206,51 @@ export class StackActivityMonitor { // Do a final poll for all events. This is to handle the situation where DescribeStackStatus // already returned an error, but the monitor hasn't seen all the events yet and we'd end // up not printing the failure reason to users. - await this.finalPollToEnd(); + await this.finalPollToEnd(oldMonitorId); - this.printer.stop(); + await this.ioHost.notify(debug(this.action, `Completed ${this.stackName}`, 'CDK_TOOLKIT_I5503', { + deployment: oldMonitorId, + stack: this.stack, + stackName: this.stackName, + resourcesTotal: this.progressMonitor.total, + } as StackMonitoringControlEvent)); } private scheduleNextTick() { - if (!this.active) { + if (!this.monitorId) { return; } - this.tickTimer = setTimeout(() => void this.tick(), this.printer.updateSleep); + this.tickTimer = setTimeout(() => void this.tick(), this.pollingInterval); } private async tick() { - if (!this.active) { + if (!this.monitorId) { return; } try { - this.readPromise = this.readNewEvents(); + this.readPromise = this.readNewEvents(this.monitorId); await this.readPromise; this.readPromise = undefined; // We might have been stop()ped while the network call was in progress. - if (!this.active) { + if (!this.monitorId) { return; } - - this.printer.print(); } catch (e) { - error('Error occurred while monitoring stack: %s', e); + await this.ioHost.notify(error( + this.action, + util.format('Error occurred while monitoring stack: %s', e), + 'CDK_TOOLKIT_E5500', + { error: e }, + )); } this.scheduleNextTick(); } private findMetadataFor(logicalId: string | undefined): ResourceMetadata | undefined { - const metadata = this.stack?.manifest?.metadata; + const metadata = this.stack.manifest?.metadata; if (!logicalId || !metadata) { return undefined; } @@ -227,17 +275,21 @@ export class StackActivityMonitor { * see a next page and the last event in the page is new to us (and within the time window). * haven't seen the final event */ - private async readNewEvents(): Promise { + private async readNewEvents(monitorId: string): Promise { const pollEvents = await this.poller.poll(); - const activities: StackActivity[] = pollEvents.map((event) => ({ - ...event, - metadata: this.findMetadataFor(event.event.LogicalResourceId), - })); + for (const resourceEvent of pollEvents) { + this.progressMonitor.process(resourceEvent.event); + + const activity: StackActivity = { + deployment: monitorId, + event: resourceEvent.event, + metadata: this.findMetadataFor(resourceEvent.event.LogicalResourceId), + progress: this.progressMonitor.progress, + }; - for (const activity of activities) { this.checkForErrors(activity); - this.printer.addActivity(activity); + await this.ioHost.notify(info(this.action, this.formatActivity(activity, true), 'CDK_TOOLKIT_I5502', activity)); } } @@ -247,7 +299,7 @@ export class StackActivityMonitor { * Finish any poll currently in progress, then do a final one until we've * reached the last page. */ - private async finalPollToEnd() { + private async finalPollToEnd(monitorId: string) { // If we were doing a poll, finish that first. It was started before // the moment we were sure we weren't going to get any new events anymore // so we need to do a new one anyway. Need to wait for this one though @@ -256,11 +308,35 @@ export class StackActivityMonitor { await this.readPromise; } - await this.readNewEvents(); + await this.readNewEvents(monitorId); + } + + /** + * Formats a stack activity into a basic string + */ + private formatActivity(activity: StackActivity, progress: boolean): string { + const event = activity.event; + const metadata = activity.metadata; + + const resourceName = metadata ? metadata.constructPath : event.LogicalResourceId || ''; + const logicalId = resourceName !== event.LogicalResourceId ? `(${event.LogicalResourceId}) ` : ''; + + return util.format( + '%s | %s%s | %s | %s | %s %s%s%s', + event.StackName, + progress !== false ? `${activity.progress.formatted} | ` : '', + new Date(event.Timestamp!).toLocaleTimeString(), + event.ResourceStatus || '', + event.ResourceType, + resourceName, + logicalId, + event.ResourceStatusReason ? event.ResourceStatusReason : '', + metadata?.entry.trace ? `\n\t${metadata.entry.trace.join('\n\t\\_ ')}` : '', + ); } private checkForErrors(activity: StackActivity) { - if (hasErrorMessage(activity.event.ResourceStatus ?? '')) { + if (stackEventHasErrorMessage(activity.event.ResourceStatus ?? '')) { const isCancelled = (activity.event.ResourceStatusReason ?? '').indexOf('cancelled') > -1; // Cancelled is not an interesting failure reason, nor is the stack message (stack @@ -282,520 +358,3 @@ export class StackActivityMonitor { return path; } } - -function padRight(n: number, x: string): string { - return x + ' '.repeat(Math.max(0, n - x.length)); -} - -/** - * Infamous padLeft() - */ -function padLeft(n: number, x: string): string { - return ' '.repeat(Math.max(0, n - x.length)) + x; -} - -function calcMaxResourceTypeLength(template: any) { - const resources = (template && template.Resources) || {}; - let maxWidth = 0; - for (const id of Object.keys(resources)) { - const type = resources[id].Type || ''; - if (type.length > maxWidth) { - maxWidth = type.length; - } - } - return maxWidth; -} - -interface PrinterProps { - /** - * Total resources to deploy - */ - readonly resourcesTotal?: number; - - /** - * The with of the "resource type" column. - */ - readonly resourceTypeColumnWidth: number; - - /** - * Stream to write to - */ - readonly stream: NodeJS.WriteStream; -} - -export interface IActivityPrinter { - readonly updateSleep: number; - - addActivity(activity: StackActivity): void; - print(): void; - start(): void; - stop(): void; -} - -abstract class ActivityPrinterBase implements IActivityPrinter { - /** - * Fetch new activity every 5 seconds - */ - public readonly updateSleep: number = 5_000; - - /** - * A list of resource IDs which are currently being processed - */ - protected resourcesInProgress: Record = {}; - - /** - * Previous completion state observed by logical ID - * - * We use this to detect that if we see a DELETE_COMPLETE after a - * CREATE_COMPLETE, it's actually a rollback and we should DECREASE - * resourcesDone instead of increase it - */ - protected resourcesPrevCompleteState: Record = {}; - - /** - * Count of resources that have reported a _COMPLETE status - */ - protected resourcesDone: number = 0; - - /** - * How many digits we need to represent the total count (for lining up the status reporting) - */ - protected readonly resourceDigits: number = 0; - - protected readonly resourcesTotal?: number; - - protected rollingBack = false; - - protected readonly failures = new Array(); - - protected hookFailureMap = new Map>(); - - constructor(protected readonly props: PrinterProps) { - // +1 because the stack also emits a "COMPLETE" event at the end, and that wasn't - // counted yet. This makes it line up with the amount of events we expect. - this.resourcesTotal = props.resourcesTotal ? props.resourcesTotal + 1 : undefined; - - // How many digits does this number take to represent? - this.resourceDigits = this.resourcesTotal ? Math.ceil(Math.log10(this.resourcesTotal)) : 0; - } - - public failureReason(activity: StackActivity) { - const resourceStatusReason = activity.event.ResourceStatusReason ?? ''; - const logicalResourceId = activity.event.LogicalResourceId ?? ''; - const hookFailureReasonMap = this.hookFailureMap.get(logicalResourceId); - - if (hookFailureReasonMap !== undefined) { - for (const hookType of hookFailureReasonMap.keys()) { - if (resourceStatusReason.includes(hookType)) { - return resourceStatusReason + ' : ' + hookFailureReasonMap.get(hookType); - } - } - } - return resourceStatusReason; - } - - public addActivity(activity: StackActivity) { - const status = activity.event.ResourceStatus; - const hookStatus = activity.event.HookStatus; - const hookType = activity.event.HookType; - if (!status || !activity.event.LogicalResourceId) { - return; - } - - if (status === 'ROLLBACK_IN_PROGRESS' || status === 'UPDATE_ROLLBACK_IN_PROGRESS') { - // Only triggered on the stack once we've started doing a rollback - this.rollingBack = true; - } - - if (status.endsWith('_IN_PROGRESS')) { - this.resourcesInProgress[activity.event.LogicalResourceId] = activity; - } - - if (hasErrorMessage(status)) { - const isCancelled = (activity.event.ResourceStatusReason ?? '').indexOf('cancelled') > -1; - - // Cancelled is not an interesting failure reason - if (!isCancelled) { - this.failures.push(activity); - } - } - - if (status.endsWith('_COMPLETE') || status.endsWith('_FAILED')) { - delete this.resourcesInProgress[activity.event.LogicalResourceId]; - } - - if (status.endsWith('_COMPLETE_CLEANUP_IN_PROGRESS')) { - this.resourcesDone++; - } - - if (status.endsWith('_COMPLETE')) { - const prevState = this.resourcesPrevCompleteState[activity.event.LogicalResourceId]; - if (!prevState) { - this.resourcesDone++; - } else { - // If we completed this before and we're completing it AGAIN, means we're rolling back. - // Protect against silly underflow. - this.resourcesDone--; - if (this.resourcesDone < 0) { - this.resourcesDone = 0; - } - } - this.resourcesPrevCompleteState[activity.event.LogicalResourceId] = status; - } - - if ( - hookStatus !== undefined && - hookStatus.endsWith('_COMPLETE_FAILED') && - activity.event.LogicalResourceId !== undefined && - hookType !== undefined - ) { - if (this.hookFailureMap.has(activity.event.LogicalResourceId)) { - this.hookFailureMap.get(activity.event.LogicalResourceId)?.set(hookType, activity.event.HookStatusReason ?? ''); - } else { - this.hookFailureMap.set(activity.event.LogicalResourceId, new Map()); - this.hookFailureMap.get(activity.event.LogicalResourceId)?.set(hookType, activity.event.HookStatusReason ?? ''); - } - } - } - - public abstract print(): void; - - public start() { - // Empty on purpose - } - - public stop() { - // Empty on purpose - } -} - -/** - * Activity Printer which shows a full log of all CloudFormation events - * - * When there hasn't been activity for a while, it will print the resources - * that are currently in progress, to show what's holding up the deployment. - */ -export class HistoryActivityPrinter extends ActivityPrinterBase { - /** - * Last time we printed something to the console. - * - * Used to measure timeout for progress reporting. - */ - private lastPrintTime = Date.now(); - - /** - * Number of ms of change absence before we tell the user about the resources that are currently in progress. - */ - private readonly inProgressDelay = 30_000; - - private readonly printable = new Array(); - - constructor(props: PrinterProps) { - super(props); - } - - public addActivity(activity: StackActivity) { - super.addActivity(activity); - this.printable.push(activity); - this.print(); - } - - public print() { - for (const activity of this.printable) { - this.printOne(activity); - } - this.printable.splice(0, this.printable.length); - this.printInProgress(); - } - - public stop() { - // Print failures at the end - if (this.failures.length > 0) { - info('\nFailed resources:'); - for (const failure of this.failures) { - // Root stack failures are not interesting - if (failure.isStackEvent) { - continue; - } - - this.printOne(failure, false); - } - } - } - - private printOne(activity: StackActivity, progress?: boolean) { - const event = activity.event; - const color = colorFromStatusResult(event.ResourceStatus); - let reasonColor = chalk.cyan; - - let stackTrace = ''; - const metadata = activity.metadata; - - if (event.ResourceStatus && event.ResourceStatus.indexOf('FAILED') !== -1) { - if (progress == undefined || progress) { - event.ResourceStatusReason = event.ResourceStatusReason ? this.failureReason(activity) : ''; - } - if (metadata) { - stackTrace = metadata.entry.trace ? `\n\t${metadata.entry.trace.join('\n\t\\_ ')}` : ''; - } - reasonColor = chalk.red; - } - - const resourceName = metadata ? metadata.constructPath : event.LogicalResourceId || ''; - - const logicalId = resourceName !== event.LogicalResourceId ? `(${event.LogicalResourceId}) ` : ''; - - info( - util.format( - '%s | %s%s | %s | %s | %s %s%s%s', - event.StackName, - progress !== false ? `${this.progress()} | ` : '', - new Date(event.Timestamp!).toLocaleTimeString(), - color(padRight(STATUS_WIDTH, (event.ResourceStatus || '').slice(0, STATUS_WIDTH))), // pad left and trim - padRight(this.props.resourceTypeColumnWidth, event.ResourceType || ''), - color(chalk.bold(resourceName)), - logicalId, - reasonColor(chalk.bold(event.ResourceStatusReason ? event.ResourceStatusReason : '')), - reasonColor(stackTrace), - ), - ); - - this.lastPrintTime = Date.now(); - } - - /** - * Report the current progress as a [34/42] string, or just [34] if the total is unknown - */ - private progress(): string { - if (this.resourcesTotal == null) { - // Don't have total, show simple count and hope the human knows - return padLeft(3, util.format('%s', this.resourcesDone)); // max 500 resources - } - - return util.format( - '%s/%s', - padLeft(this.resourceDigits, this.resourcesDone.toString()), - padLeft(this.resourceDigits, this.resourcesTotal != null ? this.resourcesTotal.toString() : '?'), - ); - } - - /** - * If some resources are taking a while to create, notify the user about what's currently in progress - */ - private printInProgress() { - if (Date.now() < this.lastPrintTime + this.inProgressDelay) { - return; - } - - if (Object.keys(this.resourcesInProgress).length > 0) { - info( - util.format( - '%s Currently in progress: %s', - this.progress(), - chalk.bold(Object.keys(this.resourcesInProgress).join(', ')), - ), - ); - } - - // We cheat a bit here. To prevent printInProgress() from repeatedly triggering, - // we set the timestamp into the future. It will be reset whenever a regular print - // occurs, after which we can be triggered again. - this.lastPrintTime = +Infinity; - } -} - -/** - * Activity Printer which shows the resources currently being updated - * - * It will continuously reupdate the terminal and show only the resources - * that are currently being updated, in addition to a progress bar which - * shows how far along the deployment is. - * - * Resources that have failed will always be shown, and will be recapitulated - * along with their stack trace when the monitoring ends. - * - * Resources that failed deployment because they have been cancelled are - * not included. - */ -export class CurrentActivityPrinter extends ActivityPrinterBase { - /** - * This looks very disorienting sleeping for 5 seconds. Update quicker. - */ - public readonly updateSleep: number = 2_000; - - private oldLogThreshold: IoMessageLevel; - private readonly stream: NodeJS.WriteStream; - private block: RewritableBlock; - - constructor(props: PrinterProps) { - super(props); - this.oldLogThreshold = CliIoHost.instance().logLevel; - this.stream = props.stream; - this.block = new RewritableBlock(this.stream); - } - - public print(): void { - const lines = []; - - // Add a progress bar at the top - const progressWidth = Math.max( - Math.min((this.block.width ?? 80) - PROGRESSBAR_EXTRA_SPACE - 1, MAX_PROGRESSBAR_WIDTH), - MIN_PROGRESSBAR_WIDTH, - ); - const prog = this.progressBar(progressWidth); - if (prog) { - lines.push(' ' + prog, ''); - } - - // Normally we'd only print "resources in progress", but it's also useful - // to keep an eye on the failures and know about the specific errors asquickly - // as possible (while the stack is still rolling back), so add those in. - const toPrint: StackActivity[] = [...this.failures, ...Object.values(this.resourcesInProgress)]; - toPrint.sort((a, b) => a.event.Timestamp!.getTime() - b.event.Timestamp!.getTime()); - - lines.push( - ...toPrint.map((res) => { - const color = colorFromStatusActivity(res.event.ResourceStatus); - const resourceName = res.metadata?.constructPath ?? res.event.LogicalResourceId ?? ''; - - return util.format( - '%s | %s | %s | %s%s', - padLeft(TIMESTAMP_WIDTH, new Date(res.event.Timestamp!).toLocaleTimeString()), - color(padRight(STATUS_WIDTH, (res.event.ResourceStatus || '').slice(0, STATUS_WIDTH))), - padRight(this.props.resourceTypeColumnWidth, res.event.ResourceType || ''), - color(chalk.bold(shorten(40, resourceName))), - this.failureReasonOnNextLine(res), - ); - }), - ); - - this.block.displayLines(lines); - } - - public start() { - // Need to prevent the waiter from printing 'stack not stable' every 5 seconds, it messes - // with the output calculations. - this.oldLogThreshold = CliIoHost.instance().logLevel; - CliIoHost.instance().logLevel = 'info'; - } - - public stop() { - CliIoHost.instance().logLevel = this.oldLogThreshold; - - // Print failures at the end - const lines = new Array(); - for (const failure of this.failures) { - // Root stack failures are not interesting - if (failure.isStackEvent) { - continue; - } - - lines.push( - util.format( - chalk.red('%s | %s | %s | %s%s') + '\n', - padLeft(TIMESTAMP_WIDTH, new Date(failure.event.Timestamp!).toLocaleTimeString()), - padRight(STATUS_WIDTH, (failure.event.ResourceStatus || '').slice(0, STATUS_WIDTH)), - padRight(this.props.resourceTypeColumnWidth, failure.event.ResourceType || ''), - shorten(40, failure.event.LogicalResourceId ?? ''), - this.failureReasonOnNextLine(failure), - ), - ); - - const trace = failure.metadata?.entry?.trace; - if (trace) { - lines.push(chalk.red(`\t${trace.join('\n\t\\_ ')}\n`)); - } - } - - // Display in the same block space, otherwise we're going to have silly empty lines. - this.block.displayLines(lines); - this.block.removeEmptyLines(); - } - - private progressBar(width: number) { - if (!this.resourcesTotal) { - return ''; - } - const fraction = Math.min(this.resourcesDone / this.resourcesTotal, 1); - const innerWidth = Math.max(1, width - 2); - const chars = innerWidth * fraction; - const remainder = chars - Math.floor(chars); - - const fullChars = FULL_BLOCK.repeat(Math.floor(chars)); - const partialChar = PARTIAL_BLOCK[Math.floor(remainder * PARTIAL_BLOCK.length)]; - const filler = '·'.repeat(innerWidth - Math.floor(chars) - (partialChar ? 1 : 0)); - - const color = this.rollingBack ? chalk.yellow : chalk.green; - - return '[' + color(fullChars + partialChar) + filler + `] (${this.resourcesDone}/${this.resourcesTotal})`; - } - - private failureReasonOnNextLine(activity: StackActivity) { - return hasErrorMessage(activity.event.ResourceStatus ?? '') - ? `\n${' '.repeat(TIMESTAMP_WIDTH + STATUS_WIDTH + 6)}${chalk.red(this.failureReason(activity) ?? '')}` - : ''; - } -} - -const FULL_BLOCK = '█'; -const PARTIAL_BLOCK = ['', '▏', '▎', '▍', '▌', '▋', '▊', '▉']; -const MAX_PROGRESSBAR_WIDTH = 60; -const MIN_PROGRESSBAR_WIDTH = 10; -const PROGRESSBAR_EXTRA_SPACE = - 2 /* leading spaces */ + 2 /* brackets */ + 4 /* progress number decoration */ + 6; /* 2 progress numbers up to 999 */ - -function hasErrorMessage(status: string) { - return status.endsWith('_FAILED') || status === 'ROLLBACK_IN_PROGRESS' || status === 'UPDATE_ROLLBACK_IN_PROGRESS'; -} - -function colorFromStatusResult(status?: string) { - if (!status) { - return chalk.reset; - } - - if (status.indexOf('FAILED') !== -1) { - return chalk.red; - } - if (status.indexOf('ROLLBACK') !== -1) { - return chalk.yellow; - } - if (status.indexOf('COMPLETE') !== -1) { - return chalk.green; - } - - return chalk.reset; -} - -function colorFromStatusActivity(status?: string) { - if (!status) { - return chalk.reset; - } - - if (status.endsWith('_FAILED')) { - return chalk.red; - } - - if (status.startsWith('CREATE_') || status.startsWith('UPDATE_') || status.startsWith('IMPORT_')) { - return chalk.green; - } - // For stacks, it may also be 'UPDDATE_ROLLBACK_IN_PROGRESS' - if (status.indexOf('ROLLBACK_') !== -1) { - return chalk.yellow; - } - if (status.startsWith('DELETE_')) { - return chalk.yellow; - } - - return chalk.reset; -} - -function shorten(maxWidth: number, p: string) { - if (p.length <= maxWidth) { - return p; - } - const half = Math.floor((maxWidth - 3) / 2); - return p.slice(0, half) + '...' + p.slice(-half); -} - -const TIMESTAMP_WIDTH = 12; -const STATUS_WIDTH = 20; diff --git a/packages/aws-cdk/lib/api/stack-events/stack-event-poller.ts b/packages/aws-cdk/lib/api/stack-events/stack-event-poller.ts index 02f93970..e86fcc73 100644 --- a/packages/aws-cdk/lib/api/stack-events/stack-event-poller.ts +++ b/packages/aws-cdk/lib/api/stack-events/stack-event-poller.ts @@ -32,7 +32,14 @@ export interface StackEventPollerProps { } export interface ResourceEvent { + /** + * The Stack Event as received from CloudFormation + */ readonly event: StackEvent; + + /** + * IDs of parent stacks of the resource, in case of resources in nested stacks + */ readonly parentStackLogicalIds: string[]; /** diff --git a/packages/aws-cdk/lib/api/stack-events/stack-progress-monitor.ts b/packages/aws-cdk/lib/api/stack-events/stack-progress-monitor.ts new file mode 100644 index 00000000..5a92bfeb --- /dev/null +++ b/packages/aws-cdk/lib/api/stack-events/stack-progress-monitor.ts @@ -0,0 +1,129 @@ + +import * as util from 'util'; +import { StackEvent } from '@aws-sdk/client-cloudformation'; +import { padLeft } from '../../util/string-manipulation'; + +export interface StackProgress { + /** + * The total number of progress monitored resources. + */ + readonly total?: number; + + /** + * The number of completed resources. + */ + readonly completed: number; + + /** + * The current progress as a [34/42] string, or just [34] if the total is unknown. + */ + readonly formatted: string; +} + +/** + * Monitors stack progress.s + */ +export class StackProgressMonitor { + /** + * Previous completion state observed by logical ID + * + * We use this to detect that if we see a DELETE_COMPLETE after a + * CREATE_COMPLETE, it's actually a rollback and we should DECREASE + * resourcesDone instead of increase it + */ + private resourcesPrevCompleteState: Record = {}; + + /** + * Count of resources that have reported a _COMPLETE status + */ + private resourcesDone: number = 0; + + /** + * How many digits we need to represent the total count (for lining up the status reporting) + */ + private readonly resourceDigits: number = 0; + + /** + * Number of expected resources in the monitor. + */ + private readonly resourcesTotal?: number; + + constructor(resourcesTotal?: number) { + // +1 because the stack also emits a "COMPLETE" event at the end, and that wasn't + // counted yet. This makes it line up with the amount of events we expect. + this.resourcesTotal = resourcesTotal ? resourcesTotal + 1 : undefined; + + // How many digits does this number take to represent? + this.resourceDigits = this.resourcesTotal ? Math.ceil(Math.log10(this.resourcesTotal)) : 0; + } + + /** + * Report the stack progress + */ + public get progress(): StackProgress { + return { + total: this.total, + completed: this.completed, + formatted: this.formatted, + }; + } + + /** + * The total number of progress monitored resources. + */ + public get total(): number | undefined { + return this.resourcesTotal; + } + + /** + * The number of completed resources. + */ + public get completed(): number { + return this.resourcesDone; + } + + /** + * Report the current progress as a [34/42] string, or just [34] if the total is unknown + */ + public get formatted(): string { + if (this.resourcesTotal == null) { + // Don't have total, show simple count and hope the human knows + return padLeft(3, util.format('%s', this.resourcesDone)); // max 500 resources + } + + return util.format( + '%s/%s', + padLeft(this.resourceDigits, this.resourcesDone.toString()), + padLeft(this.resourceDigits, this.resourcesTotal.toString()), + ); + } + + /** + * Process as stack event and update the progress state. + */ + public process(event: StackEvent): void { + const status = event.ResourceStatus; + if (!status || !event.LogicalResourceId) { + return; + } + + if (status.endsWith('_COMPLETE_CLEANUP_IN_PROGRESS')) { + this.resourcesDone++; + } + + if (status.endsWith('_COMPLETE')) { + const prevState = this.resourcesPrevCompleteState[event.LogicalResourceId]; + if (!prevState) { + this.resourcesDone++; + } else { + // If we completed this before and we're completing it AGAIN, means we're rolling back. + // Protect against silly underflow. + this.resourcesDone--; + if (this.resourcesDone < 0) { + this.resourcesDone = 0; + } + } + this.resourcesPrevCompleteState[event.LogicalResourceId] = status; + } + } +} diff --git a/packages/aws-cdk/lib/cli/activity-printer/base.ts b/packages/aws-cdk/lib/cli/activity-printer/base.ts new file mode 100644 index 00000000..2b67dde2 --- /dev/null +++ b/packages/aws-cdk/lib/cli/activity-printer/base.ts @@ -0,0 +1,154 @@ +import { CloudFormationStackArtifact } from '@aws-cdk/cx-api'; +import type { StackActivity } from '../../api/stack-events'; +import { StackProgress } from '../../api/stack-events/stack-progress-monitor'; +import { IoMessage } from '../../toolkit/cli-io-host'; +import { maxResourceTypeLength, stackEventHasErrorMessage } from '../../util'; + +export interface IActivityPrinter { + notify(msg: IoMessage): void; +} + +export interface ActivityPrinterProps { + /** + * Stream to write to + */ + readonly stream: NodeJS.WriteStream; +} + +export abstract class ActivityPrinterBase implements IActivityPrinter { + protected static readonly TIMESTAMP_WIDTH = 12; + protected static readonly STATUS_WIDTH = 20; + + /** + * Stream to write to + */ + protected readonly stream: NodeJS.WriteStream; + + /** + * The with of the "resource type" column. + */ + protected resourceTypeColumnWidth: number = maxResourceTypeLength({}); + + /** + * A list of resource IDs which are currently being processed + */ + protected resourcesInProgress: Record = {}; + + protected stackProgress?: StackProgress; + + protected rollingBack = false; + + protected readonly failures = new Array(); + + protected hookFailureMap = new Map>(); + + constructor(protected readonly props: ActivityPrinterProps) { + this.stream = props.stream; + } + + protected abstract print(): void; + + /** + * Receive a stack activity message + */ + public notify(msg: IoMessage): void { + switch (msg.code) { + case 'CDK_TOOLKIT_I5501': + this.start(msg.data); + break; + case 'CDK_TOOLKIT_I5502': + this.activity(msg.data as StackActivity); + break; + case 'CDK_TOOLKIT_I5503': + this.stop(); + break; + default: + // ignore all other messages + break; + } + } + + public start({ stack }: { stack: CloudFormationStackArtifact}) { + this.resourceTypeColumnWidth = maxResourceTypeLength(stack.template); + } + + public activity(activity: StackActivity) { + // process the activity and then call print + this.addActivity(activity); + this.print(); + } + + public stop() { + // final print after the stack is done + this.print(); + } + + protected addActivity(activity: StackActivity) { + const status = activity.event.ResourceStatus; + const hookStatus = activity.event.HookStatus; + const hookType = activity.event.HookType; + if (!status || !activity.event.LogicalResourceId) { + return; + } + + this.stackProgress = activity.progress; + + if (status === 'ROLLBACK_IN_PROGRESS' || status === 'UPDATE_ROLLBACK_IN_PROGRESS') { + // Only triggered on the stack once we've started doing a rollback + this.rollingBack = true; + } + + if (status.endsWith('_IN_PROGRESS')) { + this.resourcesInProgress[activity.event.LogicalResourceId] = activity; + } + + if (stackEventHasErrorMessage(status)) { + const isCancelled = (activity.event.ResourceStatusReason ?? '').indexOf('cancelled') > -1; + + // Cancelled is not an interesting failure reason + if (!isCancelled) { + this.failures.push(activity); + } + } + + if (status.endsWith('_COMPLETE') || status.endsWith('_FAILED')) { + delete this.resourcesInProgress[activity.event.LogicalResourceId]; + } + + if ( + hookStatus !== undefined && + hookStatus.endsWith('_COMPLETE_FAILED') && + activity.event.LogicalResourceId !== undefined && + hookType !== undefined + ) { + if (this.hookFailureMap.has(activity.event.LogicalResourceId)) { + this.hookFailureMap.get(activity.event.LogicalResourceId)?.set(hookType, activity.event.HookStatusReason ?? ''); + } else { + this.hookFailureMap.set(activity.event.LogicalResourceId, new Map()); + this.hookFailureMap.get(activity.event.LogicalResourceId)?.set(hookType, activity.event.HookStatusReason ?? ''); + } + } + } + + protected failureReason(activity: StackActivity) { + const resourceStatusReason = activity.event.ResourceStatusReason ?? ''; + const logicalResourceId = activity.event.LogicalResourceId ?? ''; + const hookFailureReasonMap = this.hookFailureMap.get(logicalResourceId); + + if (hookFailureReasonMap !== undefined) { + for (const hookType of hookFailureReasonMap.keys()) { + if (resourceStatusReason.includes(hookType)) { + return resourceStatusReason + ' : ' + hookFailureReasonMap.get(hookType); + } + } + } + return resourceStatusReason; + } + + /** + * Is the activity a meta activity for the stack itself. + */ + protected isActivityForTheStack(activity: StackActivity) { + return activity.event.PhysicalResourceId === activity.event.StackId; + } +} diff --git a/packages/aws-cdk/lib/cli/activity-printer/current.ts b/packages/aws-cdk/lib/cli/activity-printer/current.ts new file mode 100644 index 00000000..e8e8d8aa --- /dev/null +++ b/packages/aws-cdk/lib/cli/activity-printer/current.ts @@ -0,0 +1,165 @@ +import * as util from 'util'; +import * as chalk from 'chalk'; +import { ActivityPrinterBase, ActivityPrinterProps } from './base'; +import { RewritableBlock } from './display'; +import type { StackActivity } from '../../api/stack-events'; +import { padLeft, padRight, stackEventHasErrorMessage } from '../../util'; + +/** + * Activity Printer which shows the resources currently being updated + * + * It will continuously re-update the terminal and show only the resources + * that are currently being updated, in addition to a progress bar which + * shows how far along the deployment is. + * + * Resources that have failed will always be shown, and will be recapitulated + * along with their stack trace when the monitoring ends. + * + * Resources that failed deployment because they have been cancelled are + * not included. + */ +export class CurrentActivityPrinter extends ActivityPrinterBase { + /** + * Continuously write to the same output block. + */ + private block: RewritableBlock; + + constructor(props: ActivityPrinterProps) { + super(props); + this.block = new RewritableBlock(this.stream); + } + + protected print(): void { + const lines = []; + + // Add a progress bar at the top + const progressWidth = Math.max( + Math.min((this.block.width ?? 80) - PROGRESSBAR_EXTRA_SPACE - 1, MAX_PROGRESSBAR_WIDTH), + MIN_PROGRESSBAR_WIDTH, + ); + const prog = this.progressBar(progressWidth); + if (prog) { + lines.push(' ' + prog, ''); + } + + // Normally we'd only print "resources in progress", but it's also useful + // to keep an eye on the failures and know about the specific errors asquickly + // as possible (while the stack is still rolling back), so add those in. + const toPrint: StackActivity[] = [...this.failures, ...Object.values(this.resourcesInProgress)]; + toPrint.sort((a, b) => a.event.Timestamp!.getTime() - b.event.Timestamp!.getTime()); + + lines.push( + ...toPrint.map((res) => { + const color = colorFromStatusActivity(res.event.ResourceStatus); + const resourceName = res.metadata?.constructPath ?? res.event.LogicalResourceId ?? ''; + + return util.format( + '%s | %s | %s | %s%s', + padLeft(CurrentActivityPrinter.TIMESTAMP_WIDTH, new Date(res.event.Timestamp!).toLocaleTimeString()), + color(padRight(CurrentActivityPrinter.STATUS_WIDTH, (res.event.ResourceStatus || '').slice(0, CurrentActivityPrinter.STATUS_WIDTH))), + padRight(this.resourceTypeColumnWidth, res.event.ResourceType || ''), + color(chalk.bold(shorten(40, resourceName))), + this.failureReasonOnNextLine(res), + ); + }), + ); + + this.block.displayLines(lines); + } + + public stop() { + super.stop(); + + // Print failures at the end + const lines = new Array(); + for (const failure of this.failures) { + // Root stack failures are not interesting + if (this.isActivityForTheStack(failure)) { + continue; + } + + lines.push( + util.format( + chalk.red('%s | %s | %s | %s%s') + '\n', + padLeft(CurrentActivityPrinter.TIMESTAMP_WIDTH, new Date(failure.event.Timestamp!).toLocaleTimeString()), + padRight(CurrentActivityPrinter.STATUS_WIDTH, (failure.event.ResourceStatus || '').slice(0, CurrentActivityPrinter.STATUS_WIDTH)), + padRight(this.resourceTypeColumnWidth, failure.event.ResourceType || ''), + shorten(40, failure.event.LogicalResourceId ?? ''), + this.failureReasonOnNextLine(failure), + ), + ); + + const trace = failure.metadata?.entry?.trace; + if (trace) { + lines.push(chalk.red(`\t${trace.join('\n\t\\_ ')}\n`)); + } + } + + // Display in the same block space, otherwise we're going to have silly empty lines. + this.block.displayLines(lines); + this.block.removeEmptyLines(); + } + + private progressBar(width: number) { + if (!this.stackProgress || !this.stackProgress.total) { + return ''; + } + const fraction = Math.min(this.stackProgress.completed / this.stackProgress.total, 1); + const innerWidth = Math.max(1, width - 2); + const chars = innerWidth * fraction; + const remainder = chars - Math.floor(chars); + + const fullChars = FULL_BLOCK.repeat(Math.floor(chars)); + const partialChar = PARTIAL_BLOCK[Math.floor(remainder * PARTIAL_BLOCK.length)]; + const filler = '·'.repeat(innerWidth - Math.floor(chars) - (partialChar ? 1 : 0)); + + const color = this.rollingBack ? chalk.yellow : chalk.green; + + return '[' + color(fullChars + partialChar) + filler + `] (${this.stackProgress.completed}/${this.stackProgress.total})`; + } + + private failureReasonOnNextLine(activity: StackActivity) { + return stackEventHasErrorMessage(activity.event.ResourceStatus ?? '') + ? `\n${' '.repeat(CurrentActivityPrinter.TIMESTAMP_WIDTH + CurrentActivityPrinter.STATUS_WIDTH + 6)}${chalk.red(this.failureReason(activity) ?? '')}` + : ''; + } +} + +const FULL_BLOCK = '█'; +const PARTIAL_BLOCK = ['', '▏', '▎', '▍', '▌', '▋', '▊', '▉']; +const MAX_PROGRESSBAR_WIDTH = 60; +const MIN_PROGRESSBAR_WIDTH = 10; +const PROGRESSBAR_EXTRA_SPACE = + 2 /* leading spaces */ + 2 /* brackets */ + 4 /* progress number decoration */ + 6; /* 2 progress numbers up to 999 */ + +function colorFromStatusActivity(status?: string) { + if (!status) { + return chalk.reset; + } + + if (status.endsWith('_FAILED')) { + return chalk.red; + } + + if (status.startsWith('CREATE_') || status.startsWith('UPDATE_') || status.startsWith('IMPORT_')) { + return chalk.green; + } + // For stacks, it may also be 'UPDDATE_ROLLBACK_IN_PROGRESS' + if (status.indexOf('ROLLBACK_') !== -1) { + return chalk.yellow; + } + if (status.startsWith('DELETE_')) { + return chalk.yellow; + } + + return chalk.reset; +} + +function shorten(maxWidth: number, p: string) { + if (p.length <= maxWidth) { + return p; + } + const half = Math.floor((maxWidth - 3) / 2); + return p.slice(0, half) + '...' + p.slice(-half); +} + diff --git a/packages/aws-cdk/lib/api/stack-events/display.ts b/packages/aws-cdk/lib/cli/activity-printer/display.ts similarity index 100% rename from packages/aws-cdk/lib/api/stack-events/display.ts rename to packages/aws-cdk/lib/cli/activity-printer/display.ts diff --git a/packages/aws-cdk/lib/cli/activity-printer/history.ts b/packages/aws-cdk/lib/cli/activity-printer/history.ts new file mode 100644 index 00000000..c6cafb12 --- /dev/null +++ b/packages/aws-cdk/lib/cli/activity-printer/history.ts @@ -0,0 +1,145 @@ +import * as util from 'util'; +import * as chalk from 'chalk'; +import { ActivityPrinterBase, ActivityPrinterProps } from './base'; +import type { StackActivity } from '../../api/stack-events'; +import { padRight } from '../../util'; + +/** + * Activity Printer which shows a full log of all CloudFormation events + * + * When there hasn't been activity for a while, it will print the resources + * that are currently in progress, to show what's holding up the deployment. + */ +export class HistoryActivityPrinter extends ActivityPrinterBase { + /** + * Last time we printed something to the console. + * + * Used to measure timeout for progress reporting. + */ + private lastPrintTime = Date.now(); + + private lastPrinted?: StackActivity; + + /** + * Number of ms of change absence before we tell the user about the resources that are currently in progress. + */ + private readonly inProgressDelay = 30_000; + + private readonly printable = new Array(); + + constructor(props: ActivityPrinterProps) { + super(props); + } + + public activity(activity: StackActivity) { + this.printable.push(activity); + super.activity(activity); + } + + public stop() { + super.stop(); + + // Print failures at the end + if (this.failures.length > 0) { + this.stream.write('\nFailed resources:\n'); + for (const failure of this.failures) { + // Root stack failures are not interesting + if (this.isActivityForTheStack(failure)) { + continue; + } + + this.printOne(failure, false); + } + } + } + + protected print() { + for (const activity of this.printable) { + this.printOne(activity); + this.lastPrinted = activity; + } + this.printable.splice(0, this.printable.length); + this.printInProgress(this.lastPrinted?.progress.formatted); + } + + private printOne(activity: StackActivity, progress?: boolean) { + const event = activity.event; + const color = colorFromStatusResult(event.ResourceStatus); + let reasonColor = chalk.cyan; + + let stackTrace = ''; + const metadata = activity.metadata; + + if (event.ResourceStatus && event.ResourceStatus.indexOf('FAILED') !== -1) { + if (progress == undefined || progress) { + event.ResourceStatusReason = event.ResourceStatusReason ? this.failureReason(activity) : ''; + } + if (metadata) { + stackTrace = metadata.entry.trace ? `\n\t${metadata.entry.trace.join('\n\t\\_ ')}` : ''; + } + reasonColor = chalk.red; + } + + const resourceName = metadata ? metadata.constructPath : event.LogicalResourceId || ''; + const logicalId = resourceName !== event.LogicalResourceId ? `(${event.LogicalResourceId}) ` : ''; + + this.stream.write( + util.format( + '%s | %s%s | %s | %s | %s %s%s%s\n', + event.StackName, + progress !== false ? `${activity.progress.formatted} | ` : '', + new Date(event.Timestamp!).toLocaleTimeString(), + color(padRight(HistoryActivityPrinter.STATUS_WIDTH, (event.ResourceStatus || '').slice(0, HistoryActivityPrinter.STATUS_WIDTH))), // pad left and trim + padRight(this.resourceTypeColumnWidth, event.ResourceType || ''), + color(chalk.bold(resourceName)), + logicalId, + reasonColor(chalk.bold(event.ResourceStatusReason ? event.ResourceStatusReason : '')), + reasonColor(stackTrace), + ), + ); + + this.lastPrintTime = Date.now(); + } + + /** + * If some resources are taking a while to create, notify the user about what's currently in progress + */ + private printInProgress(progress?: string) { + if (!progress || Date.now() < this.lastPrintTime + this.inProgressDelay) { + return; + } + + if (Object.keys(this.resourcesInProgress).length > 0) { + this.stream.write( + util.format( + '%s Currently in progress: %s\n', + progress, + chalk.bold(Object.keys(this.resourcesInProgress).join(', ')), + ), + ); + } + + // We cheat a bit here. To prevent printInProgress() from repeatedly triggering, + // we set the timestamp into the future. It will be reset whenever a regular print + // occurs, after which we can be triggered again. + this.lastPrintTime = +Infinity; + } +} + +function colorFromStatusResult(status?: string) { + if (!status) { + return chalk.reset; + } + + if (status.indexOf('FAILED') !== -1) { + return chalk.red; + } + if (status.indexOf('ROLLBACK') !== -1) { + return chalk.yellow; + } + if (status.indexOf('COMPLETE') !== -1) { + return chalk.green; + } + + return chalk.reset; +} diff --git a/packages/aws-cdk/lib/cli/activity-printer/index.ts b/packages/aws-cdk/lib/cli/activity-printer/index.ts new file mode 100644 index 00000000..b82fd2e0 --- /dev/null +++ b/packages/aws-cdk/lib/cli/activity-printer/index.ts @@ -0,0 +1,3 @@ +export * from './base'; +export * from './history'; +export * from './current'; diff --git a/packages/aws-cdk/lib/cli/cdk-toolkit.ts b/packages/aws-cdk/lib/cli/cdk-toolkit.ts index f8434246..bcd112ce 100644 --- a/packages/aws-cdk/lib/cli/cdk-toolkit.ts +++ b/packages/aws-cdk/lib/cli/cdk-toolkit.ts @@ -25,10 +25,10 @@ import { HotswapMode, HotswapPropertyOverrides, EcsHotswapProperties } from '../ import { findCloudWatchLogGroups } from '../api/logs/find-cloudwatch-logs'; import { CloudWatchLogEventMonitor } from '../api/logs/logs-monitor'; import { ResourceImporter, removeNonImportResources, ResourceMigrator } from '../api/resource-import'; -import { StackActivityProgress } from '../api/stack-events'; import { tagsForStack, type Tag } from '../api/tags'; import { type AssetBuildNode, type AssetPublishNode, type Concurrency, type StackNode, type WorkGraph } from '../api/work-graph'; import { WorkGraphBuilder } from '../api/work-graph/work-graph-builder'; +import { StackActivityProgress } from '../commands/deploy'; import { generateCdkApp, generateStack, @@ -453,8 +453,6 @@ export class CdkToolkit { force: options.force, parameters: Object.assign({}, parameterMap['*'], parameterMap[stack.stackName]), usePreviousParameters: options.usePreviousParameters, - progress, - ci: options.ci, rollback, hotswap: options.hotswap, hotswapPropertyOverrides: hotswapPropertyOverrides, @@ -574,9 +572,14 @@ export class CdkToolkit { const assetBuildTime = options.assetBuildTime ?? AssetBuildTime.ALL_BEFORE_DEPLOY; const prebuildAssets = assetBuildTime === AssetBuildTime.ALL_BEFORE_DEPLOY; const concurrency = options.concurrency || 1; - const progress = concurrency > 1 ? StackActivityProgress.EVENTS : options.progress; - if (concurrency > 1 && options.progress && options.progress != StackActivityProgress.EVENTS) { - warning('⚠️ The --concurrency flag only supports --progress "events". Switching to "events".'); + if (concurrency > 1) { + // always force "events" progress output when we have concurrency + this.ioHost.stackProgress = StackActivityProgress.EVENTS; + + // ...but only warn if the user explicitly requested "bar" progress + if (options.progress && options.progress != StackActivityProgress.EVENTS) { + warning('⚠️ The --concurrency flag only supports --progress "events". Switching to "events".'); + } } const stacksAndTheirAssetManifests = stacks.flatMap((stack) => [ @@ -810,7 +813,6 @@ export class CdkToolkit { tags, deploymentMethod: options.deploymentMethod, usePreviousParameters: true, - progress: options.progress, rollback: options.rollback, }); diff --git a/packages/aws-cdk/lib/cli/cli-config.ts b/packages/aws-cdk/lib/cli/cli-config.ts index 11ef8dc6..f8c74beb 100644 --- a/packages/aws-cdk/lib/cli/cli-config.ts +++ b/packages/aws-cdk/lib/cli/cli-config.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line import/no-extraneous-dependencies import { CliHelpers, type CliConfig } from '@aws-cdk/user-input-gen'; import * as cdk_from_cfn from 'cdk-from-cfn'; -import { StackActivityProgress } from '../api/stack-events'; +import { StackActivityProgress } from '../commands/deploy'; import { RequireApproval } from '../diff'; import { availableInitLanguages } from '../init'; diff --git a/packages/aws-cdk/lib/cli/cli.ts b/packages/aws-cdk/lib/cli/cli.ts index 019045ec..d9d33ef9 100644 --- a/packages/aws-cdk/lib/cli/cli.ts +++ b/packages/aws-cdk/lib/cli/cli.ts @@ -62,6 +62,7 @@ export async function exec(args: string[], synthesizer?: Synthesizer): Promise levelPriority.info; + if (verboseLogging) { + return StackActivityProgress.EVENTS; + } + + // On Windows we cannot use fancy output + const isWindows = process.platform === 'win32'; + if (isWindows) { + return StackActivityProgress.EVENTS; + } + + // On some CI systems (such as CircleCI) output still reports as a TTY so we also + // need an individual check for whether we're running on CI. + // see: https://discuss.circleci.com/t/circleci-terminal-is-a-tty-but-term-is-not-set/9965 + const fancyOutputAvailable = this.isTTY && !this.isCI; + if (!fancyOutputAvailable) { + return StackActivityProgress.EVENTS; + } + + // Use the user preference + return this._progress; + } + /** * The current action being performed by the CLI. */ @@ -303,6 +361,14 @@ export class CliIoHost implements IIoHost { return this._internalIoHost.notify(msg); } + if (this.isStackActivity(msg)) { + if (!this.activityPrinter) { + this.activityPrinter = this.makeActivityPrinter(); + } + await this.activityPrinter.notify(msg); + return; + } + if (levelPriority[msg.level] > levelPriority[this.logLevel]) { return; } @@ -317,6 +383,17 @@ export class CliIoHost implements IIoHost { stream.write(output); } + /** + * Detect stack activity messages so they can be send to the printer. + */ + private isStackActivity(msg: IoMessage) { + return [ + 'CDK_TOOLKIT_I5501', + 'CDK_TOOLKIT_I5502', + 'CDK_TOOLKIT_I5503', + ].includes(msg.code); + } + /** * Determines the output stream, based on message level and configuration. */ @@ -423,6 +500,22 @@ export class CliIoHost implements IIoHost { const pad = (n: number): string => n.toString().padStart(2, '0'); return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; } + + /** + * Get an instance of the ActivityPrinter + */ + private makeActivityPrinter() { + const props: ActivityPrinterProps = { + stream: this.selectStream('info'), + }; + + switch (this.stackProgress) { + case StackActivityProgress.EVENTS: + return new HistoryActivityPrinter(props); + case StackActivityProgress.BAR: + return new CurrentActivityPrinter(props); + } + } } /** @@ -474,3 +567,4 @@ const styleMap: Record string> = { export function isCI(): boolean { return process.env.CI !== undefined && process.env.CI !== 'false' && process.env.CI !== '0'; } + diff --git a/packages/aws-cdk/lib/util/cloudformation.ts b/packages/aws-cdk/lib/util/cloudformation.ts index 4d1f458a..0ca94b20 100644 --- a/packages/aws-cdk/lib/util/cloudformation.ts +++ b/packages/aws-cdk/lib/util/cloudformation.ts @@ -4,3 +4,29 @@ export function validateSnsTopicArn(arn: string): boolean { return /^arn:aws:sns:[a-z0-9\-]+:[0-9]+:[a-z0-9\-\_]+$/i.test(arn); } + +/** + * Does a Stack Event have an error message based on the status. + */ +export function stackEventHasErrorMessage(status: string): boolean { + return status.endsWith('_FAILED') || status === 'ROLLBACK_IN_PROGRESS' || status === 'UPDATE_ROLLBACK_IN_PROGRESS'; +} + +/** + * Calculate the maximal length of all resource types for a given template. + * + * @param template the stack template to analyze + * @param startWidth the initial width to start with. Defaults to the length of 'AWS::CloudFormation::Stack'. + * @returns the determined width + */ +export function maxResourceTypeLength(template: any, startWidth = 'AWS::CloudFormation::Stack'.length): number { + const resources = (template && template.Resources) || {}; + let maxWidth = startWidth; + for (const id of Object.keys(resources)) { + const type = resources[id].Type || ''; + if (type.length > maxWidth) { + maxWidth = type.length; + } + } + return maxWidth; +} diff --git a/packages/aws-cdk/lib/util/string-manipulation.ts b/packages/aws-cdk/lib/util/string-manipulation.ts index 87f6453b..098beacd 100644 --- a/packages/aws-cdk/lib/util/string-manipulation.ts +++ b/packages/aws-cdk/lib/util/string-manipulation.ts @@ -1,9 +1,15 @@ /** * Pad 's' on the left with 'char' until it is n characters wide */ -export function leftPad(s: string, n: number, char: string) { - const padding = Math.max(0, n - s.length); - return char.repeat(padding) + s; +export function padLeft(n: number, x: string, char: string = ' '): string { + return char.repeat(Math.max(0, n - x.length)) + x; +} + +/** + * Pad 's' on the right with 'char' until it is n characters wide + */ +export function padRight(n: number, x: string, char: string = ' '): string { + return x + char.repeat(Math.max(0, n - x.length)); } /** diff --git a/packages/aws-cdk/test/api/stack-events/progress-monitor.test.ts b/packages/aws-cdk/test/api/stack-events/progress-monitor.test.ts new file mode 100644 index 00000000..b2dba634 --- /dev/null +++ b/packages/aws-cdk/test/api/stack-events/progress-monitor.test.ts @@ -0,0 +1,116 @@ +import { ResourceStatus } from '@aws-sdk/client-cloudformation'; +import { StackProgressMonitor } from '../../../lib/api/stack-events/stack-progress-monitor'; + +let TIMESTAMP: number; +beforeAll(() => { + TIMESTAMP = new Date().getTime(); +}); + +test('prints 0/4 progress report, when addActivity is called with an "IN_PROGRESS" ResourceStatus', () => { + const stackProgress = new StackProgressMonitor(3); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.CREATE_IN_PROGRESS, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('0/4'); +}); + +test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => { + const stackProgress = new StackProgressMonitor(3); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_COMPLETE, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('1/4'); +}); + +test('prints 1/4 progress report, when addActivity is called with an "ROLLBACK_COMPLETE" ResourceStatus', () => { + const stackProgress = new StackProgressMonitor(3); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.ROLLBACK_COMPLETE, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('1/4'); +}); + +test('prints 0/4 progress report, when addActivity is called with an "UPDATE_FAILED" ResourceStatus', () => { + const stackProgress = new StackProgressMonitor(3); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_FAILED, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('0/4'); +}); + + +test('prints " 1" progress report, when number of resources is unknown and addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => { + const stackProgress = new StackProgressMonitor(); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_COMPLETE, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual(' 1'); +}); + +test('will count backwards when resource is first completed and then rolled back', () => { + const stackProgress = new StackProgressMonitor(3); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_COMPLETE, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('1/4'); + + stackProgress.process({ + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.ROLLBACK_COMPLETE, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }); + + expect(stackProgress.formatted).toStrictEqual('0/4'); +}); diff --git a/packages/aws-cdk/test/api/stack-events/stack-activity-monitor.test.ts b/packages/aws-cdk/test/api/stack-events/stack-activity-monitor.test.ts index b760dda0..19bca77d 100644 --- a/packages/aws-cdk/test/api/stack-events/stack-activity-monitor.test.ts +++ b/packages/aws-cdk/test/api/stack-events/stack-activity-monitor.test.ts @@ -1,309 +1,285 @@ -/* eslint-disable import/order */ -import * as chalk from 'chalk'; -import { stderr } from '../_helpers/console-listener'; -import { HistoryActivityPrinter } from '../../../lib/api/stack-events'; -import { ResourceStatus } from '@aws-sdk/client-cloudformation'; -import { CliIoHost } from '../../../lib/toolkit/cli-io-host'; - -let TIMESTAMP: number; -let HUMAN_TIME: string; - -beforeAll(() => { - TIMESTAMP = new Date().getTime(); - HUMAN_TIME = new Date(TIMESTAMP).toLocaleTimeString(); - CliIoHost.instance().isCI = false; -}); +import { + DescribeStackEventsCommand, + ResourceStatus, + type StackEvent, + StackStatus, +} from '@aws-sdk/client-cloudformation'; +import { MockSdk, mockCloudFormationClient, restoreSdkMocksToDefault } from '../../util/mock-sdk'; +import { StackActivityMonitor } from '../../../lib/api/stack-events'; +import { IIoHost } from '../../../lib/toolkit/cli-io-host'; +import { testStack } from '../../util'; -test('prints 0/4 progress report, when addActivity is called with an "IN_PROGRESS" ResourceStatus', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 3, - stream: process.stderr, - }); +let sdk: MockSdk; +let monitor: StackActivityMonitor; +let ioHost: IIoHost = { + notify: jest.fn(), + requestResponse: jest.fn().mockImplementation((msg) => msg.defaultResponse), +} +beforeEach(async () => { + sdk = new MockSdk(); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.CREATE_IN_PROGRESS, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], - }); - }); + monitor = await new StackActivityMonitor({ + cfn: sdk.cloudFormation(), + ioHost, + action: 'deploy', + stack: testStack({ + stackName: 'StackName', + }), + stackName: 'StackName', + changeSetCreationTime: new Date(T100), + pollingInterval: 0, + }).start(); - expect(output[0].trim()).toStrictEqual( - `stack-name | 0/4 | ${HUMAN_TIME} | ${chalk.reset('CREATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, - ); + restoreSdkMocksToDefault(); }); -test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 3, - stream: process.stderr, - }); - - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_COMPLETE, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], +describe('stack monitor event ordering and pagination', () => { + test('continue to the next page if it exists', async () => { + mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ + StackEvents: [event(102), event(101)], }); - }); - expect(output[0].trim()).toStrictEqual( - `stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`, - ); -}); + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); -test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 3, - stream: process.stderr, + // Printer sees them in chronological order + expect(ioHost.notify).toHaveBeenCalledTimes(4); + expect(ioHost.notify).toHaveBeenNthCalledWith(1, expectStart()); + expect(ioHost.notify).toHaveBeenNthCalledWith(2, expectEvent(101)); + expect(ioHost.notify).toHaveBeenNthCalledWith(3, expectEvent(102)); + expect(ioHost.notify).toHaveBeenNthCalledWith(4, expectStop()); + }); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_COMPLETE, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], - }); - }); + test('do not page further if we already saw the last event', async () => { + mockCloudFormationClient + .on(DescribeStackEventsCommand) + .resolvesOnce({ + StackEvents: [event(101)], + }) + .resolvesOnce({ + StackEvents: [event(102), event(101)], + }) + .resolvesOnce({}); - expect(output[0].trim()).toStrictEqual( - `stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`, - ); -}); + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); -test('prints 1/4 progress report, when addActivity is called with an "ROLLBACK_COMPLETE" ResourceStatus', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 3, - stream: process.stderr, + // Seen in chronological order + expect(ioHost.notify).toHaveBeenCalledTimes(4); + expect(ioHost.notify).toHaveBeenNthCalledWith(1, expectStart()); + expect(ioHost.notify).toHaveBeenNthCalledWith(2, expectEvent(101)); + expect(ioHost.notify).toHaveBeenNthCalledWith(3, expectEvent(102)); + expect(ioHost.notify).toHaveBeenNthCalledWith(4, expectStop()); }); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.ROLLBACK_COMPLETE, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], - }); - }); + test('do not page further if the last event is too old', async () => { + mockCloudFormationClient + .on(DescribeStackEventsCommand) + .resolvesOnce({ + StackEvents: [event(101), event(95)], + }) + .resolvesOnce({ + StackEvents: [], + }); - expect(output[0].trim()).toStrictEqual( - `stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.yellow('ROLLBACK_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.yellow(chalk.bold('stack1'))}`, - ); -}); + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); -test('prints 0/4 progress report, when addActivity is called with an "UPDATE_FAILED" ResourceStatus', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 3, - stream: process.stderr, + // Seen only the new one + expect(ioHost.notify).toHaveBeenCalledTimes(3); + expect(ioHost.notify).toHaveBeenNthCalledWith(1, expectStart()); + expect(ioHost.notify).toHaveBeenNthCalledWith(2, expectEvent(101)); + expect(ioHost.notify).toHaveBeenNthCalledWith(3, expectStop()); }); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_FAILED, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], + test('do a final request after the monitor is stopped', async () => { + mockCloudFormationClient.on(DescribeStackEventsCommand).resolves({ + StackEvents: [event(101)], + }); + // Establish that we've received events prior to stop and then reset the mock + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + mockCloudFormationClient.resetHistory(); + await monitor.stop(); + mockCloudFormationClient.on(DescribeStackEventsCommand).resolves({ + StackEvents: [event(102), event(101)], }); + // Since we can't reset the mock to a new value before calling stop, we'll have to check + // and make sure it's called again instead. + expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand); }); - - expect(output[0].trim()).toStrictEqual( - `stack-name | 0/4 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`, - ); }); -test('does not print "Failed Resources:" list, when all deployments are successful', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 1, - stream: process.stderr, - }); - - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], - }); - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_COMPLETE, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], +describe('stack monitor, collecting errors from events', () => { + test('return errors from the root stack', async () => { + mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ + StackEvents: [addErrorToStackEvent(event(100))], }); - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack2', - ResourceStatus: ResourceStatus.UPDATE_COMPLETE, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], - }); - historyActivityPrinter.stop(); + + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); + expect(monitor.errors).toStrictEqual(['Test Error']); }); - expect(output.length).toStrictEqual(3); - expect(output[0].trim()).toStrictEqual( - `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, - ); - expect(output[1].trim()).toStrictEqual( - `stack-name | 1/2 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`, - ); - expect(output[2].trim()).toStrictEqual( - `stack-name | 2/2 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack2'))}`, - ); -}); + test('return errors from the nested stack', async () => { + mockCloudFormationClient + .on(DescribeStackEventsCommand) + .resolvesOnce({ + StackEvents: [ + addErrorToStackEvent(event(102), { + logicalResourceId: 'nestedStackLogicalResourceId', + physicalResourceId: 'nestedStackPhysicalResourceId', + resourceType: 'AWS::CloudFormation::Stack', + resourceStatusReason: 'nested stack failed', + resourceStatus: ResourceStatus.UPDATE_FAILED, + }), + addErrorToStackEvent(event(100), { + logicalResourceId: 'nestedStackLogicalResourceId', + physicalResourceId: 'nestedStackPhysicalResourceId', + resourceType: 'AWS::CloudFormation::Stack', + resourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, + }), + ], + }) + .resolvesOnce({ + StackEvents: [ + addErrorToStackEvent(event(101), { + logicalResourceId: 'nestedResource', + resourceType: 'Some::Nested::Resource', + resourceStatusReason: 'actual failure error message', + }), + ], + }); -test('prints "Failed Resources:" list, when at least one deployment fails', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 1, - stream: process.stderr, + await eventually( + () => + expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(1, DescribeStackEventsCommand, { + StackName: 'StackName', + }), + 2, + ); + + await eventually( + () => + expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(2, DescribeStackEventsCommand, { + StackName: 'nestedStackPhysicalResourceId', + }), + 2, + ); + await monitor.stop(); + expect(monitor.errors).toStrictEqual(['actual failure error message', 'nested stack failed']); }); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], + test('does not consider events without physical resource id for monitoring nested stacks', async () => { + mockCloudFormationClient + .on(DescribeStackEventsCommand) + .resolvesOnce({ + StackEvents: [ + addErrorToStackEvent(event(100), { + logicalResourceId: 'nestedStackLogicalResourceId', + physicalResourceId: '', + resourceType: 'AWS::CloudFormation::Stack', + resourceStatusReason: 'nested stack failed', + }), + ], + NextToken: 'nextToken', + }) + .resolvesOnce({ + StackEvents: [ + addErrorToStackEvent(event(101), { + logicalResourceId: 'OtherResource', + resourceType: 'Some::Other::Resource', + resourceStatusReason: 'some failure', + }), + ], + }); + + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); + + expect(monitor.errors).toStrictEqual(['nested stack failed', 'some failure']); + expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(1, DescribeStackEventsCommand, { + StackName: 'StackName', }); - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_FAILED, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - }, - parentStackLogicalIds: [], + // Note that the second call happened for the top level stack instead of a nested stack + expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(2, DescribeStackEventsCommand, { + StackName: 'StackName', }); - historyActivityPrinter.stop(); }); - expect(output.length).toStrictEqual(4); - expect(output[0].trim()).toStrictEqual( - `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, - ); - expect(output[1].trim()).toStrictEqual( - `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`, - ); - expect(output[2].trim()).toStrictEqual('Failed resources:'); - expect(output[3].trim()).toStrictEqual( - `stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`, - ); -}); + test('does not check for nested stacks that have already completed successfully', async () => { + mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ + StackEvents: [ + addErrorToStackEvent(event(100), { + logicalResourceId: 'nestedStackLogicalResourceId', + physicalResourceId: 'nestedStackPhysicalResourceId', + resourceType: 'AWS::CloudFormation::Stack', + resourceStatusReason: 'nested stack status reason', + resourceStatus: StackStatus.CREATE_COMPLETE, + }), + ], + }); -test('print failed resources because of hook failures', () => { - const historyActivityPrinter = new HistoryActivityPrinter({ - resourceTypeColumnWidth: 23, - resourcesTotal: 1, - stream: process.stderr, - }); + await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); + await monitor.stop(); - const output = stderr.inspectSync(() => { - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - HookStatus: 'HOOK_COMPLETE_FAILED', - HookType: 'hook1', - HookStatusReason: 'stack1 must obey certain rules', - }, - parentStackLogicalIds: [], - }); - historyActivityPrinter.addActivity({ - event: { - LogicalResourceId: 'stack1', - ResourceStatus: ResourceStatus.UPDATE_FAILED, - Timestamp: new Date(TIMESTAMP), - ResourceType: 'AWS::CloudFormation::Stack', - StackId: '', - EventId: '', - StackName: 'stack-name', - ResourceStatusReason: 'The following hook(s) failed: hook1', - }, - parentStackLogicalIds: [], - }); - historyActivityPrinter.stop(); + expect(monitor.errors).toStrictEqual([]); }); +}); + +const T0 = 1597837230504; + +// Events 0-99 are before we started paying attention +const T100 = T0 + 100 * 1000; + +function event(nr: number): StackEvent { + return { + EventId: `${nr}`, + StackId: 'StackId', + StackName: 'StackName', + Timestamp: new Date(T0 + nr * 1000), + }; +} + +function addErrorToStackEvent( + eventToUpdate: StackEvent, + props: { + resourceStatus?: ResourceStatus; + resourceType?: string; + resourceStatusReason?: string; + logicalResourceId?: string; + physicalResourceId?: string; + } = {}, +): StackEvent { + eventToUpdate.ResourceStatus = props.resourceStatus ?? ResourceStatus.UPDATE_FAILED; + eventToUpdate.ResourceType = props.resourceType ?? 'Test::Resource::Type'; + eventToUpdate.ResourceStatusReason = props.resourceStatusReason ?? 'Test Error'; + eventToUpdate.LogicalResourceId = props.logicalResourceId ?? 'testLogicalId'; + eventToUpdate.PhysicalResourceId = props.physicalResourceId ?? 'testPhysicalResourceId'; + return eventToUpdate; +} + +const wait = (): Promise => new Promise((resolve) => setTimeout(resolve, 5)); + +// Using the eventually function to ensure these functions have had sufficient time to execute. +const eventually = async (call: () => void, attempts: number): Promise => { + while (attempts-- >= 0) { + try { + return call(); + } catch (err) { + if (attempts <= 0) throw err; + } + await wait(); + } + + throw new Error('An unexpected error has occurred.'); +}; - expect(output.length).toStrictEqual(4); - expect(output[0].trim()).toStrictEqual( - `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, - ); - expect(output[1].trim()).toStrictEqual( - `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`, - ); - expect(output[2].trim()).toStrictEqual('Failed resources:'); - expect(output[3].trim()).toStrictEqual( - `stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`, - ); +const expectStart = () => expect.objectContaining({ code: 'CDK_TOOLKIT_I5501' }); +const expectStop = () => expect.objectContaining({ code: 'CDK_TOOLKIT_I5503' }); +const expectEvent = (id: number) => expect.objectContaining({ + code: 'CDK_TOOLKIT_I5502', + data: expect.objectContaining({ + event: expect.objectContaining({ 'EventId': String(id) }) + }) }); diff --git a/packages/aws-cdk/test/api/stack-events/stack-monitor.test.ts b/packages/aws-cdk/test/api/stack-events/stack-monitor.test.ts deleted file mode 100644 index 50a8ab4d..00000000 --- a/packages/aws-cdk/test/api/stack-events/stack-monitor.test.ts +++ /dev/null @@ -1,271 +0,0 @@ -import { - DescribeStackEventsCommand, - ResourceStatus, - type StackEvent, - StackStatus, -} from '@aws-sdk/client-cloudformation'; -import { MockSdk, mockCloudFormationClient, restoreSdkMocksToDefault } from '../../util/mock-sdk'; -import { - StackActivityMonitor, - type IActivityPrinter, - type StackActivity, -} from '../../../lib/api/stack-events'; - -let sdk: MockSdk; -let printer: FakePrinter; -let monitor: StackActivityMonitor; -beforeEach(() => { - sdk = new MockSdk(); - - printer = new FakePrinter(); - monitor = new StackActivityMonitor(sdk.cloudFormation(), 'StackName', printer, undefined, new Date(T100)).start(); - - restoreSdkMocksToDefault(); -}); - -describe('stack monitor event ordering and pagination', () => { - test('continue to the next page if it exists', async () => { - mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ - StackEvents: [event(102), event(101)], - }); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - - // Printer sees them in chronological order - expect(printer.eventIds).toEqual(['101', '102']); - }); - - test('do not page further if we already saw the last event', async () => { - mockCloudFormationClient - .on(DescribeStackEventsCommand) - .resolvesOnce({ - StackEvents: [event(101)], - }) - .resolvesOnce({ - StackEvents: [event(102), event(101)], - }) - .resolvesOnce({}); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - - // Seen in chronological order - expect(printer.eventIds).toEqual(['101', '102']); - }); - - test('do not page further if the last event is too old', async () => { - mockCloudFormationClient - .on(DescribeStackEventsCommand) - .resolvesOnce({ - StackEvents: [event(101), event(95)], - }) - .resolvesOnce({ - StackEvents: [], - }); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - - // Seen only the new one - expect(printer.eventIds).toEqual(['101']); - }); - - test('do a final request after the monitor is stopped', async () => { - mockCloudFormationClient.on(DescribeStackEventsCommand).resolves({ - StackEvents: [event(101)], - }); - // Establish that we've received events prior to stop and then reset the mock - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - mockCloudFormationClient.resetHistory(); - await monitor.stop(); - mockCloudFormationClient.on(DescribeStackEventsCommand).resolves({ - StackEvents: [event(102), event(101)], - }); - // Since we can't reset the mock to a new value before calling stop, we'll have to check - // and make sure it's called again instead. - expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand); - }); -}); - -describe('stack monitor, collecting errors from events', () => { - test('return errors from the root stack', async () => { - mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ - StackEvents: [addErrorToStackEvent(event(100))], - }); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - expect(monitor.errors).toStrictEqual(['Test Error']); - }); - - test('return errors from the nested stack', async () => { - mockCloudFormationClient - .on(DescribeStackEventsCommand) - .resolvesOnce({ - StackEvents: [ - addErrorToStackEvent(event(102), { - logicalResourceId: 'nestedStackLogicalResourceId', - physicalResourceId: 'nestedStackPhysicalResourceId', - resourceType: 'AWS::CloudFormation::Stack', - resourceStatusReason: 'nested stack failed', - resourceStatus: ResourceStatus.UPDATE_FAILED, - }), - addErrorToStackEvent(event(100), { - logicalResourceId: 'nestedStackLogicalResourceId', - physicalResourceId: 'nestedStackPhysicalResourceId', - resourceType: 'AWS::CloudFormation::Stack', - resourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, - }), - ], - }) - .resolvesOnce({ - StackEvents: [ - addErrorToStackEvent(event(101), { - logicalResourceId: 'nestedResource', - resourceType: 'Some::Nested::Resource', - resourceStatusReason: 'actual failure error message', - }), - ], - }); - - await eventually( - () => - expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(1, DescribeStackEventsCommand, { - StackName: 'StackName', - }), - 2, - ); - - await eventually( - () => - expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(2, DescribeStackEventsCommand, { - StackName: 'nestedStackPhysicalResourceId', - }), - 2, - ); - await monitor.stop(); - expect(monitor.errors).toStrictEqual(['actual failure error message', 'nested stack failed']); - }); - - test('does not consider events without physical resource id for monitoring nested stacks', async () => { - mockCloudFormationClient - .on(DescribeStackEventsCommand) - .resolvesOnce({ - StackEvents: [ - addErrorToStackEvent(event(100), { - logicalResourceId: 'nestedStackLogicalResourceId', - physicalResourceId: '', - resourceType: 'AWS::CloudFormation::Stack', - resourceStatusReason: 'nested stack failed', - }), - ], - NextToken: 'nextToken', - }) - .resolvesOnce({ - StackEvents: [ - addErrorToStackEvent(event(101), { - logicalResourceId: 'OtherResource', - resourceType: 'Some::Other::Resource', - resourceStatusReason: 'some failure', - }), - ], - }); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - - expect(monitor.errors).toStrictEqual(['nested stack failed', 'some failure']); - expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(1, DescribeStackEventsCommand, { - StackName: 'StackName', - }); - // Note that the second call happened for the top level stack instead of a nested stack - expect(mockCloudFormationClient).toHaveReceivedNthCommandWith(2, DescribeStackEventsCommand, { - StackName: 'StackName', - }); - }); - - test('does not check for nested stacks that have already completed successfully', async () => { - mockCloudFormationClient.on(DescribeStackEventsCommand).resolvesOnce({ - StackEvents: [ - addErrorToStackEvent(event(100), { - logicalResourceId: 'nestedStackLogicalResourceId', - physicalResourceId: 'nestedStackPhysicalResourceId', - resourceType: 'AWS::CloudFormation::Stack', - resourceStatusReason: 'nested stack status reason', - resourceStatus: StackStatus.CREATE_COMPLETE, - }), - ], - }); - - await eventually(() => expect(mockCloudFormationClient).toHaveReceivedCommand(DescribeStackEventsCommand), 2); - await monitor.stop(); - - expect(monitor.errors).toStrictEqual([]); - }); -}); - -const T0 = 1597837230504; - -// Events 0-99 are before we started paying attention -const T100 = T0 + 100 * 1000; - -function event(nr: number): StackEvent { - return { - EventId: `${nr}`, - StackId: 'StackId', - StackName: 'StackName', - Timestamp: new Date(T0 + nr * 1000), - }; -} - -function addErrorToStackEvent( - eventToUpdate: StackEvent, - props: { - resourceStatus?: ResourceStatus; - resourceType?: string; - resourceStatusReason?: string; - logicalResourceId?: string; - physicalResourceId?: string; - } = {}, -): StackEvent { - eventToUpdate.ResourceStatus = props.resourceStatus ?? ResourceStatus.UPDATE_FAILED; - eventToUpdate.ResourceType = props.resourceType ?? 'Test::Resource::Type'; - eventToUpdate.ResourceStatusReason = props.resourceStatusReason ?? 'Test Error'; - eventToUpdate.LogicalResourceId = props.logicalResourceId ?? 'testLogicalId'; - eventToUpdate.PhysicalResourceId = props.physicalResourceId ?? 'testPhysicalResourceId'; - return eventToUpdate; -} - -class FakePrinter implements IActivityPrinter { - public updateSleep: number = 0; - public readonly activities: StackActivity[] = []; - - public get eventIds() { - return this.activities.map((a) => a.event.EventId); - } - - public addActivity(activity: StackActivity): void { - this.activities.push(activity); - } - - public print(): void {} - public start(): void {} - public stop(): void {} -} - -const wait = (): Promise => new Promise((resolve) => setTimeout(resolve, 5)); - -// Using the eventually function to ensure these functions have had sufficient time to execute. -const eventually = async (call: () => void, attempts: number): Promise => { - while (attempts-- >= 0) { - try { - return call(); - } catch (err) { - if (attempts <= 0) throw err; - } - await wait(); - } - - throw new Error('An unexpected error has occurred.'); -}; diff --git a/packages/aws-cdk/test/api/_helpers/console-listener.ts b/packages/aws-cdk/test/cli/_helpers/console-listener.ts similarity index 100% rename from packages/aws-cdk/test/api/_helpers/console-listener.ts rename to packages/aws-cdk/test/cli/_helpers/console-listener.ts diff --git a/packages/aws-cdk/test/api/stack-events/display.test.ts b/packages/aws-cdk/test/cli/activity-monitor/display.test.ts similarity index 96% rename from packages/aws-cdk/test/api/stack-events/display.test.ts rename to packages/aws-cdk/test/cli/activity-monitor/display.test.ts index 9bd375e4..7dd67f49 100644 --- a/packages/aws-cdk/test/api/stack-events/display.test.ts +++ b/packages/aws-cdk/test/cli/activity-monitor/display.test.ts @@ -1,5 +1,5 @@ /* eslint-disable import/order */ -import { RewritableBlock } from '../../../lib/api/stack-events/display'; +import { RewritableBlock } from '../../../lib/cli/activity-printer/display'; import { stderr } from '../_helpers/console-listener'; describe('Rewritable Block Tests', () => { diff --git a/packages/aws-cdk/test/cli/activity-monitor/history.test.ts b/packages/aws-cdk/test/cli/activity-monitor/history.test.ts new file mode 100644 index 00000000..f82e0af1 --- /dev/null +++ b/packages/aws-cdk/test/cli/activity-monitor/history.test.ts @@ -0,0 +1,166 @@ +import { ResourceStatus } from "@aws-sdk/client-cloudformation"; +import { HistoryActivityPrinter } from "../../../lib/cli/activity-printer"; +import { CliIoHost } from "../../../lib/toolkit/cli-io-host"; +import { testStack } from "../../util"; +import { stderr } from "../_helpers/console-listener"; +import * as chalk from 'chalk'; + +let TIMESTAMP: number; +let HUMAN_TIME: string; + +beforeAll(() => { + TIMESTAMP = new Date().getTime(); + HUMAN_TIME = new Date(TIMESTAMP).toLocaleTimeString(); + CliIoHost.instance().isCI = false; +}); + +test('prints "IN_PROGRESS" ResourceStatus', () => { + const historyActivityPrinter = new HistoryActivityPrinter({ + stream: process.stderr, + }); + + const output = stderr.inspectSync(async () => { + historyActivityPrinter.start({ stack: testStack({ stackName: 'stack-name' }) }); + historyActivityPrinter.activity({ + event: { + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.CREATE_IN_PROGRESS, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }, + deployment: "test", + progress: { + completed: 0, + total: 2, + formatted: "0/4" + } + }); + historyActivityPrinter.stop(); + }); + + expect(output[0].trim()).toStrictEqual( + `stack-name | 0/4 | ${HUMAN_TIME} | ${chalk.reset('CREATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, + ); +}); + + +test('prints "Failed Resources:" list, when at least one deployment fails', () => { + const historyActivityPrinter = new HistoryActivityPrinter({ + stream: process.stderr, + }); + + const output = stderr.inspectSync(() => { + historyActivityPrinter.start({ stack: testStack({ stackName: 'stack-name' }) }); + historyActivityPrinter.activity({ + event: { + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }, + deployment: "test", + progress: { + completed: 0, + total: 2, + formatted: "0/2" + } + }); + historyActivityPrinter.activity({ + event: { + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_FAILED, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + }, + deployment: "test", + progress: { + completed: 0, + total: 2, + formatted: "0/2" + } + }); + historyActivityPrinter.stop(); + }); + + expect(output.length).toStrictEqual(4); + expect(output[0].trim()).toStrictEqual( + `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, + ); + expect(output[1].trim()).toStrictEqual( + `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`, + ); + expect(output[2].trim()).toStrictEqual('Failed resources:'); + expect(output[3].trim()).toStrictEqual( + `stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`, + ); +}); + +test('print failed resources because of hook failures', () => { + const historyActivityPrinter = new HistoryActivityPrinter({ + stream: process.stderr, + }); + + const output = stderr.inspectSync(async () => { + historyActivityPrinter.start({ stack: testStack({ stackName: 'stack-name' }) }); + historyActivityPrinter.activity({ + event: { + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_IN_PROGRESS, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + HookStatus: 'HOOK_COMPLETE_FAILED', + HookType: 'hook1', + HookStatusReason: 'stack1 must obey certain rules', + }, + deployment: "test", + progress: { + completed: 0, + total: 2, + formatted: "0/2" + } + }); + historyActivityPrinter.activity({ + event: { + LogicalResourceId: 'stack1', + ResourceStatus: ResourceStatus.UPDATE_FAILED, + Timestamp: new Date(TIMESTAMP), + ResourceType: 'AWS::CloudFormation::Stack', + StackId: '', + EventId: '', + StackName: 'stack-name', + ResourceStatusReason: 'The following hook(s) failed: hook1', + }, + deployment: "test", + progress: { + completed: 0, + total: 2, + formatted: "0/2" + } + }); + historyActivityPrinter.stop(); + }); + + expect(output.length).toStrictEqual(4); + expect(output[0].trim()).toStrictEqual( + `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`, + ); + expect(output[1].trim()).toStrictEqual( + `stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`, + ); + expect(output[2].trim()).toStrictEqual('Failed resources:'); + expect(output[3].trim()).toStrictEqual( + `stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`, + ); +}); diff --git a/packages/aws-cdk/test/util/cloudformation.test.ts b/packages/aws-cdk/test/util/cloudformation.test.ts new file mode 100644 index 00000000..4ebec25c --- /dev/null +++ b/packages/aws-cdk/test/util/cloudformation.test.ts @@ -0,0 +1,111 @@ +/* eslint-disable import/order */ +import { validateSnsTopicArn, stackEventHasErrorMessage, maxResourceTypeLength } from '../../lib/util/cloudformation'; + +describe('validateSnsTopicArn', () => { + test('empty string', () => { + const arn = ''; + expect(validateSnsTopicArn(arn)).toEqual(false); + }); + + test('colon in topic name', () => { + const arn = 'arn:aws:sns:eu-west-1:abc:foo'; + expect(validateSnsTopicArn(arn)).toEqual(false); + }); + + test('missing :aws: in arn', () => { + const arn = 'arn:sns:eu-west-1:foobar'; + expect(validateSnsTopicArn(arn)).toEqual(false); + }); + + test('dash in topic name', () => { + const arn = 'arn:aws:sns:eu-west-1:123456789876:foo-bar'; + expect(validateSnsTopicArn(arn)).toEqual(true); + }); + + test('underscore in topic name', () => { + const arn = 'arn:aws:sns:eu-west-1:123456789876:foo-bar_baz'; + expect(validateSnsTopicArn(arn)).toEqual(true); + }); +}); + +describe('stackEventHasErrorMessage', () => { + test('returns true for statuses ending with _FAILED', () => { + expect(stackEventHasErrorMessage('CREATE_FAILED')).toBe(true); + expect(stackEventHasErrorMessage('UPDATE_FAILED')).toBe(true); + expect(stackEventHasErrorMessage('DELETE_FAILED')).toBe(true); + }); + + test('returns true for ROLLBACK_IN_PROGRESS', () => { + expect(stackEventHasErrorMessage('ROLLBACK_IN_PROGRESS')).toBe(true); + }); + + test('returns true for UPDATE_ROLLBACK_IN_PROGRESS', () => { + expect(stackEventHasErrorMessage('UPDATE_ROLLBACK_IN_PROGRESS')).toBe(true); + }); + + test('returns false for non-error statuses', () => { + expect(stackEventHasErrorMessage('CREATE_COMPLETE')).toBe(false); + expect(stackEventHasErrorMessage('UPDATE_COMPLETE')).toBe(false); + expect(stackEventHasErrorMessage('DELETE_COMPLETE')).toBe(false); + expect(stackEventHasErrorMessage('CREATE_IN_PROGRESS')).toBe(false); + expect(stackEventHasErrorMessage('ROLLBACK_COMPLETE')).toBe(false); + expect(stackEventHasErrorMessage('UPDATE_ROLLBACK_COMPLETE')).toBe(false); + }); +}); + +describe('maxResourceTypeLength', () => { + test('returns startWidth for empty template', () => { + const template = {}; + expect(maxResourceTypeLength(template)).toBe('AWS::CloudFormation::Stack'.length); + }); + + test('returns startWidth for template with no resources', () => { + const template = { Resources: {} }; + expect(maxResourceTypeLength(template)).toBe('AWS::CloudFormation::Stack'.length); + }); + + test('returns startWidth when no resource type exceeds it', () => { + const template = { + Resources: { + Resource1: { Type: 'AWS::S3::Bucket' }, + Resource2: { Type: 'AWS::IAM::Role' } + } + }; + expect(maxResourceTypeLength(template)).toBe('AWS::CloudFormation::Stack'.length); + }); + + test('returns length of longest resource type', () => { + const longType = 'AWS::ServiceCatalog::CloudFormationProvisionedProduct'; + const template = { + Resources: { + Resource1: { Type: 'AWS::S3::Bucket' }, + Resource2: { Type: longType } + } + }; + expect(maxResourceTypeLength(template)).toBe(longType.length); + }); + + test('handles resources without Type property', () => { + const template = { + Resources: { + Resource1: { Type: 'AWS::S3::Bucket' }, + Resource2: {} + } + }; + expect(maxResourceTypeLength(template)).toBe('AWS::CloudFormation::Stack'.length); + }); + + test('accepts custom startWidth', () => { + const template = { + Resources: { + Resource1: { Type: 'AWS::S3::Bucket' } + } + }; + expect(maxResourceTypeLength(template, 50)).toBe(50); + }); + + test('handles null or undefined template', () => { + expect(maxResourceTypeLength(null)).toBe('AWS::CloudFormation::Stack'.length); + expect(maxResourceTypeLength(undefined)).toBe('AWS::CloudFormation::Stack'.length); + }); +}); diff --git a/packages/aws-cdk/test/util/validate-notification-arn.test.ts b/packages/aws-cdk/test/util/validate-notification-arn.test.ts deleted file mode 100644 index d8bd5b3f..00000000 --- a/packages/aws-cdk/test/util/validate-notification-arn.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable import/order */ -import { validateSnsTopicArn } from '../../lib/util/cloudformation'; - -describe('validate sns arns', () => { - test('empty string', () => { - const arn = ''; - expect(validateSnsTopicArn(arn)).toEqual(false); - }); - - test('colon in topic name', () => { - const arn = 'arn:aws:sns:eu-west-1:abc:foo'; - expect(validateSnsTopicArn(arn)).toEqual(false); - }); - - test('missing :aws: in arn', () => { - const arn = 'arn:sns:eu-west-1:foobar'; - expect(validateSnsTopicArn(arn)).toEqual(false); - }); - - test('dash in topic name', () => { - const arn = 'arn:aws:sns:eu-west-1:123456789876:foo-bar'; - expect(validateSnsTopicArn(arn)).toEqual(true); - }); - - test('underscore in topic name', () => { - const arn = 'arn:aws:sns:eu-west-1:123456789876:foo-bar_baz'; - expect(validateSnsTopicArn(arn)).toEqual(true); - }); -}); - From b6faaba40bbb0f70c8415bebf5b6f7c6b460a09c Mon Sep 17 00:00:00 2001 From: GZ Date: Thu, 27 Feb 2025 11:22:08 -0800 Subject: [PATCH 30/30] fix(cli): notices for ranged alpha modules are not showing up correctly (#163) Fixes an issue where notices don't show up when we define a range of pre-releases semver for alpha modules. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license --- packages/aws-cdk/lib/notices.ts | 2 +- .../tree.json | 40 +++++++++++++++++++ packages/aws-cdk/test/notices.test.ts | 21 ++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/aws-cdk/test/cloud-assembly-trees/experimental-module-pre-release-semver/tree.json diff --git a/packages/aws-cdk/lib/notices.ts b/packages/aws-cdk/lib/notices.ts index 8976d34d..0a7d34b4 100644 --- a/packages/aws-cdk/lib/notices.ts +++ b/packages/aws-cdk/lib/notices.ts @@ -142,7 +142,7 @@ export abstract class NoticesFilter { // component can match more than one actual component for (const ands of ors) { const matched = ands.map(affected => actualComponents.filter(actual => - NoticesFilter.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version))); + NoticesFilter.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version, { includePrerelease: true }))); // For every clause in the filter we matched one or more components if (matched.every(xs => xs.length > 0)) { diff --git a/packages/aws-cdk/test/cloud-assembly-trees/experimental-module-pre-release-semver/tree.json b/packages/aws-cdk/test/cloud-assembly-trees/experimental-module-pre-release-semver/tree.json new file mode 100644 index 00000000..ecf65507 --- /dev/null +++ b/packages/aws-cdk/test/cloud-assembly-trees/experimental-module-pre-release-semver/tree.json @@ -0,0 +1,40 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "integ-idp": { + "id": "integ-idp", + "path": "integ-idp", + "children": { + "identitypool": { + "id": "identitypool", + "path": "integ-idp/identitypool", + "constructInfo": { + "fqn": "@aws-cdk/aws-cognito-identitypool-alpha.IdentityPool", + "version": "2.175.0-alpha.0", + "metadata": ["*", "*"] + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTest", + "version": "0.0.0" + } + }, + "Tree": { + "id": "Tree", + "path": "Tree", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.App", + "version": "0.0.0" + } + } +} diff --git a/packages/aws-cdk/test/notices.test.ts b/packages/aws-cdk/test/notices.test.ts index cf031844..b11a125b 100644 --- a/packages/aws-cdk/test/notices.test.ts +++ b/packages/aws-cdk/test/notices.test.ts @@ -131,6 +131,19 @@ const NOTICE_FOR_APIGATEWAYV2 = { schemaVersion: '1', }; +const NOTICES_FOR_IDENTITY_POOL = { + title: 'Regression on module foobar', + issueNumber: 1234, + overview: 'Some bug description', + components: [ + { + name: "@aws-cdk/aws-cognito-identitypool-alpha.IdentityPool", + version: ">=2.74.0-alpha.0 <2.179.0-alpha.0" + } + ], + schemaVersion: '1', +} + const NOTICE_FOR_APIGATEWAY = { title: 'Regression on module foobar', issueNumber: 1234, @@ -247,6 +260,14 @@ describe(NoticesFilter, () => { expect(NoticesFilter.filter({ data: [NOTICE_FOR_APIGATEWAYV2_CFN_STAGE], cliVersion, bootstrappedEnvironments: [], outDir: path.join(__dirname, 'cloud-assembly-trees', 'experimental-module') }).map(f => f.notice)).toEqual([NOTICE_FOR_APIGATEWAYV2_CFN_STAGE]); }); + test('module with pre-release version', () => { + // doesn't matter for this test because our data only has framework notices + const cliVersion = '1.0.0'; + + // module-level match + expect(NoticesFilter.filter({ data: [NOTICES_FOR_IDENTITY_POOL], cliVersion, bootstrappedEnvironments: [], outDir: path.join(__dirname, 'cloud-assembly-trees', 'experimental-module-pre-release-semver')}).map(f => f.notice)).toEqual([NOTICES_FOR_IDENTITY_POOL]); + }); + test('bootstrap', () => { // doesn't matter for this test because our data only has bootstrap notices const outDir = path.join(__dirname, 'cloud-assembly-trees', 'built-with-2_12_0');