From c997022bf587e3aca96e07b87d5cad120e71e09b Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Thu, 9 Jan 2025 13:58:45 -0800 Subject: [PATCH 01/10] feat(core): enable additional metadata collection --- ...efaultTestDeployAssert3F14AD57.assets.json | 19 + ...aultTestDeployAssert3F14AD57.template.json | 311 +++++++++++++++ .../EnableTelemtryStack.assets.json | 19 + .../EnableTelemtryStack.template.json | 369 ++++++++++++++++++ .../cdk.out | 1 + .../integ.json | 12 + .../manifest.json | 190 +++++++++ .../tree.json | 313 +++++++++++++++ .../test/integ.enable-additional-metadata.ts | 37 ++ .../aws-cdk-lib/core/lib/metadata-resource.ts | 22 ++ .../core/lib/private/metadata-resource.ts | 24 +- .../core/lib/private/runtime-info.ts | 87 ++++- .../core/test/metadata-resource.test.ts | 41 +- .../core/test/private/runtime-info.test.ts | 93 +++++ packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 4 +- packages/aws-cdk-lib/cx-api/README.md | 18 + packages/aws-cdk-lib/cx-api/lib/features.ts | 15 + packages/aws-cdk-lib/package.json | 1 + .../recommended-feature-flags.json | 3 +- 19 files changed, 1563 insertions(+), 16 deletions(-) create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/cdk.out create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/integ.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json create mode 100644 packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts create mode 100644 packages/aws-cdk-lib/core/lib/metadata-resource.ts create mode 100644 packages/aws-cdk-lib/core/test/private/runtime-info.test.ts diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json new file mode 100644 index 0000000000000..f9c69df08d490 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json @@ -0,0 +1,19 @@ +{ + "version": "39.0.0", + "files": { + "d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251": { + "source": { + "path": "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json new file mode 100644 index 0000000000000..4db2325abb27a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json @@ -0,0 +1,311 @@ +{ + "Resources": { + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/zPQM9AzUEwsL9ZNTsnWzclM0gsuSUzO1snLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ADFzrfTPQAAAA==" + }, + "Condition": "CDKMetadataAvailable" + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json new file mode 100644 index 0000000000000..a3cdf26389b7a --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json @@ -0,0 +1,19 @@ +{ + "version": "39.0.0", + "files": { + "9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b": { + "source": { + "path": "EnableTelemtryStack.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b.json", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + } + }, + "dockerImages": {} +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json new file mode 100644 index 0000000000000..4ddaba9ac1273 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json @@ -0,0 +1,369 @@ +{ + "Resources": { + "01234test13C610BE": { + "Type": "AWS::SQS::Queue", + "Properties": { + "VisibilityTimeout": 300 + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyFunctionServiceRole3C357FF2": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "MyFunction3BAA72D1": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "def handler(event, context):\n\tprint('The function has been invoked.')" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "MyFunctionServiceRole3C357FF2", + "Arn" + ] + }, + "Runtime": "python3.8" + }, + "DependsOn": [ + "MyFunctionServiceRole3C357FF2" + ] + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/5WQTU/DMAyGfws5oiyMHXsF8SGBBBviMiHkpt4wS50RJ0xTlf+OmrbAEU7+iP3meT03czM/gYPMbLObOapNt4pgdxoO8trJh5juMWHCdaficY+qUnCQyja7ChjcMZKVynqWGJKNSqsGIqiqU58kVJOjeHyiFn2KfRNanziqSp0qrRJTaTqo0Y09En/3u+R7co6klDnn/KIvNlx4snbQ1g2Y7iqxjeT5v4QhcaQW+5Shj+VLSfu9D1Fu2RHjhW9QVTEk1GoDLbnjN+gzBILaoao24AS1qhM3jnh76e0Ow20L26JNQ1K2XktxA/I2OPpZ+uP4RNdzXaeQHoLfUL8/QU4DK4b9KkKII17W6g24cRhGbVucdWMcPQ2mB63p2tN5syZoTbf0Dtfloc9y1ksUn4LF9UvW7Bs073L2uZib84VZnLwL0Ww8tFkO8Qsy2kO1cgIAAA==" + }, + "Condition": "CDKMetadataAvailable" + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Parameters": { + "BootstrapVersion": { + "Type": "AWS::SSM::Parameter::Value", + "Default": "/cdk-bootstrap/hnb659fds/version", + "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]" + } + }, + "Rules": { + "CheckBootstrapVersion": { + "Assertions": [ + { + "Assert": { + "Fn::Not": [ + { + "Fn::Contains": [ + [ + "1", + "2", + "3", + "4", + "5" + ], + { + "Ref": "BootstrapVersion" + } + ] + } + ] + }, + "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI." + } + ] + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/cdk.out new file mode 100644 index 0000000000000..91e1a8b9901d5 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/cdk.out @@ -0,0 +1 @@ +{"version":"39.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/integ.json new file mode 100644 index 0000000000000..6d5977883c3cb --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "39.0.0", + "testCases": { + "Enable Additional Metadata/DefaultTest": { + "stacks": [ + "EnableTelemtryStack" + ], + "assertionStack": "Enable Additional Metadata/DefaultTest/DeployAssert", + "assertionStackName": "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json new file mode 100644 index 0000000000000..d78fe74894290 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json @@ -0,0 +1,190 @@ +{ + "version": "39.0.0", + "artifacts": { + "EnableTelemtryStack.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "EnableTelemtryStack.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "EnableTelemtryStack": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "EnableTelemtryStack.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "EnableTelemtryStack.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "EnableTelemtryStack.assets" + ], + "metadata": { + "/EnableTelemtryStack/01234test": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "visibilityTimeout": { + "amount": 300, + "unit": { + "label": "seconds", + "isoLabel": "S", + "inMillis": 1000 + } + } + } + } + ], + "/EnableTelemtryStack/01234test/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "01234test13C610BE" + } + ], + "/EnableTelemtryStack/MyFunction": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "runtime": { + "name": "python3.8", + "supportsInlineCode": true, + "family": 2, + "isVariable": false, + "bundlingDockerImage": { + "image": "public.ecr.aws/sam/build-python3.8" + }, + "bundlingImage": { + "image": "public.ecr.aws/sam/build-python3.8" + }, + "supportsCodeGuruProfiling": true, + "supportsSnapStart": false + }, + "handler": "index.handler", + "code": { + "code": "def handler(event, context):\n\tprint('The function has been invoked.')", + "isInline": true + } + } + } + ], + "/EnableTelemtryStack/MyFunction/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyFunctionServiceRole3C357FF2" + } + ], + "/EnableTelemtryStack/MyFunction/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyFunction3BAA72D1" + } + ], + "/EnableTelemtryStack/CDKMetadata/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadata" + } + ], + "/EnableTelemtryStack/CDKMetadata/Condition": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadataAvailable" + } + ], + "/EnableTelemtryStack/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/EnableTelemtryStack/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "EnableTelemtryStack" + }, + "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json", + "terminationProtection": false, + "validateOnSynth": false, + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", + "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets" + ], + "lookupRole": { + "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}", + "requiresBootstrapStackVersion": 8, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "dependencies": [ + "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets" + ], + "metadata": { + "/Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadata" + } + ], + "/Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Condition": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadataAvailable" + } + ], + "/Enable Additional Metadata/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/Enable Additional Metadata/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "Enable Additional Metadata/DefaultTest/DeployAssert" + }, + "Tree": { + "type": "cdk:tree", + "properties": { + "file": "tree.json" + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json new file mode 100644 index 0000000000000..6aa4f30c3198e --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json @@ -0,0 +1,313 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "EnableTelemtryStack": { + "id": "EnableTelemtryStack", + "path": "EnableTelemtryStack", + "children": { + "01234test": { + "id": "01234test", + "path": "EnableTelemtryStack/01234test", + "children": { + "Resource": { + "id": "Resource", + "path": "EnableTelemtryStack/01234test/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::SQS::Queue", + "aws:cdk:cloudformation:props": { + "visibilityTimeout": 300 + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.CfnQueue", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_sqs.Queue", + "version": "0.0.0", + "metadata": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "visibilityTimeout": { + "amount": "*", + "unit": { + "label": "*", + "isoLabel": "*", + "inMillis": "*" + } + } + } + } + ] + } + }, + "MyFunction": { + "id": "MyFunction", + "path": "EnableTelemtryStack/MyFunction", + "children": { + "ServiceRole": { + "id": "ServiceRole", + "path": "EnableTelemtryStack/MyFunction/ServiceRole", + "children": { + "ImportServiceRole": { + "id": "ImportServiceRole", + "path": "EnableTelemtryStack/MyFunction/ServiceRole/ImportServiceRole", + "constructInfo": { + "fqn": "aws-cdk-lib.Resource", + "version": "0.0.0", + "metadata": [] + } + }, + "Resource": { + "id": "Resource", + "path": "EnableTelemtryStack/MyFunction/ServiceRole/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::IAM::Role", + "aws:cdk:cloudformation:props": { + "assumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "managedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.CfnRole", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_iam.Role", + "version": "0.0.0", + "metadata": [] + } + }, + "Resource": { + "id": "Resource", + "path": "EnableTelemtryStack/MyFunction/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::Lambda::Function", + "aws:cdk:cloudformation:props": { + "code": { + "zipFile": "def handler(event, context):\n\tprint('The function has been invoked.')" + }, + "handler": "index.handler", + "role": { + "Fn::GetAtt": [ + "MyFunctionServiceRole3C357FF2", + "Arn" + ] + }, + "runtime": "python3.8" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.CfnFunction", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_lambda.Function", + "version": "0.0.0", + "metadata": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "runtime": { + "name": "*", + "supportsInlineCode": true, + "family": "*", + "isVariable": false, + "bundlingDockerImage": { + "image": "*", + "_imageHash": "*" + }, + "bundlingImage": { + "image": "*", + "_imageHash": "*" + }, + "supportsCodeGuruProfiling": true, + "supportsSnapStart": false + }, + "handler": "*", + "code": { + "code": "*", + "isInline": true + } + } + } + ] + } + }, + "CDKMetadata": { + "id": "CDKMetadata", + "path": "EnableTelemtryStack/CDKMetadata", + "children": { + "Default": { + "id": "Default", + "path": "EnableTelemtryStack/CDKMetadata/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Condition": { + "id": "Condition", + "path": "EnableTelemtryStack/CDKMetadata/Condition", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnCondition", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "EnableTelemtryStack/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "EnableTelemtryStack/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "Enable Additional Metadata": { + "id": "Enable Additional Metadata", + "path": "Enable Additional Metadata", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "Enable Additional Metadata/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "Enable Additional Metadata/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert", + "children": { + "CDKMetadata": { + "id": "CDKMetadata", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata", + "children": { + "Default": { + "id": "Default", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Condition": { + "id": "Condition", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Condition", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnCondition", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "@aws-cdk/integ-tests-alpha.IntegTestCase", + "version": "0.0.0" + } + } + }, + "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" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts new file mode 100644 index 0000000000000..06d822f3e9764 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts @@ -0,0 +1,37 @@ +import * as cdk from 'aws-cdk-lib/core'; +import * as integ from '@aws-cdk/integ-tests-alpha'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as sqs from 'aws-cdk-lib/aws-sqs'; +import { ENABLE_ADDITIONAL_METADATA_COLLECTION } from 'aws-cdk-lib/cx-api'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; + +/** + * This test creates resources using alphanumeric logical IDs. + */ + +const app = new cdk.App({ + analyticsReporting: true, + postCliContext: { + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: true, + }, +}); + +const stack = new cdk.Stack(app, 'EnableTelemtryStack'); + +const queueProp = { + visibilityTimeout: cdk.Duration.seconds(300), +}; +const queue = new sqs.Queue(stack, '01234test', queueProp); +queue.node.addMetadata(MetadataType.CONSTRUCT, queueProp); + +const funcProp = { + runtime: lambda.Runtime.PYTHON_3_8, + handler: 'index.handler', + code: lambda.Code.fromInline('def handler(event, context):\n\tprint(\'The function has been invoked.\')'), +}; +const func = new lambda.Function(stack, 'MyFunction', funcProp); +func.node.addMetadata(MetadataType.CONSTRUCT, funcProp); + +new integ.IntegTest(app, 'Enable Additional Metadata', { + testCases: [stack], +}); diff --git a/packages/aws-cdk-lib/core/lib/metadata-resource.ts b/packages/aws-cdk-lib/core/lib/metadata-resource.ts new file mode 100644 index 0000000000000..0fccef20f3334 --- /dev/null +++ b/packages/aws-cdk-lib/core/lib/metadata-resource.ts @@ -0,0 +1,22 @@ +/** + * Enumeration of metadata types used for tracking analytics in AWS CDK. + */ +export enum MetadataType { + /** + * Metadata type for construct properties. + * This is used to represent properties of CDK constructs. + */ + CONSTRUCT = 'aws:cdk:analytics:construct', + + /** + * Metadata type for method properties. + * This is used to track parameters and details of CDK method calls. + */ + METHOD = 'aws:cdk:analytics:method', + + /** + * Metadata type for feature flags. + * This is used to track analytics related to feature flags in the CDK. + */ + FEATURE_FLAGS = 'aws:cdk:analytics:featureflag', +} diff --git a/packages/aws-cdk-lib/core/lib/private/metadata-resource.ts b/packages/aws-cdk-lib/core/lib/private/metadata-resource.ts index 494fd33bf7790..6c808bdc28872 100644 --- a/packages/aws-cdk-lib/core/lib/private/metadata-resource.ts +++ b/packages/aws-cdk-lib/core/lib/private/metadata-resource.ts @@ -1,11 +1,13 @@ import * as zlib from 'zlib'; import { Construct } from 'constructs'; import { ConstructInfo, constructInfoFromStack } from './runtime-info'; +import * as cxapi from '../../../cx-api'; import { RegionInfo } from '../../../region-info'; import { CfnCondition } from '../cfn-condition'; import { Fn } from '../cfn-fn'; import { Aws } from '../cfn-pseudo'; import { CfnResource } from '../cfn-resource'; +import { FeatureFlags } from '../feature-flags'; import { Lazy } from '../lazy'; import { Stack } from '../stack'; import { Token } from '../token'; @@ -17,11 +19,13 @@ export class MetadataResource extends Construct { constructor(scope: Stack, id: string) { super(scope, id); const metadataServiceExists = Token.isUnresolved(scope.region) || RegionInfo.get(scope.region).cdkMetadataResourceAvailable; + const enableAdditionalTelemtry = FeatureFlags.of(scope).isEnabled(cxapi.ENABLE_ADDITIONAL_METADATA_COLLECTION) ?? false; if (metadataServiceExists) { + const constructInfo = constructInfoFromStack(scope); const resource = new CfnResource(this, 'Default', { type: 'AWS::CDK::Metadata', properties: { - Analytics: Lazy.string({ produce: () => formatAnalytics(constructInfoFromStack(scope)) }), + Analytics: Lazy.string({ produce: () => formatAnalytics(constructInfo, enableAdditionalTelemtry) }), }, }); @@ -76,9 +80,16 @@ class Trie extends Map { } * * Exported/visible for ease of testing. */ -export function formatAnalytics(infos: ConstructInfo[]) { +export function formatAnalytics(infos: ConstructInfo[], enableAdditionalTelemtry: boolean = false) { const trie = new Trie(); - infos.forEach(info => insertFqnInTrie(`${info.version}!${info.fqn}`, trie)); + + // only append additional telemetry information to prefix encoding and gzip compress + // if feature flag is enabled; otherwise keep the old behaviour. + if (enableAdditionalTelemtry) { + infos.forEach(info => insertFqnInTrie(`${info.version}!${info.fqn}`, trie, info.metadata)); + } else { + infos.forEach(info => insertFqnInTrie(`${info.version}!${info.fqn}`, trie)); + } const plaintextEncodedConstructs = prefixEncodeTrie(trie); const compressedConstructsBuffer = zlib.gzipSync(Buffer.from(plaintextEncodedConstructs)); @@ -103,12 +114,17 @@ export function formatAnalytics(infos: ConstructInfo[]) { * Splits after non-alphanumeric characters (e.g., '.', '/') in the FQN * and insert each piece of the FQN in nested map (i.e., simple trie). */ -function insertFqnInTrie(fqn: string, trie: Trie) { +function insertFqnInTrie(fqn: string, trie: Trie, metadata?: Record[]) { for (const fqnPart of fqn.replace(/[^a-z0-9]/gi, '$& ').split(' ')) { const nextLevelTreeRef = trie.get(fqnPart) ?? new Trie(); trie.set(fqnPart, nextLevelTreeRef); trie = nextLevelTreeRef; } + + // if 'metadata' is defined, add it to end of Trie + if (metadata) { + trie.set(JSON.stringify(metadata), new Trie()); + } return trie; } diff --git a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts index 6371b6bc84138..1323f8da0ffd8 100644 --- a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts +++ b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts @@ -1,5 +1,7 @@ -import { IConstruct } from 'constructs'; +import { IConstruct, MetadataEntry } from 'constructs'; import { App } from '../app'; +import { MetadataType } from '../metadata-resource'; +import { Resource } from '../resource'; import { Stack } from '../stack'; import { Stage } from '../stage'; import { IPolicyValidationPluginBeta1 } from '../validation'; @@ -24,6 +26,7 @@ const JSII_RUNTIME_SYMBOL = Symbol.for('jsii.rtti'); export interface ConstructInfo { readonly fqn: string; readonly version: string; + readonly metadata?: Record[]; } export function constructInfoFromConstruct(construct: IConstruct): ConstructInfo | undefined { @@ -32,7 +35,11 @@ export function constructInfoFromConstruct(construct: IConstruct): ConstructInfo && jsiiRuntimeInfo !== null && typeof jsiiRuntimeInfo.fqn === 'string' && typeof jsiiRuntimeInfo.version === 'string') { - return { fqn: jsiiRuntimeInfo.fqn, version: jsiiRuntimeInfo.version }; + return { + fqn: jsiiRuntimeInfo.fqn, + version: jsiiRuntimeInfo.version, + metadata: isResource(construct) ? redactTelemetryData(construct.node.metadata) : undefined, + }; } else if (jsiiRuntimeInfo) { // There is something defined, but doesn't match our expectations. Fail fast and hard. throw new Error(`malformed jsii runtime info for construct: '${construct.node.path}'`); @@ -40,6 +47,56 @@ export function constructInfoFromConstruct(construct: IConstruct): ConstructInfo return undefined; } +/** + * Filter for Construct, Method, and Feature flag metadata. Redact values from it. + * + * @param metadata a list of metadata entries + */ +export function redactTelemetryData(metadata: MetadataEntry[]): Record[] { + const validTypes = new Set([ + MetadataType.CONSTRUCT, + MetadataType.METHOD, + MetadataType.FEATURE_FLAGS, + ]); + + return metadata + .filter((entry) => validTypes.has(entry.type as MetadataType)) + .map((entry) => ({ + type: entry.type, + data: redactTelemetryDataHelper(entry.data), + })); +} + +/** + * Redact values from dictionary values other than Boolean and ENUM-type values. + * @TODO complete the ENUM-type values redaction in a follow-up change. + */ +function redactTelemetryDataHelper(data: any): any { + if (typeof data === 'boolean') { + return data; // Return booleans as-is + } + + if (Array.isArray(data)) { + // Handle arrays by recursively redacting each element + return data.map((item) => redactTelemetryDataHelper(item)); + } + + if (data && typeof data === 'object') { + // Handle objects by iterating over their key-value pairs + if (isResource(data)) { + return '*'; + } + + const result: Record = {}; + for (const [key, value] of Object.entries(data)) { + result[key] = redactTelemetryDataHelper(value); + } + return result; + } + + return '*'; +} + /** * Add analytics data for any validation plugins that are used. * Since validation plugins are not constructs we have to handle them @@ -106,14 +163,26 @@ export function constructInfoFromStack(stack: Stack): ConstructInfo[] { addValidationPluginInfo(stack, allConstructInfos); - // Filter out duplicate values - const uniqKeys = new Set(); - return allConstructInfos.filter(construct => { - const constructKey = `${construct.fqn}@${construct.version}`; - const isDuplicate = uniqKeys.has(constructKey); - uniqKeys.add(constructKey); - return !isDuplicate; + // Filter out duplicate values and append the metadata information to the array + const uniqueMap = new Map(); + allConstructInfos.forEach(info => { + const key = `${info.fqn}@${info.version}`; + if (uniqueMap.has(key)) { + const existingInfo = uniqueMap.get(key); + if (existingInfo && existingInfo.metadata && info.metadata) { + existingInfo.metadata.push(...info.metadata); + } + } else { + uniqueMap.set(key, info); + } }); + + return Array.from(uniqueMap.values()); +} + +function isResource(construct: IConstruct): construct is Resource { + const RESOURCE_SYMBOL = Symbol.for('@aws-cdk/core.Resource'); + return construct !== null && typeof(construct) === 'object' && RESOURCE_SYMBOL in construct; } /** diff --git a/packages/aws-cdk-lib/core/test/metadata-resource.test.ts b/packages/aws-cdk-lib/core/test/metadata-resource.test.ts index fa05b0d501f16..fb842d739241e 100644 --- a/packages/aws-cdk-lib/core/test/metadata-resource.test.ts +++ b/packages/aws-cdk-lib/core/test/metadata-resource.test.ts @@ -1,6 +1,9 @@ import * as zlib from 'zlib'; import { Construct } from 'constructs'; -import { App, Stack, IPolicyValidationPluginBeta1, IPolicyValidationContextBeta1, Stage, PolicyValidationPluginReportBeta1 } from '../lib'; +import { Code, Function, Runtime } from '../../aws-lambda'; +import { ENABLE_ADDITIONAL_METADATA_COLLECTION } from '../../cx-api'; +import { App, Stack, IPolicyValidationPluginBeta1, IPolicyValidationContextBeta1, Stage, PolicyValidationPluginReportBeta1, FeatureFlags } from '../lib'; +import { MetadataType } from '../lib/metadata-resource'; import { formatAnalytics } from '../lib/private/metadata-resource'; import { ConstructInfo } from '../lib/private/runtime-info'; @@ -49,6 +52,30 @@ describe('MetadataResource', () => { expect(stackTemplate.Resources?.CDKMetadata?.Condition).toBeDefined(); }); + it.each( + [ + [true, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], + [false, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], + [undefined, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], + ], + )('when no metadata is added by default, CDKMetadata should be the same', (enableAdditionalTelemtry, cdkMetadata) => { + const myApp = new App({ + analyticsReporting: true, + }); + myApp.node.setContext(ENABLE_ADDITIONAL_METADATA_COLLECTION, enableAdditionalTelemtry); + const myStack = new Stack(myApp, 'MyStack'); + new Function(myStack, 'MyFunction', { + runtime: Runtime.PYTHON_3_9, + handler: 'index.handler', + code: Code.fromInline( + "def handler(event, context):\n\tprint('The function has been invoked.')", + ), + }); + + const stackTemplate = myApp.synth().getStackByName('MyStack').template; + expect(stackTemplate.Resources?.CDKMetadata).toEqual(cdkMetadata); + }); + test('includes the formatted Analytics property', () => { // A very simple check that the jsii runtime psuedo-construct is present. // This check works whether we're running locally or on CodeBuild, on v1 or v2. @@ -162,6 +189,18 @@ describe('formatAnalytics', () => { expectAnalytics(constructInfo, '1.2.3!aws-cdk-lib.{Construct,CfnResource,Stack},0.1.2!aws-cdk-lib.{CoolResource,OtherResource}'); }); + it.each([ + [true, '1.2.3!aws-cdk-lib.Construct[{\"custom\":{\"foo\":\"bar\"}}]'], + [false, '1.2.3!aws-cdk-lib.Construct'], + [undefined, '1.2.3!aws-cdk-lib.Construct'], + ])('format analytics with metadata and enabled additional telemetry', (enableAdditionalTelemtry, output) => { + const constructInfo = [ + { fqn: 'aws-cdk-lib.Construct', version: '1.2.3', metadata: [{ custom: { foo: 'bar' } }] }, + ]; + + expect(plaintextConstructsFromAnalytics(formatAnalytics(constructInfo, enableAdditionalTelemtry))).toMatch(output); + }); + test('ensure gzip is encoded with "unknown" operating system to maintain consistent output across systems', () => { const constructInfo = [{ fqn: 'aws-cdk-lib.Construct', version: '1.2.3' }]; const analytics = formatAnalytics(constructInfo); diff --git a/packages/aws-cdk-lib/core/test/private/runtime-info.test.ts b/packages/aws-cdk-lib/core/test/private/runtime-info.test.ts new file mode 100644 index 0000000000000..ac1d506d4f05d --- /dev/null +++ b/packages/aws-cdk-lib/core/test/private/runtime-info.test.ts @@ -0,0 +1,93 @@ +import { MetadataEntry } from 'constructs'; +import { Code, Function, Runtime } from '../../../aws-lambda'; +import { Stack } from '../../lib'; +import { MetadataType } from '../../lib/metadata-resource'; +import { + constructInfoFromConstruct, + redactTelemetryData, +} from '../../lib/private/runtime-info'; + +test('test constructInfoFromConstruct can correctly get metadata information', () => { + const stack = new Stack(); + const myFunction = new Function(stack, 'MyFunction', { + runtime: Runtime.PYTHON_3_9, + handler: 'index.handler', + code: Code.fromInline( + "def handler(event, context):\n\tprint('The function has been invoked.')", + ), + }); + myFunction.node.addMetadata('hello', 'foo'); + myFunction.node.addMetadata(MetadataType.CONSTRUCT, { foo: 'bar' }); + + const constructInfo = constructInfoFromConstruct(myFunction); + expect(constructInfo?.metadata).toEqual([ + { type: MetadataType.CONSTRUCT, data: { foo: '*' } }, + ]); +}); + +test('test metadata is redacted correctly', () => { + const stack = new Stack(); + const myFunction = new Function(stack, 'MyFunction', { + runtime: Runtime.PYTHON_3_9, + handler: 'index.handler', + code: Code.fromInline( + "def handler(event, context):\n\tprint('The function has been invoked.')", + ), + }); + + const metadata: MetadataEntry[] = [ + { type: 'foo', data: { hello: 'world' } }, + { + type: MetadataType.CONSTRUCT, + data: { + bool: true, + nested: { foo: 'bar' }, + arr: [1, 2, 3], + str: 'foo', + arrOfObjects: [{ foo: { hello: 'world' } }, { myFunc: myFunction }], + }, + }, + { + type: MetadataType.METHOD, + data: { bool: true, nested: { foo: 'bar' }, arr: [1, 2, 3], str: 'foo' }, + }, + { + type: MetadataType.FEATURE_FLAGS, + data: 'foobar', + }, + { + type: 'aws:cdk:analytics:construct', + data: 'foo', + }, + ]; + + expect(redactTelemetryData(metadata)).toEqual([ + { + type: MetadataType.CONSTRUCT, + data: { + bool: true, + nested: { foo: '*' }, + arr: ['*', '*', '*'], + str: '*', + arrOfObjects: [{ foo: { hello: '*' } }, { myFunc: '*' }], + }, + }, + { + type: MetadataType.METHOD, + data: { + bool: true, + nested: { foo: '*' }, + arr: ['*', '*', '*'], + str: '*', + }, + }, + { + type: MetadataType.FEATURE_FLAGS, + data: '*', + }, + { + type: 'aws:cdk:analytics:construct', + data: '*', + }, + ]); +}); diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 12075ff16f731..9f6fe9017ee75 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -87,6 +87,7 @@ Flags come in three types: | [@aws-cdk/aws-ecs:disableEcsImdsBlocking](#aws-cdkaws-ecsdisableecsimdsblocking) | When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)** | V2NEXT | (temporary) | | [@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature](#aws-cdkaws-ecsenableimdsblockingdeprecatedfeature) | When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)** | V2NEXT | (temporary) | | [@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault](#aws-cdkaws-elasticloadbalancingv2albdualstackwithoutpublicipv4securitygrouprulesdefault) | When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere | V2NEXT | (fix) | +| [@aws-cdk/core:enableAdditionalMetadataCollection](#aws-cdkcoreenableadditionalmetadatacollection) | When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues. | V2NEXT | (config) | @@ -161,7 +162,8 @@ The following json shows the current recommended set of flags, as `cdk init` wou "@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-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": true, + "@aws-cdk/core:enableAdditionalMetadataCollection": true } } ``` diff --git a/packages/aws-cdk-lib/cx-api/README.md b/packages/aws-cdk-lib/cx-api/README.md index 46da524a70ede..bb03f06fa7a24 100644 --- a/packages/aws-cdk-lib/cx-api/README.md +++ b/packages/aws-cdk-lib/cx-api/README.md @@ -576,3 +576,21 @@ _cdk.json_ } } ``` + +* `@aws-cdk/core:enableAdditionalMetadataCollection` + +When this feature flag is enabled, CDK expands the scope of usage data collection to include the: + +* L2 construct property keys - Collect which property keys you use from the L2 constructs in your app. This includes property keys nested in dictionary objects. +* L2 construct property values of BOOL and ENUM types - Collect property key values of only BOOL and ENUM types. All other types, such as string values or construct references will be redacted. +* L2 construct method usage - Collection method name, parameter keys and parameter values of BOOL and ENUM type. + +_cdk.json_ + +```json +{ + "context": { + "@aws-cdk/core:enableAdditionalMetadataCollection": true + } +} +``` diff --git a/packages/aws-cdk-lib/cx-api/lib/features.ts b/packages/aws-cdk-lib/cx-api/lib/features.ts index b50c93df54da0..9d20a24930233 100644 --- a/packages/aws-cdk-lib/cx-api/lib/features.ts +++ b/packages/aws-cdk-lib/cx-api/lib/features.ts @@ -121,6 +121,7 @@ export const USER_POOL_DOMAIN_NAME_METHOD_WITHOUT_CUSTOM_RESOURCE = '@aws-cdk/aw export const Enable_IMDS_Blocking_Deprecated_Feature = '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature'; export const Disable_ECS_IMDS_Blocking = '@aws-cdk/aws-ecs:disableEcsImdsBlocking'; export const ALB_DUALSTACK_WITHOUT_PUBLIC_IPV4_SECURITY_GROUP_RULES_DEFAULT = '@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault'; +export const ENABLE_ADDITIONAL_METADATA_COLLECTION = '@aws-cdk/core:enableAdditionalMetadataCollection'; export const FLAGS: Record = { ////////////////////////////////////////////////////////////////////// @@ -1355,6 +1356,20 @@ export const FLAGS: Record = { recommendedValue: true, compatibilityWithOldBehaviorMd: 'Disable the feature flag to only allow IPv4 ingress in the default security group rules.', }, + + ////////////////////////////////////////////////////////////////////// + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: { + type: FlagType.VisibleContext, + summary: 'When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues.', + detailsMd: ` + When this feature flag is enabled, CDK expands the scope of usage data collection to include the following: + * L2 construct property keys - Collect which property keys you use from the L2 constructs in your app. This includes property keys nested in dictionary objects. + * L2 construct property values of BOOL and ENUM types - Collect property key values of only BOOL and ENUM types. All other types, such as string values or construct references will be redacted. + * L2 construct method usage - Collection method name, parameter keys and parameter values of BOOL and ENUM type. + `, + introducedIn: { v2: 'V2NEXT' }, + recommendedValue: true, + }, }; const CURRENT_MV = 'v2'; diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 724c217e5f760..1829fa06c524e 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -496,6 +496,7 @@ "./cloud-assembly-schema": "./cloud-assembly-schema/index.js", "./cloudformation-include": "./cloudformation-include/index.js", "./core": "./core/index.js", + "./core/lib/metadata-resource": "./core/lib/metadata-resource.js", "./core/lib/helpers-internal": "./core/lib/helpers-internal/index.js", "./custom-resources": "./custom-resources/index.js", "./custom-resources/lib/helpers-internal": "./custom-resources/lib/helpers-internal/index.js", diff --git a/packages/aws-cdk-lib/recommended-feature-flags.json b/packages/aws-cdk-lib/recommended-feature-flags.json index 71285e804b547..74b67518cee72 100644 --- a/packages/aws-cdk-lib/recommended-feature-flags.json +++ b/packages/aws-cdk-lib/recommended-feature-flags.json @@ -61,5 +61,6 @@ "@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-route53-targets:userPoolDomainNameMethodWithoutCustomResource": true, + "@aws-cdk/core:enableAdditionalMetadataCollection": true } \ No newline at end of file From 9f27e6fdfd8a37db9639d0d5b9a388401b15cf92 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Thu, 9 Jan 2025 17:01:19 -0800 Subject: [PATCH 02/10] update enum name --- packages/aws-cdk-lib/core/lib/metadata-resource.ts | 2 +- packages/aws-cdk-lib/core/lib/private/runtime-info.ts | 2 +- packages/aws-cdk-lib/core/test/private/runtime-info.test.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk-lib/core/lib/metadata-resource.ts b/packages/aws-cdk-lib/core/lib/metadata-resource.ts index 0fccef20f3334..3d18f592b3054 100644 --- a/packages/aws-cdk-lib/core/lib/metadata-resource.ts +++ b/packages/aws-cdk-lib/core/lib/metadata-resource.ts @@ -18,5 +18,5 @@ export enum MetadataType { * Metadata type for feature flags. * This is used to track analytics related to feature flags in the CDK. */ - FEATURE_FLAGS = 'aws:cdk:analytics:featureflag', + FEATURE_FLAG = 'aws:cdk:analytics:featureflag', } diff --git a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts index 1323f8da0ffd8..65d398689d7e2 100644 --- a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts +++ b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts @@ -56,7 +56,7 @@ export function redactTelemetryData(metadata: MetadataEntry[]): Record { data: { bool: true, nested: { foo: 'bar' }, arr: [1, 2, 3], str: 'foo' }, }, { - type: MetadataType.FEATURE_FLAGS, + type: MetadataType.FEATURE_FLAG, data: 'foobar', }, { @@ -82,7 +82,7 @@ test('test metadata is redacted correctly', () => { }, }, { - type: MetadataType.FEATURE_FLAGS, + type: MetadataType.FEATURE_FLAG, data: '*', }, { From d15c0f2bf89b34033cbdead3c591ea9d2cef2aa3 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Thu, 9 Jan 2025 17:27:03 -0800 Subject: [PATCH 03/10] update unit test --- .../core/test/metadata-resource.test.ts | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/packages/aws-cdk-lib/core/test/metadata-resource.test.ts b/packages/aws-cdk-lib/core/test/metadata-resource.test.ts index fb842d739241e..4e137e93058e9 100644 --- a/packages/aws-cdk-lib/core/test/metadata-resource.test.ts +++ b/packages/aws-cdk-lib/core/test/metadata-resource.test.ts @@ -52,28 +52,44 @@ describe('MetadataResource', () => { expect(stackTemplate.Resources?.CDKMetadata?.Condition).toBeDefined(); }); - it.each( - [ - [true, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], - [false, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], - [undefined, { Condition: 'CDKMetadataAvailable', Properties: { Analytics: 'v2:deflate64:H4sIAAAAAAAA/8vLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ACoQHZIJQAAAA==' }, Type: 'AWS::CDK::Metadata' }], - ], - )('when no metadata is added by default, CDKMetadata should be the same', (enableAdditionalTelemtry, cdkMetadata) => { - const myApp = new App({ - analyticsReporting: true, - }); - myApp.node.setContext(ENABLE_ADDITIONAL_METADATA_COLLECTION, enableAdditionalTelemtry); - const myStack = new Stack(myApp, 'MyStack'); - new Function(myStack, 'MyFunction', { - runtime: Runtime.PYTHON_3_9, - handler: 'index.handler', - code: Code.fromInline( - "def handler(event, context):\n\tprint('The function has been invoked.')", - ), - }); + test('when no metadata is added by default, CDKMetadata should be the same', () => { + const myApps = [ + new App({ + analyticsReporting: true, + postCliContext: { + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: true, + }, + }), + new App({ + analyticsReporting: true, + postCliContext: { + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: false, + }, + }), + new App({ + analyticsReporting: true, + postCliContext: { + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: undefined, + }, + }), + ]; + + for (const myApp of myApps) { + const myStack = new Stack(myApp, 'MyStack'); + new Function(myStack, 'MyFunction', { + runtime: Runtime.PYTHON_3_9, + handler: 'index.handler', + code: Code.fromInline( + "def handler(event, context):\n\tprint('The function has been invoked.')", + ), + }); + } - const stackTemplate = myApp.synth().getStackByName('MyStack').template; - expect(stackTemplate.Resources?.CDKMetadata).toEqual(cdkMetadata); + const stackTemplate1 = myApps[0].synth().getStackByName('MyStack').template; + const stackTemplate2 = myApps[1].synth().getStackByName('MyStack').template; + const stackTemplate3 = myApps[2].synth().getStackByName('MyStack').template; + expect(stackTemplate1.Resources?.CDKMetadata).toEqual(stackTemplate2.Resources?.CDKMetadata); + expect(stackTemplate1.Resources?.CDKMetadata).toEqual(stackTemplate3.Resources?.CDKMetadata); }); test('includes the formatted Analytics property', () => { From f9f14d45a4d41d4cd5cc813836dcb96841cc9b2a Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 09:30:43 -0800 Subject: [PATCH 04/10] update integ test --- ...efaultTestDeployAssert3F14AD57.assets.json | 4 +- ...aultTestDeployAssert3F14AD57.template.json | 275 ------------------ .../EnableTelemtryStack.assets.json | 4 +- .../EnableTelemtryStack.template.json | 273 ----------------- .../manifest.json | 38 +-- .../tree.json | 52 ---- .../test/integ.enable-additional-metadata.ts | 1 - packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 220 ++++++++++++-- packages/aws-cdk-lib/package.json | 2 +- .../recommended-feature-flags.json | 1 + 10 files changed, 211 insertions(+), 659 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json index f9c69df08d490..9e44dfaca42dd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets.json @@ -1,7 +1,7 @@ { "version": "39.0.0", "files": { - "d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251": { + "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { "path": "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251.json", + "objectKey": "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json index 4db2325abb27a..ad9d0fb73d1dd 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.template.json @@ -1,279 +1,4 @@ { - "Resources": { - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/zPQM9AzUEwsL9ZNTsnWzclM0gsuSUzO1snLT0nVyyrWLzMy0DM00jNSzCrOzNQtKs0rycxN1QuC0ADFzrfTPQAAAA==" - }, - "Condition": "CDKMetadataAvailable" - } - }, - "Conditions": { - "CDKMetadataAvailable": { - "Fn::Or": [ - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "af-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-3" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-south-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-3" - ] - } - ] - }, - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-4" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ca-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ca-west-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "cn-north-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "cn-northwest-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-central-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-north-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-south-2" - ] - } - ] - }, - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-3" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "il-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "me-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "me-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "sa-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-east-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-west-1" - ] - } - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-west-2" - ] - } - ] - } - }, "Parameters": { "BootstrapVersion": { "Type": "AWS::SSM::Parameter::Value", diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json index a3cdf26389b7a..728de54bd3051 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.assets.json @@ -1,7 +1,7 @@ { "version": "39.0.0", "files": { - "9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b": { + "b6503dca5951e510ce013d2525009c961587cc7267ceff8ecacb15d7fb7db461": { "source": { "path": "EnableTelemtryStack.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b.json", + "objectKey": "b6503dca5951e510ce013d2525009c961587cc7267ceff8ecacb15d7fb7db461.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json index 4ddaba9ac1273..40382f0cbd21a 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/EnableTelemtryStack.template.json @@ -57,279 +57,6 @@ "DependsOn": [ "MyFunctionServiceRole3C357FF2" ] - }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/5WQTU/DMAyGfws5oiyMHXsF8SGBBBviMiHkpt4wS50RJ0xTlf+OmrbAEU7+iP3meT03czM/gYPMbLObOapNt4pgdxoO8trJh5juMWHCdaficY+qUnCQyja7ChjcMZKVynqWGJKNSqsGIqiqU58kVJOjeHyiFn2KfRNanziqSp0qrRJTaTqo0Y09En/3u+R7co6klDnn/KIvNlx4snbQ1g2Y7iqxjeT5v4QhcaQW+5Shj+VLSfu9D1Fu2RHjhW9QVTEk1GoDLbnjN+gzBILaoao24AS1qhM3jnh76e0Ow20L26JNQ1K2XktxA/I2OPpZ+uP4RNdzXaeQHoLfUL8/QU4DK4b9KkKII17W6g24cRhGbVucdWMcPQ2mB63p2tN5syZoTbf0Dtfloc9y1ksUn4LF9UvW7Bs073L2uZib84VZnLwL0Ww8tFkO8Qsy2kO1cgIAAA==" - }, - "Condition": "CDKMetadataAvailable" - } - }, - "Conditions": { - "CDKMetadataAvailable": { - "Fn::Or": [ - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "af-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-northeast-3" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-south-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-3" - ] - } - ] - }, - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ap-southeast-4" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ca-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "ca-west-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "cn-north-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "cn-northwest-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-central-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-north-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-south-2" - ] - } - ] - }, - { - "Fn::Or": [ - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "eu-west-3" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "il-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "me-central-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "me-south-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "sa-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-east-1" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-east-2" - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-west-1" - ] - } - ] - }, - { - "Fn::Equals": [ - { - "Ref": "AWS::Region" - }, - "us-west-2" - ] - } - ] } }, "Parameters": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json index d78fe74894290..1ff542acc1419 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/9febe67ad809636564602131bb0c8b1291904d92789bd3e6803a3cb2409d768b.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/b6503dca5951e510ce013d2525009c961587cc7267ceff8ecacb15d7fb7db461.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -93,28 +93,34 @@ "data": "MyFunction3BAA72D1" } ], - "/EnableTelemtryStack/CDKMetadata/Default": [ + "/EnableTelemtryStack/BootstrapVersion": [ { "type": "aws:cdk:logicalId", - "data": "CDKMetadata" + "data": "BootstrapVersion" } ], - "/EnableTelemtryStack/CDKMetadata/Condition": [ + "/EnableTelemtryStack/CheckBootstrapVersion": [ { "type": "aws:cdk:logicalId", - "data": "CDKMetadataAvailable" + "data": "CheckBootstrapVersion" } ], - "/EnableTelemtryStack/BootstrapVersion": [ + "MyBucketF68F3FF0": [ { "type": "aws:cdk:logicalId", - "data": "BootstrapVersion" + "data": "MyBucketF68F3FF0", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] } ], - "/EnableTelemtryStack/CheckBootstrapVersion": [ + "CDKMetadata": [ { "type": "aws:cdk:logicalId", - "data": "CheckBootstrapVersion" + "data": "CDKMetadata", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] } ] }, @@ -137,7 +143,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/d1a201f6686b51e0991e72889d4bd4a576adc2c45fed86dbb7418437b2cb3251.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -153,18 +159,6 @@ "EnableAdditionalMetadataDefaultTestDeployAssert3F14AD57.assets" ], "metadata": { - "/Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Default": [ - { - "type": "aws:cdk:logicalId", - "data": "CDKMetadata" - } - ], - "/Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Condition": [ - { - "type": "aws:cdk:logicalId", - "data": "CDKMetadataAvailable" - } - ], "/Enable Additional Metadata/DefaultTest/DeployAssert/BootstrapVersion": [ { "type": "aws:cdk:logicalId", diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json index 6aa4f30c3198e..03bb61260684c 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.js.snapshot/tree.json @@ -168,32 +168,6 @@ ] } }, - "CDKMetadata": { - "id": "CDKMetadata", - "path": "EnableTelemtryStack/CDKMetadata", - "children": { - "Default": { - "id": "Default", - "path": "EnableTelemtryStack/CDKMetadata/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - }, - "Condition": { - "id": "Condition", - "path": "EnableTelemtryStack/CDKMetadata/Condition", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnCondition", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, "BootstrapVersion": { "id": "BootstrapVersion", "path": "EnableTelemtryStack/BootstrapVersion", @@ -236,32 +210,6 @@ "id": "DeployAssert", "path": "Enable Additional Metadata/DefaultTest/DeployAssert", "children": { - "CDKMetadata": { - "id": "CDKMetadata", - "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata", - "children": { - "Default": { - "id": "Default", - "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Default", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnResource", - "version": "0.0.0" - } - }, - "Condition": { - "id": "Condition", - "path": "Enable Additional Metadata/DefaultTest/DeployAssert/CDKMetadata/Condition", - "constructInfo": { - "fqn": "aws-cdk-lib.CfnCondition", - "version": "0.0.0" - } - } - }, - "constructInfo": { - "fqn": "constructs.Construct", - "version": "10.4.2" - } - }, "BootstrapVersion": { "id": "BootstrapVersion", "path": "Enable Additional Metadata/DefaultTest/DeployAssert/BootstrapVersion", diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts index 06d822f3e9764..6199f6e3c0dcc 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.enable-additional-metadata.ts @@ -10,7 +10,6 @@ import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; */ const app = new cdk.App({ - analyticsReporting: true, postCliContext: { [ENABLE_ADDITIONAL_METADATA_COLLECTION]: true, }, diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 9f6fe9017ee75..e1b63611acfe2 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -84,8 +84,8 @@ Flags come in three types: | [@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault](#aws-cdkaws-ec2bastionhostuseamazonlinux2023bydefault) | When enabled, the BastionHost construct will use the latest Amazon Linux 2023 AMI, instead of Amazon Linux 2. | 2.172.0 | (default) | | [@aws-cdk/core:aspectStabilization](#aws-cdkcoreaspectstabilization) | When enabled, a stabilization loop will be run when invoking Aspects during synthesis. | 2.172.0 | (config) | | [@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource](#aws-cdkaws-route53-targetsuserpooldomainnamemethodwithoutcustomresource) | When enabled, use a new method for DNS Name of user pool domain target without creating a custom resource. | 2.174.0 | (fix) | -| [@aws-cdk/aws-ecs:disableEcsImdsBlocking](#aws-cdkaws-ecsdisableecsimdsblocking) | When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)** | V2NEXT | (temporary) | -| [@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature](#aws-cdkaws-ecsenableimdsblockingdeprecatedfeature) | When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)** | V2NEXT | (temporary) | +| [@aws-cdk/aws-ecs:disableEcsImdsBlocking](#aws-cdkaws-ecsdisableecsimdsblocking) | When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)** | 2.175.0 | (temporary) | +| [@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature](#aws-cdkaws-ecsenableimdsblockingdeprecatedfeature) | When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)** | 2.175.0 | (temporary) | | [@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault](#aws-cdkaws-elasticloadbalancingv2albdualstackwithoutpublicipv4securitygrouprulesdefault) | When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere | V2NEXT | (fix) | | [@aws-cdk/core:enableAdditionalMetadataCollection](#aws-cdkcoreenableadditionalmetadatacollection) | When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues. | V2NEXT | (config) | @@ -242,6 +242,7 @@ different environments). This means that the name of the synthesized template file will be based on the construct path and not on the defined `stackName` of the stack. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.16.0 | `false` | `true` | @@ -249,6 +250,7 @@ of the stack. **Compatibility with old behavior:** Pass stack identifiers to the CLI instead of stack names. + ### aws-cdk:enableDiffNoFail *Make `cdk diff` not fail when there are differences* (default) @@ -256,13 +258,14 @@ of the stack. Determines what status code `cdk diff` should return when the specified stack differs from the deployed stack or the local CloudFormation template: -- `aws-cdk:enableDiffNoFail=true` => status code == 0 -- `aws-cdk:enableDiffNoFail=false` => status code == 1 +* `aws-cdk:enableDiffNoFail=true` => status code == 0 +* `aws-cdk:enableDiffNoFail=false` => status code == 1 You can override this behavior with the --fail flag: -- `--fail` => status code == 1 -- `--no-fail` => status code == 0 +* `--fail` => status code == 1 +* `--no-fail` => status code == 0 + | Since | Default | Recommended | | ----- | ----- | ----- | @@ -271,6 +274,7 @@ You can override this behavior with the --fail flag: **Compatibility with old behavior:** Specify `--fail` to the CLI. + ### @aws-cdk/aws-ecr-assets:dockerIgnoreSupport *DockerImageAsset properly supports `.dockerignore` files by default* (default) @@ -282,6 +286,7 @@ is standard Docker ignore semantics. This is a feature flag as the old behavior was technically incorrect but users may have come to depend on it. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.73.0 | `false` | `true` | @@ -289,6 +294,7 @@ users may have come to depend on it. **Compatibility with old behavior:** Update your `.dockerignore` file to match standard Docker ignore rules, if necessary. + ### @aws-cdk/aws-secretsmanager:parseOwnedSecretName *Fix the referencing of SecretsManager names from ARNs* (default) @@ -299,6 +305,7 @@ rather than the default full resource name, which includes the SecretsManager su If this flag is not set, Secret.secretName will include the SecretsManager suffix, which cannot be directly used by SecretsManager.DescribeSecret, and must be parsed by the user first (e.g., Fn:Join, Fn:Select, Fn:Split). + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.77.0 | `false` | `true` | @@ -306,6 +313,7 @@ used by SecretsManager.DescribeSecret, and must be parsed by the user first (e.g **Compatibility with old behavior:** Use `parseArn(secret.secretName).resourceName` to emulate the incorrect old parsing. + ### @aws-cdk/aws-kms:defaultKeyPolicies *Tighten default KMS key policies* (default) @@ -322,6 +330,7 @@ true, the policy matches what happens when this feature flag is set. Additionally, if this flag is not set and the user supplies a custom key policy, this will be appended to the key's default policy (rather than replacing it). + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.78.0 | `false` | `true` | @@ -329,6 +338,7 @@ to the key's default policy (rather than replacing it). **Compatibility with old behavior:** Pass `trustAccountIdentities: false` to `Key` construct to restore the old behavior. + ### @aws-cdk/aws-s3:grantWriteWithoutAcl *Remove `PutObjectAcl` from Bucket.grantWrite* (default) @@ -339,6 +349,7 @@ which could be used to grant read/write object access to IAM principals in other Use a feature flag to make sure existing customers who might be relying on the overly-broad permissions are not broken. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.85.0 | `false` | `true` | @@ -346,6 +357,7 @@ on the overly-broad permissions are not broken. **Compatibility with old behavior:** Call `bucket.grantPutAcl()` in addition to `bucket.grantWrite()` to grant ACL permissions. + ### @aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount *Do not specify a default DesiredCount for ECS services* (default) @@ -360,6 +372,7 @@ If this flag is not set, the default behaviour for CfnService.desiredCount is to desiredCount of 1, if one is not provided. If true, a default will not be defined for CfnService.desiredCount and as such desiredCount will be undefined, if one is not provided. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.92.0 | `false` | `true` | @@ -367,12 +380,14 @@ CfnService.desiredCount and as such desiredCount will be undefined, if one is no **Compatibility with old behavior:** You can pass `desiredCount: 1` explicitly, but you should never need this. + ### @aws-cdk/aws-efs:defaultEncryptionAtRest *Enable this feature flag to have elastic file systems encrypted at rest by default.* (default) Encryption can also be configured explicitly using the `encrypted` property. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.98.0 | `false` | `true` | @@ -380,6 +395,7 @@ Encryption can also be configured explicitly using the `encrypted` property. **Compatibility with old behavior:** Pass the `encrypted: false` property to the `FileSystem` construct to disable encryption. + ### @aws-cdk/core:newStyleStackSynthesis *Switch to new stack synthesis method which enables CI/CD* (fix) @@ -387,11 +403,13 @@ Encryption can also be configured explicitly using the `encrypted` property. If this flag is specified, all `Stack`s will use the `DefaultStackSynthesizer` by default. If it is not set, they will use the `LegacyStackSynthesizer`. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.39.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/core:stackRelativeExports *Name exports based on the construct paths relative to the stack, rather than the global construct path* (fix) @@ -401,11 +419,13 @@ ensure uniqueness, and makes the export names robust against refactoring the location of the stack in the construct tree (specifically, moving the Stack into a Stage). + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.58.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/aws-rds:lowercaseDbIdentifier *Force lowercasing of RDS Cluster names in CDK* (fix) @@ -420,11 +440,13 @@ Must be behind a permanent flag because changing a name from mixed case to lower would lead CloudFormation to think the name was changed and would trigger a cluster replacement (losing data!). + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.97.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId *Allow adding/removing multiple UsagePlanKeys independently* (fix) @@ -442,11 +464,13 @@ which again is disallowed. In effect, there is no way to get out of this mess in a backwards compatible way, while supporting existing stacks. This flag changes the logical id layout of UsagePlanKey to not be sensitive to order. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.98.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/aws-lambda:recognizeVersionProps *Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`.* (fix) @@ -456,22 +480,26 @@ not constitute creating a new Version. See 'currentVersion' section in the aws-lambda module's README for more details. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.106.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021 *Enable this feature flag to have cloudfront distributions use the security policy TLSv1.2_2021 by default.* (fix) The security policy can also be configured explicitly using the `minimumProtocolVersion` property. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.117.0 | `false` | `true` | | 2.0.0 | `true` | `true` | + ### @aws-cdk/core:target-partitions *What regions to include in lookup tables of environment agnostic stacks* (config) @@ -481,11 +509,13 @@ of unnecessary regions included in stacks without a known region. The type of this value should be a list of strings. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.137.0 | `false` | `["aws","aws-cn"]` | | 2.4.0 | `false` | `["aws","aws-cn"]` | + ### @aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver *ECS extensions will automatically add an `awslogs` driver if no logging is specified* (default) @@ -495,6 +525,7 @@ Enable this feature flag to configure default logging behavior for the ECS Servi This is a feature flag as the new behavior provides a better default experience for the users. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.140.0 | `false` | `true` | @@ -502,6 +533,7 @@ This is a feature flag as the new behavior provides a better default experience **Compatibility with old behavior:** Specify a log driver explicitly. + ### @aws-cdk/aws-ec2:uniqueImdsv2TemplateName *Enable this feature flag to have Launch Templates generated by the `InstanceRequireImdsv2Aspect` use unique names.* (fix) @@ -512,11 +544,13 @@ account and region, the deployments would always fail as the generated Launch Te The new implementation addresses this issue by generating the Launch Template name with the `Names.uniqueId` method. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.140.0 | `false` | `true` | | 2.8.0 | `false` | `true` | + ### @aws-cdk/aws-iam:minimizePolicies *Minimize IAM policies by combining Statements* (config) @@ -525,11 +559,13 @@ Minimize IAM policies by combining Principals, Actions and Resources of two Statements in the policies, as long as it doesn't change the meaning of the policy. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.150.0 | `false` | `true` | | 2.18.0 | `false` | `true` | + ### @aws-cdk/core:checkSecretUsage *Enable this flag to make it impossible to accidentally use SecretValues in unsafe locations* (config) @@ -538,11 +574,13 @@ With this flag enabled, `SecretValue` instances can only be passed to constructs that accept `SecretValue`s; otherwise, `unsafeUnwrap()` must be called to use it as a regular string. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.153.0 | `false` | `true` | | 2.21.0 | `false` | `true` | + ### @aws-cdk/aws-lambda:recognizeLayerVersion *Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`.* (fix) @@ -551,11 +589,13 @@ This flag correct incorporates Lambda Layer properties into the Lambda Function See 'currentVersion' section in the aws-lambda module's README for more details. + | Since | Default | Recommended | | ----- | ----- | ----- | | 1.159.0 | `false` | `true` | | 2.27.0 | `false` | `true` | + ### @aws-cdk/core:validateSnapshotRemovalPolicy *Error on snapshot removal policies on resources that do not support it.* (default) @@ -565,6 +605,7 @@ If supplied on an unsupported resource, CloudFormation ignores the policy altoge This flag will reduce confusion and unexpected loss of data when erroneously supplying the snapshot removal policy. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -572,6 +613,7 @@ the snapshot removal policy. **Compatibility with old behavior:** The old behavior was incorrect. Update your source to not specify SNAPSHOT policies on resources that do not support it. + ### @aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName *Generate key aliases that include the stack name* (fix) @@ -583,11 +625,13 @@ the KMS key alias name created for these pipelines may be the same due to how th This new implementation creates a stack safe resource name for the alias using the stack name instead of the stack ID. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.29.0 | `false` | `true` | + ### @aws-cdk/aws-s3:createDefaultLoggingPolicy *Enable this feature flag to create an S3 bucket policy by default in cases where an AWS service would automatically create the Policy if one does not exist.* (fix) @@ -601,13 +645,15 @@ and error indicating that a bucket policy already exists. In cases where we know what the required policy is we can go ahead and create the policy so we can remain in control of it. -@see +@see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3 + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.31.0 | `false` | `true` | + ### @aws-cdk/aws-sns-subscriptions:restrictSqsDescryption *Restrict KMS key policy for encrypted Queues a bit more* (fix) @@ -619,11 +665,13 @@ Previously the decryption was only restricted to the SNS service principal. To m secure, it is a good practice to restrict the decryption further and only allow the connected SNS topic to decryption the subscribed queue. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.32.0 | `false` | `true` | + ### @aws-cdk/aws-ecs:arnFormatIncludesClusterName *ARN format used by ECS. In the new ARN format, the cluster name is part of the resource ID.* (fix) @@ -633,31 +681,35 @@ If this flag is set, the new ARN format (with cluster name) for ECS is used. This is a feature flag as the old format is still valid for existing ECS clusters. -See +See https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.35.0 | `false` | `true` | + ### @aws-cdk/aws-apigateway:disableCloudWatchRole *Make default CloudWatch Role behavior safe for multiple API Gateways in one environment* (fix) Enable this feature flag to change the default behavior for aws-apigateway.RestApi and aws-apigateway.SpecRestApi -to *not* create a CloudWatch role and Account. There is only a single ApiGateway account per AWS +to _not_ create a CloudWatch role and Account. There is only a single ApiGateway account per AWS environment which means that each time you create a RestApi in your account the ApiGateway account is overwritten. If at some point the newest RestApi is deleted, the ApiGateway Account and CloudWatch role will also be deleted, breaking any existing ApiGateways that were depending on them. When this flag is enabled you should either create the ApiGateway account and CloudWatch role -separately *or* only enable the cloudWatchRole on a single RestApi. +separately _or_ only enable the cloudWatchRole on a single RestApi. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.38.0 | `false` | `true` | + ### @aws-cdk/core:enablePartitionLiterals *Make ARNs concrete if AWS partition is known* (fix) @@ -686,11 +738,13 @@ Principal: The intrinsic function will still be used in Stacks where no region is defined or the region's partition is unknown. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.38.0 | `false` | `true` | + ### @aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker *Avoid setting the "ECS" deployment controller when adding a circuit breaker* (fix) @@ -701,11 +755,13 @@ This does not change any behaviour as the default deployment controller when it This is a feature flag as the new behavior provides a better default experience for the users. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.51.0 | `false` | `true` | + ### @aws-cdk/aws-events:eventsTargetQueueSameAccount *Event Rules may only push to encrypted SQS queues in the same account* (fix) @@ -714,11 +770,13 @@ This flag applies to SQS Queues that are used as the target of event Rules. When from the same account as the Rule can send messages. If a queue is unencrypted, this restriction will always apply, regardless of the value of this flag. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.51.0 | `false` | `true` | + ### @aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName *Enable this feature to by default create default policy names for imported roles that depend on the stack the role is in.* (fix) @@ -729,11 +787,13 @@ of a role using the same default policy name. This new implementation creates default policy names based on the constructs node path in their stack. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.60.0 | `false` | `true` | + ### @aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy *Use S3 Bucket Policy instead of ACLs for Server Access Logging* (fix) @@ -745,13 +805,15 @@ enabled on the bucket. This flag uses a Bucket Policy statement to allow Server Access Log delivery, following best practices for S3. -@see +@see https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.60.0 | `false` | `true` | + ### @aws-cdk/customresources:installLatestAwsSdkDefault *Whether to install the latest SDK by default in AwsCustomResource* (default) @@ -763,6 +825,7 @@ do not have internet access, or in environments where 'npmjs.com' is not availab The recommended setting is to disable the default installation behavior, and pass the flag on a resource-by-resource basis to enable it if necessary. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -770,6 +833,7 @@ flag on a resource-by-resource basis to enable it if necessary. **Compatibility with old behavior:** Set installLatestAwsSdk: true on all resources that need it. + ### @aws-cdk/aws-route53-patters:useCertificate *Use the official `Certificate` resource instead of `DnsValidatedCertificate`* (default) @@ -779,6 +843,7 @@ of the deprecated `DnsValidatedCertificate` construct. If this flag is enabled a the stack in a region other than us-east-1 then you must also set `crossRegionReferences=true` on the stack. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -786,6 +851,7 @@ stack. **Compatibility with old behavior:** Define a `DnsValidatedCertificate` explicitly and pass in the `certificate` property + ### @aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup *Remove CloudWatch alarms from deployment group* (fix) @@ -794,11 +860,13 @@ Enable this flag to be able to remove all CloudWatch alarms from a deployment gr the alarms from the construct. If this flag is not set, removing all alarms from the construct will still leave the alarms configured for the deployment group. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.65.0 | `false` | `true` | + ### @aws-cdk/aws-rds:databaseProxyUniqueResourceName *Use unique resource name for Database Proxy* (fix) @@ -811,11 +879,13 @@ If this flag is set, the default behavior is to use unique resource names for ea This is a feature flag as the old behavior was technically incorrect, but users may have come to depend on it. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.65.0 | `false` | `true` | + ### @aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId *Include authorizer configuration in the calculation of the API deployment logical ID.* (fix) @@ -825,11 +895,13 @@ the API configuration, including methods, and resources, etc. Enable this featur to also include the configuration of any authorizer attached to the API in the calculation, so any changes made to an authorizer will create a new deployment. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.66.0 | `false` | `true` | + ### @aws-cdk/aws-ec2:launchTemplateDefaultUserData *Define user data for a launch template by default when a machine image is provided.* (fix) @@ -838,11 +910,13 @@ The ec2.LaunchTemplate construct did not define user data when a machine image i provided despite the document. If this is set, a user data is automatically defined according to the OS of the machine image. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.67.0 | `false` | `true` | + ### @aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments *SecretTargetAttachments uses the ResourcePolicy of the attached Secret.* (fix) @@ -858,11 +932,13 @@ This won't be possible without intervention due to limitation outlined above. First remove all permissions granted to the Secret and deploy without the ResourcePolicies. Then you can re-add the permissions and deploy again. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.67.0 | `false` | `true` | + ### @aws-cdk/aws-redshift:columnId *Whether to use an ID to track Redshift column changes* (fix) @@ -879,11 +955,13 @@ than their `name`. This will prevent data loss when columns are renamed. initial deployment, the columns will be dropped and recreated, causing data loss. After the initial deployment of the `id`s, the `name`s of the columns can be changed without data loss. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.68.0 | `false` | `true` | + ### @aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2 *Enable AmazonEMRServicePolicy_v2 managed policies* (fix) @@ -897,11 +975,13 @@ managed policies. This is a feature flag as the old behavior will be deprecated, but some resources may require manual intervention since they might not have the appropriate tags propagated automatically. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.72.0 | `false` | `true` | + ### @aws-cdk/aws-apigateway:requestValidatorUniqueId *Generate a unique id for each RequestValidator added to a method* (fix) @@ -912,11 +992,13 @@ providing the `RequestValidatorOptions` in the `addMethod()` method. If the flag is not set then only a single RequestValidator can be added in this way. Any additional RequestValidators have to be created directly with `new RequestValidator`. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.78.0 | `false` | `true` | + ### @aws-cdk/aws-ec2:restrictDefaultSecurityGroup *Restrict access to the VPC default security group* (default) @@ -926,17 +1008,20 @@ VPC default security group. When a VPC is created, a default security group is created as well and this cannot be deleted. The default security group is created with ingress/egress rules that allow -*all* traffic. [AWS Security best practices recommend](https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-2) +_all_ traffic. [AWS Security best practices recommend](https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-2) removing these ingress/egress rules in order to restrict access to the default security group. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.78.0 | `false` | `true` | -**Compatibility with old behavior:** +**Compatibility with old behavior:** To allow all ingress/egress traffic to the VPC default security group you can set the `restrictDefaultSecurityGroup: false`. + + ### @aws-cdk/aws-kms:aliasNameRef @@ -948,11 +1033,13 @@ when referencing key.aliasName or key.keyArn. If the flag is not set then a raw string is passed as the Alias name and no implicit dependencies will be set. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.83.0 | `false` | `true` | + ### @aws-cdk/core:includePrefixInUniqueNameGeneration *Include the stack prefix in the stack name generation process* (fix) @@ -966,11 +1053,13 @@ If the flag is not set, then the prefix of the stack is prepended to the generat feature flag can lead to a change in stacks' name. Changing a stack name mean recreating the whole stack, which is not viable in some productive setups. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.84.0 | `false` | `true` | + ### @aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig *Generate a launch template when creating an AutoScalingGroup* (fix) @@ -983,14 +1072,17 @@ will now create an equivalent 'launchTemplate'. Alternatively, users can provide attempt to set user data according to the OS of the machine image if explicit user data is not provided. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.88.0 | `false` | `true` | -**Compatibility with old behavior:** +**Compatibility with old behavior:** If backwards compatibility needs to be maintained due to an existing autoscaling group using a launch config, set this flag to false. + + ### @aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby @@ -999,6 +1091,7 @@ provided. If this is set, an opensearch domain will automatically be created with multi-az with standby enabled. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1006,6 +1099,7 @@ multi-az with standby enabled. **Compatibility with old behavior:** Pass `capacity.multiAzWithStandbyEnabled: false` to `Domain` construct to restore the old behavior. + ### @aws-cdk/aws-efs:denyAnonymousAccess *EFS denies anonymous clients accesses* (default) @@ -1016,6 +1110,7 @@ access to `efs.FileSystem`. If this flag is not set, `efs.FileSystem` will allow all anonymous clients that can access over the network. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1023,6 +1118,7 @@ that can access over the network. **Compatibility with old behavior:** You can pass `allowAnonymousAccess: true` so allow anonymous clients access. + ### @aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId *When enabled, mount targets will have a stable logicalId that is linked to the associated subnet.* (fix) @@ -1034,11 +1130,13 @@ subnets changes. Set this flag to false for existing mount targets. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.93.0 | `false` | `true` | + ### @aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion *Enables aws-lambda-nodejs.Function to use the latest available NodeJs runtime as the default* (default) @@ -1048,6 +1146,7 @@ functions will us the latest version of the runtime provided by the Lambda service. Do not use this if you your lambda function is reliant on dependencies shipped as part of the runtime environment. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1055,6 +1154,7 @@ shipped as part of the runtime environment. **Compatibility with old behavior:** Pass `runtime: lambda.Runtime.NODEJS_16_X` to `Function` construct to restore the previous behavior. + ### @aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier *When enabled, will always use the arn for identifiers for CfnSourceApiAssociation in the GraphqlApi construct rather than id.* (fix) @@ -1063,11 +1163,13 @@ When this feature flag is enabled, we use the IGraphqlApi ARN rather than ID whe the GraphqlApi construct. Using the ARN allows the association to support an association with a source api or merged api in another account. Note that for existing source api associations created with this flag disabled, enabling the flag will lead to a resource replacement. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.97.0 | `false` | `true` | + ### @aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters *When enabled, a scope of InstanceParameterGroup for AuroraClusterInstance with each parameters will change.* (fix) @@ -1079,11 +1181,13 @@ from AuroraCluster. If the flag is set to false then it can only make one `AuroraClusterInstance` with each `InstanceParameterGroup` in the AuroraCluster. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.97.0 | `false` | `true` | + ### @aws-cdk/aws-rds:preventRenderingDeprecatedCredentials *When enabled, creating an RDS database cluster from a snapshot will only render credentials for snapshot credentials.* (fix) @@ -1101,11 +1205,13 @@ Set this flag to prevent rendering deprecated `credentials` and creating an extra database secret when only using `snapshotCredentials` to create an RDS database cluster from a snapshot. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.98.0 | `false` | `true` | + ### @aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource *When enabled, the CodeCommit source action is using the default branch name 'main'.* (fix) @@ -1114,11 +1220,13 @@ When setting up a CodeCommit source action for the source stage of a pipeline, p default branch is 'master'. However, with the activation of this feature flag, the default branch is updated to 'main'. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.103.1 | `false` | `true` | + ### @aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction *When enabled, the logical ID of a Lambda permission for a Lambda action includes an alarm ID.* (fix) @@ -1130,11 +1238,13 @@ can be created with `LambdaAction`. If the flag is set to false then it can only make one alarm for the Lambda with `LambdaAction`. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.124.0 | `false` | `true` | + ### @aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse *Enables Pipeline to set the default value for crossAccountKeys to false.* (default) @@ -1142,6 +1252,7 @@ If the flag is set to false then it can only make one alarm for the Lambda with When this feature flag is enabled, and the `crossAccountKeys` property is not provided in a `Pipeline` construct, the construct automatically defaults the value of this property to false. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1149,6 +1260,7 @@ construct, the construct automatically defaults the value of this property to fa **Compatibility with old behavior:** Pass `crossAccountKeys: true` to `Pipeline` construct to restore the previous behavior. + ### @aws-cdk/aws-codepipeline:defaultPipelineTypeToV2 *Enables Pipeline to set the default pipeline type to V2.* (default) @@ -1156,6 +1268,7 @@ construct, the construct automatically defaults the value of this property to fa When this feature flag is enabled, and the `pipelineType` property is not provided in a `Pipeline` construct, the construct automatically defaults the value of this property to `PipelineType.V2`. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1163,6 +1276,7 @@ construct, the construct automatically defaults the value of this property to `P **Compatibility with old behavior:** Pass `pipelineType: PipelineType.V1` to `Pipeline` construct to restore the previous behavior. + ### @aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope *When enabled, IAM Policy created from KMS key grant will reduce the resource scope to this key only.* (fix) @@ -1170,11 +1284,13 @@ construct, the construct automatically defaults the value of this property to `P When this feature flag is enabled and calling KMS key grant method, the created IAM policy will reduce the resource scope from '*' to this specific granting KMS key. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.134.0 | `false` | `true` | + ### @aws-cdk/aws-eks:nodegroupNameAttribute *When enabled, nodegroupName attribute of the provisioned EKS NodeGroup will not have the cluster name prefix.* (fix) @@ -1182,17 +1298,20 @@ When this feature flag is enabled and calling KMS key grant method, the created When this feature flag is enabled, the nodegroupName attribute will be exactly the name of the nodegroup without any prefix. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.139.0 | `false` | `true` | + ### @aws-cdk/aws-ec2:ebsDefaultGp3Volume *When enabled, the default volume type of the EBS volume will be GP3* (default) When this featuer flag is enabled, the default volume type of the EBS volume will be `EbsDeviceVolumeType.GENERAL_PURPOSE_SSD_GP3`. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1200,6 +1319,7 @@ When this featuer flag is enabled, the default volume type of the EBS volume wil **Compatibility with old behavior:** Pass `volumeType: EbsDeviceVolumeType.GENERAL_PURPOSE_SSD` to `Volume` construct to restore the previous behavior. + ### @aws-cdk/pipelines:reduceAssetRoleTrustScope *Remove the root account principal from PipelineAssetsFileRole trust policy* (default) @@ -1207,6 +1327,7 @@ When this featuer flag is enabled, the default volume type of the EBS volume wil When this feature flag is enabled, the root account principal will not be added to the trust policy of asset role. When this feature flag is disabled, it will keep the root account principal in the trust policy. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1214,12 +1335,14 @@ When this feature flag is disabled, it will keep the root account principal in t **Compatibility with old behavior:** Disable the feature flag to add the root account principal back + ### @aws-cdk/aws-ecs:removeDefaultDeploymentAlarm *When enabled, remove default deployment alarm settings* (default) When this featuer flag is enabled, remove the default deployment alarm settings when creating a AWS ECS service. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1227,6 +1350,7 @@ When this featuer flag is enabled, remove the default deployment alarm settings **Compatibility with old behavior:** Set AWS::ECS::Service 'DeploymentAlarms' manually to restore the previous behavior. + ### @aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault *When enabled, the custom resource used for `AwsCustomResource` will configure the `logApiResponseData` property as true by default* (fix) @@ -1234,17 +1358,19 @@ When this featuer flag is enabled, remove the default deployment alarm settings This results in 'logApiResponseData' being passed as true to the custom resource provider. This will cause the custom resource handler to receive an 'Update' event. If you don't have an SDK call configured for the 'Update' event and you're dependent on specific SDK call response data, you will see this error from CFN: -CustomResource attribute error: Vendor response doesn't contain attribute in object. See ) for more details. +CustomResource attribute error: Vendor response doesn't contain attribute in object. See https://github.com/aws/aws-cdk/issues/29949) for more details. Unlike most feature flags, we don't recommend setting this feature flag to true. However, if you're using the 'AwsCustomResource' construct with 'logApiResponseData' as true in the event object, then setting this feature flag will keep this behavior. Otherwise, setting this feature flag to false will trigger an 'Update' event by removing the 'logApiResponseData' property from the event object. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.145.0 | `false` | `false` | + ### @aws-cdk/aws-s3:keepNotificationInImportedBucket *When enabled, Adding notifications to a bucket in the current stack will not remove notification from imported stack.* (fix) @@ -1254,11 +1380,13 @@ Currently, adding notifications to a bucket where it was created by ourselves wi When this feature flag is enabled, adding notifications to a bucket in the current stack will only update notification defined in this stack. Other notifications that are not managed by this stack will be kept. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.155.0 | `false` | `false` | + ### @aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask *When enabled, use new props for S3 URI field in task definition of state machine for bedrock invoke model.* (fix) @@ -1269,6 +1397,7 @@ of State Machine Task definition. When this feature flag is enabled, specify newly introduced props 's3InputUri' and 's3OutputUri' to populate S3 uri under input and output fields in state machine task definition for Bedrock invoke model. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1276,6 +1405,7 @@ When this feature flag is enabled, specify newly introduced props 's3InputUri' a **Compatibility with old behavior:** Disable the feature flag to use input and output path fields for s3 URI + ### @aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions *When enabled, we will only grant the necessary permissions when users specify cloudwatch log group through logConfiguration* (fix) @@ -1285,6 +1415,7 @@ specified as logConfiguration and it will grant 'Resources': ['*'] to the task r When this feature flag is enabled, we will only grant the necessary permissions when users specify cloudwatch log group. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1292,6 +1423,7 @@ When this feature flag is enabled, we will only grant the necessary permissions **Compatibility with old behavior:** Disable the feature flag to continue grant permissions to log group when no log group is specified + ### @aws-cdk/aws-ec2:ec2SumTImeoutEnabled *When enabled, initOptions.timeout and resourceSignalTimeout values will be summed together.* (fix) @@ -1301,11 +1433,13 @@ only the value from 'resourceSignalTimeout' will be used. When this feature flag is enabled, if both initOptions.timeout and resourceSignalTimeout are specified, the values will to be summed together. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.160.0 | `false` | `true` | + ### @aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission *When enabled, a Lambda authorizer Permission created when using GraphqlApi will be properly scoped with a SourceArn.* (fix) @@ -1317,11 +1451,13 @@ it allows invocations from any source. When this feature flag is enabled, the AWS::Lambda::Permission will be properly scoped with the SourceArn corresponding to the specific AppSync GraphQL API. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | + ### @aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages *When enabled, both `@aws-sdk` and `@smithy` packages will be excluded from the Lambda Node.js 18.x runtime to prevent version mismatches in bundled applications.* (fix) @@ -1332,11 +1468,13 @@ However, this can cause version mismatches between the '@aws-sdk/*' and '@smithy When this feature flag is enabled, both '@aws-sdk/*' and '@smithy/*' packages will be excluded during the bundling process. This ensures that no mismatches occur between these tightly coupled dependencies when using the AWS SDK v3 in Lambda functions. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | + ### @aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId *When enabled, the value of property `instanceResourceId` in construct `DatabaseInstanceReadReplica` will be set to the correct value which is `DbiResourceId` instead of currently `DbInstanceArn`* (fix) @@ -1345,6 +1483,7 @@ Currently, the value of the property 'instanceResourceId' in construct 'Database When this feature flag is enabled, the value of that property will be as expected set to 'DbiResourceId' attribute, and that will fix the grantConnect method. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1352,6 +1491,7 @@ When this feature flag is enabled, the value of that property will be as expecte **Compatibility with old behavior:** Disable the feature flag to use `DbInstanceArn` as value for property `instanceResourceId` + ### @aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics *When enabled, CFN templates added with `cfn-include` will error if the template contains Resource Update or Create policies with CFN Intrinsics that include non-primitive values.* (fix) @@ -1360,11 +1500,13 @@ Without enabling this feature flag, `cfn-include` will silently drop resource up Enabling this feature flag will make `cfn-include` throw on these templates, unless you specify the logical ID of the resource in the 'unhydratedResources' property. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | + ### @aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy *When enabled, the resource of IAM Run Ecs policy generated by SFN EcsRunTask will reference the definition, instead of constructing ARN.* (fix) @@ -1374,11 +1516,13 @@ The revision number at the end will be replaced with a wildcard which it shouldn When this feature flag is enabled, if the task definition is created in the stack, the 'Resource' section will 'Ref' the taskDefinition. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.163.0 | `false` | `true` | + ### @aws-cdk/aws-dynamodb:resourcePolicyPerReplica *When enabled will allow you to specify a resource policy per replica, and not copy the source table policy to all replicas* (fix) @@ -1390,11 +1534,13 @@ This will prevent you from creating a new table which has an additional replica This is a feature flag as the old behavior was technically incorrect but users may have come to depend on it. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.164.0 | `false` | `true` | + ### @aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault *When enabled, the BastionHost construct will use the latest Amazon Linux 2023 AMI, instead of Amazon Linux 2.* (default) @@ -1406,6 +1552,7 @@ and secure option. When this feature flag is enabled, if you do not pass the machineImage property to the BastionHost construct, the latest Amazon Linux 2023 version will be used instead of Amazon Linux 2. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1413,6 +1560,7 @@ the latest Amazon Linux 2023 version will be used instead of Amazon Linux 2. **Compatibility with old behavior:** Disable the feature flag or explicitly pass an Amazon Linux 2 machine image to the BastionHost construct. + ### @aws-cdk/core:aspectStabilization *When enabled, a stabilization loop will be run when invoking Aspects during synthesis.* (config) @@ -1422,24 +1570,12 @@ This means that the Aspects that create other Aspects are not run and Aspects th When this feature flag is enabled, a stabilization loop is run to recurse the construct tree multiple times when invoking Aspects. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.172.0 | `true` | `true` | -### @aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource - -*When enabled, use a new method for DNS Name of user pool domain target without creating a custom resource.* (fix) - -When this feature flag is enabled, a new method will be used to get the DNS Name of the user pool domain target. The old method -creates a custom resource internally, but the new method doesn't need a custom resource. - -If the flag is set to false then a custom resource will be created when using `UserPoolDomainTarget`. - -| Since | Default | Recommended | -| ----- | ----- | ----- | -| (not in v1) | | | -| 2.174.0 | `false` | `true` | ### @aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource @@ -1463,11 +1599,12 @@ If the flag is set to false then a custom resource will be created when using `U In an ECS Cluster with `MachineImageType.AMAZON_LINUX_2`, the canContainersAccessInstanceRole=false option attempts to add commands to block containers from accessing IMDS. CDK cannot guarantee the correct execution of the feature in all platforms. Setting this feature flag -to true will ensure CDK does not attempt to implement IMDS blocking. By **end of 2025**, CDK will remove the +to true will ensure CDK does not attempt to implement IMDS blocking. By **end of 2025**, CDK will remove the IMDS blocking feature. See [Github discussion](https://github.com/aws/aws-cdk/discussions/32609) for more information. It is recommended to follow ECS documentation to block IMDS for your specific platform and cluster configuration. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1475,16 +1612,18 @@ It is recommended to follow ECS documentation to block IMDS for your specific pl **Compatibility with old behavior:** It is strongly recommended to set this flag to true. However, if necessary, set this flag to false to continue using the old implementation. + ### @aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature *When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)*** (temporary) In an ECS Cluster with `MachineImageType.AMAZON_LINUX_2`, the canContainersAccessInstanceRole=false option attempts to add commands to block containers from -accessing IMDS. Set this flag to true in order to use new and updated commands. Please note that this -feature alone with this feature flag will be deprecated by **end of 2025** as CDK cannot +accessing IMDS. Set this flag to true in order to use new and updated commands. Please note that this +feature alone with this feature flag will be deprecated by **end of 2025** as CDK cannot guarantee the correct execution of the feature in all platforms. See [Github discussion](https://github.com/aws/aws-cdk/discussions/32609) for more information. It is recommended to follow ECS documentation to block IMDS for your specific platform and cluster configuration. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1492,6 +1631,7 @@ It is recommended to follow ECS documentation to block IMDS for your specific pl **Compatibility with old behavior:** Set this flag to false in order to continue using old and outdated commands. However, it is **not** recommended. + ### @aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault *When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere* (fix) @@ -1502,6 +1642,7 @@ will allow IPv6 ingress from anywhere (::/0). Previously, the default security g Using a feature flag to make sure existing customers who might be relying on the overly restrictive permissions are not broken. + | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1509,4 +1650,21 @@ on the overly restrictive permissions are not broken. **Compatibility with old behavior:** Disable the feature flag to only allow IPv4 ingress in the default security group rules. + +### @aws-cdk/core:enableAdditionalMetadataCollection + +*When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues.* (config) + +When this feature flag is enabled, CDK expands the scope of usage data collection to include the following: + * L2 construct property keys - Collect which property keys you use from the L2 constructs in your app. This includes property keys nested in dictionary objects. + * L2 construct property values of BOOL and ENUM types - Collect property key values of only BOOL and ENUM types. All other types, such as string values or construct references will be redacted. + * L2 construct method usage - Collection method name, parameter keys and parameter values of BOOL and ENUM type. + + +| Since | Default | Recommended | +| ----- | ----- | ----- | +| (not in v1) | | | +| V2NEXT | `false` | `true` | + + diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 1829fa06c524e..aec2e60db7757 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -496,8 +496,8 @@ "./cloud-assembly-schema": "./cloud-assembly-schema/index.js", "./cloudformation-include": "./cloudformation-include/index.js", "./core": "./core/index.js", - "./core/lib/metadata-resource": "./core/lib/metadata-resource.js", "./core/lib/helpers-internal": "./core/lib/helpers-internal/index.js", + "./core/lib/metadata-resource": "./core/lib/metadata-resource.js", "./custom-resources": "./custom-resources/index.js", "./custom-resources/lib/helpers-internal": "./custom-resources/lib/helpers-internal/index.js", "./cx-api": "./cx-api/index.js", diff --git a/packages/aws-cdk-lib/recommended-feature-flags.json b/packages/aws-cdk-lib/recommended-feature-flags.json index 74b67518cee72..84da0b493278f 100644 --- a/packages/aws-cdk-lib/recommended-feature-flags.json +++ b/packages/aws-cdk-lib/recommended-feature-flags.json @@ -62,5 +62,6 @@ "@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/core:enableAdditionalMetadataCollection": true } \ No newline at end of file From 0e2bb88f980d795fa6b7583fe8e85b0a42f04829 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 09:43:17 -0800 Subject: [PATCH 05/10] fix spacing --- packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md | 194 ++----------------- 1 file changed, 18 insertions(+), 176 deletions(-) diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index e1b63611acfe2..1ad9b50f6be19 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -84,8 +84,8 @@ Flags come in three types: | [@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault](#aws-cdkaws-ec2bastionhostuseamazonlinux2023bydefault) | When enabled, the BastionHost construct will use the latest Amazon Linux 2023 AMI, instead of Amazon Linux 2. | 2.172.0 | (default) | | [@aws-cdk/core:aspectStabilization](#aws-cdkcoreaspectstabilization) | When enabled, a stabilization loop will be run when invoking Aspects during synthesis. | 2.172.0 | (config) | | [@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource](#aws-cdkaws-route53-targetsuserpooldomainnamemethodwithoutcustomresource) | When enabled, use a new method for DNS Name of user pool domain target without creating a custom resource. | 2.174.0 | (fix) | -| [@aws-cdk/aws-ecs:disableEcsImdsBlocking](#aws-cdkaws-ecsdisableecsimdsblocking) | When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)** | 2.175.0 | (temporary) | -| [@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature](#aws-cdkaws-ecsenableimdsblockingdeprecatedfeature) | When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)** | 2.175.0 | (temporary) | +| [@aws-cdk/aws-ecs:disableEcsImdsBlocking](#aws-cdkaws-ecsdisableecsimdsblocking) | When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)** | V2NEXT | (temporary) | +| [@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature](#aws-cdkaws-ecsenableimdsblockingdeprecatedfeature) | When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)** | V2NEXT | (temporary) | | [@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault](#aws-cdkaws-elasticloadbalancingv2albdualstackwithoutpublicipv4securitygrouprulesdefault) | When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere | V2NEXT | (fix) | | [@aws-cdk/core:enableAdditionalMetadataCollection](#aws-cdkcoreenableadditionalmetadatacollection) | When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues. | V2NEXT | (config) | @@ -242,7 +242,6 @@ different environments). This means that the name of the synthesized template file will be based on the construct path and not on the defined `stackName` of the stack. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.16.0 | `false` | `true` | @@ -250,7 +249,6 @@ of the stack. **Compatibility with old behavior:** Pass stack identifiers to the CLI instead of stack names. - ### aws-cdk:enableDiffNoFail *Make `cdk diff` not fail when there are differences* (default) @@ -258,14 +256,13 @@ of the stack. Determines what status code `cdk diff` should return when the specified stack differs from the deployed stack or the local CloudFormation template: -* `aws-cdk:enableDiffNoFail=true` => status code == 0 -* `aws-cdk:enableDiffNoFail=false` => status code == 1 +- `aws-cdk:enableDiffNoFail=true` => status code == 0 +- `aws-cdk:enableDiffNoFail=false` => status code == 1 You can override this behavior with the --fail flag: -* `--fail` => status code == 1 -* `--no-fail` => status code == 0 - +- `--fail` => status code == 1 +- `--no-fail` => status code == 0 | Since | Default | Recommended | | ----- | ----- | ----- | @@ -274,7 +271,6 @@ You can override this behavior with the --fail flag: **Compatibility with old behavior:** Specify `--fail` to the CLI. - ### @aws-cdk/aws-ecr-assets:dockerIgnoreSupport *DockerImageAsset properly supports `.dockerignore` files by default* (default) @@ -286,7 +282,6 @@ is standard Docker ignore semantics. This is a feature flag as the old behavior was technically incorrect but users may have come to depend on it. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.73.0 | `false` | `true` | @@ -294,7 +289,6 @@ users may have come to depend on it. **Compatibility with old behavior:** Update your `.dockerignore` file to match standard Docker ignore rules, if necessary. - ### @aws-cdk/aws-secretsmanager:parseOwnedSecretName *Fix the referencing of SecretsManager names from ARNs* (default) @@ -305,7 +299,6 @@ rather than the default full resource name, which includes the SecretsManager su If this flag is not set, Secret.secretName will include the SecretsManager suffix, which cannot be directly used by SecretsManager.DescribeSecret, and must be parsed by the user first (e.g., Fn:Join, Fn:Select, Fn:Split). - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.77.0 | `false` | `true` | @@ -313,7 +306,6 @@ used by SecretsManager.DescribeSecret, and must be parsed by the user first (e.g **Compatibility with old behavior:** Use `parseArn(secret.secretName).resourceName` to emulate the incorrect old parsing. - ### @aws-cdk/aws-kms:defaultKeyPolicies *Tighten default KMS key policies* (default) @@ -330,7 +322,6 @@ true, the policy matches what happens when this feature flag is set. Additionally, if this flag is not set and the user supplies a custom key policy, this will be appended to the key's default policy (rather than replacing it). - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.78.0 | `false` | `true` | @@ -338,7 +329,6 @@ to the key's default policy (rather than replacing it). **Compatibility with old behavior:** Pass `trustAccountIdentities: false` to `Key` construct to restore the old behavior. - ### @aws-cdk/aws-s3:grantWriteWithoutAcl *Remove `PutObjectAcl` from Bucket.grantWrite* (default) @@ -349,7 +339,6 @@ which could be used to grant read/write object access to IAM principals in other Use a feature flag to make sure existing customers who might be relying on the overly-broad permissions are not broken. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.85.0 | `false` | `true` | @@ -357,7 +346,6 @@ on the overly-broad permissions are not broken. **Compatibility with old behavior:** Call `bucket.grantPutAcl()` in addition to `bucket.grantWrite()` to grant ACL permissions. - ### @aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount *Do not specify a default DesiredCount for ECS services* (default) @@ -372,7 +360,6 @@ If this flag is not set, the default behaviour for CfnService.desiredCount is to desiredCount of 1, if one is not provided. If true, a default will not be defined for CfnService.desiredCount and as such desiredCount will be undefined, if one is not provided. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.92.0 | `false` | `true` | @@ -380,14 +367,12 @@ CfnService.desiredCount and as such desiredCount will be undefined, if one is no **Compatibility with old behavior:** You can pass `desiredCount: 1` explicitly, but you should never need this. - ### @aws-cdk/aws-efs:defaultEncryptionAtRest *Enable this feature flag to have elastic file systems encrypted at rest by default.* (default) Encryption can also be configured explicitly using the `encrypted` property. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.98.0 | `false` | `true` | @@ -395,7 +380,6 @@ Encryption can also be configured explicitly using the `encrypted` property. **Compatibility with old behavior:** Pass the `encrypted: false` property to the `FileSystem` construct to disable encryption. - ### @aws-cdk/core:newStyleStackSynthesis *Switch to new stack synthesis method which enables CI/CD* (fix) @@ -403,13 +387,11 @@ Encryption can also be configured explicitly using the `encrypted` property. If this flag is specified, all `Stack`s will use the `DefaultStackSynthesizer` by default. If it is not set, they will use the `LegacyStackSynthesizer`. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.39.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/core:stackRelativeExports *Name exports based on the construct paths relative to the stack, rather than the global construct path* (fix) @@ -419,13 +401,11 @@ ensure uniqueness, and makes the export names robust against refactoring the location of the stack in the construct tree (specifically, moving the Stack into a Stage). - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.58.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/aws-rds:lowercaseDbIdentifier *Force lowercasing of RDS Cluster names in CDK* (fix) @@ -440,13 +420,11 @@ Must be behind a permanent flag because changing a name from mixed case to lower would lead CloudFormation to think the name was changed and would trigger a cluster replacement (losing data!). - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.97.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId *Allow adding/removing multiple UsagePlanKeys independently* (fix) @@ -464,13 +442,11 @@ which again is disallowed. In effect, there is no way to get out of this mess in a backwards compatible way, while supporting existing stacks. This flag changes the logical id layout of UsagePlanKey to not be sensitive to order. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.98.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/aws-lambda:recognizeVersionProps *Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`.* (fix) @@ -480,26 +456,22 @@ not constitute creating a new Version. See 'currentVersion' section in the aws-lambda module's README for more details. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.106.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021 *Enable this feature flag to have cloudfront distributions use the security policy TLSv1.2_2021 by default.* (fix) The security policy can also be configured explicitly using the `minimumProtocolVersion` property. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.117.0 | `false` | `true` | | 2.0.0 | `true` | `true` | - ### @aws-cdk/core:target-partitions *What regions to include in lookup tables of environment agnostic stacks* (config) @@ -509,13 +481,11 @@ of unnecessary regions included in stacks without a known region. The type of this value should be a list of strings. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.137.0 | `false` | `["aws","aws-cn"]` | | 2.4.0 | `false` | `["aws","aws-cn"]` | - ### @aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver *ECS extensions will automatically add an `awslogs` driver if no logging is specified* (default) @@ -525,7 +495,6 @@ Enable this feature flag to configure default logging behavior for the ECS Servi This is a feature flag as the new behavior provides a better default experience for the users. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.140.0 | `false` | `true` | @@ -533,7 +502,6 @@ This is a feature flag as the new behavior provides a better default experience **Compatibility with old behavior:** Specify a log driver explicitly. - ### @aws-cdk/aws-ec2:uniqueImdsv2TemplateName *Enable this feature flag to have Launch Templates generated by the `InstanceRequireImdsv2Aspect` use unique names.* (fix) @@ -544,13 +512,11 @@ account and region, the deployments would always fail as the generated Launch Te The new implementation addresses this issue by generating the Launch Template name with the `Names.uniqueId` method. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.140.0 | `false` | `true` | | 2.8.0 | `false` | `true` | - ### @aws-cdk/aws-iam:minimizePolicies *Minimize IAM policies by combining Statements* (config) @@ -559,13 +525,11 @@ Minimize IAM policies by combining Principals, Actions and Resources of two Statements in the policies, as long as it doesn't change the meaning of the policy. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.150.0 | `false` | `true` | | 2.18.0 | `false` | `true` | - ### @aws-cdk/core:checkSecretUsage *Enable this flag to make it impossible to accidentally use SecretValues in unsafe locations* (config) @@ -574,13 +538,11 @@ With this flag enabled, `SecretValue` instances can only be passed to constructs that accept `SecretValue`s; otherwise, `unsafeUnwrap()` must be called to use it as a regular string. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.153.0 | `false` | `true` | | 2.21.0 | `false` | `true` | - ### @aws-cdk/aws-lambda:recognizeLayerVersion *Enable this feature flag to opt in to the updated logical id calculation for Lambda Version created using the `fn.currentVersion`.* (fix) @@ -589,13 +551,11 @@ This flag correct incorporates Lambda Layer properties into the Lambda Function See 'currentVersion' section in the aws-lambda module's README for more details. - | Since | Default | Recommended | | ----- | ----- | ----- | | 1.159.0 | `false` | `true` | | 2.27.0 | `false` | `true` | - ### @aws-cdk/core:validateSnapshotRemovalPolicy *Error on snapshot removal policies on resources that do not support it.* (default) @@ -605,7 +565,6 @@ If supplied on an unsupported resource, CloudFormation ignores the policy altoge This flag will reduce confusion and unexpected loss of data when erroneously supplying the snapshot removal policy. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -613,7 +572,6 @@ the snapshot removal policy. **Compatibility with old behavior:** The old behavior was incorrect. Update your source to not specify SNAPSHOT policies on resources that do not support it. - ### @aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName *Generate key aliases that include the stack name* (fix) @@ -625,13 +583,11 @@ the KMS key alias name created for these pipelines may be the same due to how th This new implementation creates a stack safe resource name for the alias using the stack name instead of the stack ID. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.29.0 | `false` | `true` | - ### @aws-cdk/aws-s3:createDefaultLoggingPolicy *Enable this feature flag to create an S3 bucket policy by default in cases where an AWS service would automatically create the Policy if one does not exist.* (fix) @@ -645,15 +601,13 @@ and error indicating that a bucket policy already exists. In cases where we know what the required policy is we can go ahead and create the policy so we can remain in control of it. -@see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3 - +@see | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.31.0 | `false` | `true` | - ### @aws-cdk/aws-sns-subscriptions:restrictSqsDescryption *Restrict KMS key policy for encrypted Queues a bit more* (fix) @@ -665,13 +619,11 @@ Previously the decryption was only restricted to the SNS service principal. To m secure, it is a good practice to restrict the decryption further and only allow the connected SNS topic to decryption the subscribed queue. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.32.0 | `false` | `true` | - ### @aws-cdk/aws-ecs:arnFormatIncludesClusterName *ARN format used by ECS. In the new ARN format, the cluster name is part of the resource ID.* (fix) @@ -681,35 +633,31 @@ If this flag is set, the new ARN format (with cluster name) for ECS is used. This is a feature flag as the old format is still valid for existing ECS clusters. -See https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids - +See | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.35.0 | `false` | `true` | - ### @aws-cdk/aws-apigateway:disableCloudWatchRole *Make default CloudWatch Role behavior safe for multiple API Gateways in one environment* (fix) Enable this feature flag to change the default behavior for aws-apigateway.RestApi and aws-apigateway.SpecRestApi -to _not_ create a CloudWatch role and Account. There is only a single ApiGateway account per AWS +to *not* create a CloudWatch role and Account. There is only a single ApiGateway account per AWS environment which means that each time you create a RestApi in your account the ApiGateway account is overwritten. If at some point the newest RestApi is deleted, the ApiGateway Account and CloudWatch role will also be deleted, breaking any existing ApiGateways that were depending on them. When this flag is enabled you should either create the ApiGateway account and CloudWatch role -separately _or_ only enable the cloudWatchRole on a single RestApi. - +separately *or* only enable the cloudWatchRole on a single RestApi. | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.38.0 | `false` | `true` | - ### @aws-cdk/core:enablePartitionLiterals *Make ARNs concrete if AWS partition is known* (fix) @@ -738,13 +686,11 @@ Principal: The intrinsic function will still be used in Stacks where no region is defined or the region's partition is unknown. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.38.0 | `false` | `true` | - ### @aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker *Avoid setting the "ECS" deployment controller when adding a circuit breaker* (fix) @@ -755,13 +701,11 @@ This does not change any behaviour as the default deployment controller when it This is a feature flag as the new behavior provides a better default experience for the users. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.51.0 | `false` | `true` | - ### @aws-cdk/aws-events:eventsTargetQueueSameAccount *Event Rules may only push to encrypted SQS queues in the same account* (fix) @@ -770,13 +714,11 @@ This flag applies to SQS Queues that are used as the target of event Rules. When from the same account as the Rule can send messages. If a queue is unencrypted, this restriction will always apply, regardless of the value of this flag. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.51.0 | `false` | `true` | - ### @aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName *Enable this feature to by default create default policy names for imported roles that depend on the stack the role is in.* (fix) @@ -787,13 +729,11 @@ of a role using the same default policy name. This new implementation creates default policy names based on the constructs node path in their stack. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.60.0 | `false` | `true` | - ### @aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy *Use S3 Bucket Policy instead of ACLs for Server Access Logging* (fix) @@ -805,15 +745,13 @@ enabled on the bucket. This flag uses a Bucket Policy statement to allow Server Access Log delivery, following best practices for S3. -@see https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html - +@see | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.60.0 | `false` | `true` | - ### @aws-cdk/customresources:installLatestAwsSdkDefault *Whether to install the latest SDK by default in AwsCustomResource* (default) @@ -825,7 +763,6 @@ do not have internet access, or in environments where 'npmjs.com' is not availab The recommended setting is to disable the default installation behavior, and pass the flag on a resource-by-resource basis to enable it if necessary. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -833,7 +770,6 @@ flag on a resource-by-resource basis to enable it if necessary. **Compatibility with old behavior:** Set installLatestAwsSdk: true on all resources that need it. - ### @aws-cdk/aws-route53-patters:useCertificate *Use the official `Certificate` resource instead of `DnsValidatedCertificate`* (default) @@ -843,7 +779,6 @@ of the deprecated `DnsValidatedCertificate` construct. If this flag is enabled a the stack in a region other than us-east-1 then you must also set `crossRegionReferences=true` on the stack. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -851,7 +786,6 @@ stack. **Compatibility with old behavior:** Define a `DnsValidatedCertificate` explicitly and pass in the `certificate` property - ### @aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup *Remove CloudWatch alarms from deployment group* (fix) @@ -860,13 +794,11 @@ Enable this flag to be able to remove all CloudWatch alarms from a deployment gr the alarms from the construct. If this flag is not set, removing all alarms from the construct will still leave the alarms configured for the deployment group. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.65.0 | `false` | `true` | - ### @aws-cdk/aws-rds:databaseProxyUniqueResourceName *Use unique resource name for Database Proxy* (fix) @@ -879,13 +811,11 @@ If this flag is set, the default behavior is to use unique resource names for ea This is a feature flag as the old behavior was technically incorrect, but users may have come to depend on it. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.65.0 | `false` | `true` | - ### @aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId *Include authorizer configuration in the calculation of the API deployment logical ID.* (fix) @@ -895,13 +825,11 @@ the API configuration, including methods, and resources, etc. Enable this featur to also include the configuration of any authorizer attached to the API in the calculation, so any changes made to an authorizer will create a new deployment. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.66.0 | `false` | `true` | - ### @aws-cdk/aws-ec2:launchTemplateDefaultUserData *Define user data for a launch template by default when a machine image is provided.* (fix) @@ -910,13 +838,11 @@ The ec2.LaunchTemplate construct did not define user data when a machine image i provided despite the document. If this is set, a user data is automatically defined according to the OS of the machine image. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.67.0 | `false` | `true` | - ### @aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments *SecretTargetAttachments uses the ResourcePolicy of the attached Secret.* (fix) @@ -932,13 +858,11 @@ This won't be possible without intervention due to limitation outlined above. First remove all permissions granted to the Secret and deploy without the ResourcePolicies. Then you can re-add the permissions and deploy again. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.67.0 | `false` | `true` | - ### @aws-cdk/aws-redshift:columnId *Whether to use an ID to track Redshift column changes* (fix) @@ -955,13 +879,11 @@ than their `name`. This will prevent data loss when columns are renamed. initial deployment, the columns will be dropped and recreated, causing data loss. After the initial deployment of the `id`s, the `name`s of the columns can be changed without data loss. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.68.0 | `false` | `true` | - ### @aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2 *Enable AmazonEMRServicePolicy_v2 managed policies* (fix) @@ -975,13 +897,11 @@ managed policies. This is a feature flag as the old behavior will be deprecated, but some resources may require manual intervention since they might not have the appropriate tags propagated automatically. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.72.0 | `false` | `true` | - ### @aws-cdk/aws-apigateway:requestValidatorUniqueId *Generate a unique id for each RequestValidator added to a method* (fix) @@ -992,13 +912,11 @@ providing the `RequestValidatorOptions` in the `addMethod()` method. If the flag is not set then only a single RequestValidator can be added in this way. Any additional RequestValidators have to be created directly with `new RequestValidator`. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.78.0 | `false` | `true` | - ### @aws-cdk/aws-ec2:restrictDefaultSecurityGroup *Restrict access to the VPC default security group* (default) @@ -1008,20 +926,17 @@ VPC default security group. When a VPC is created, a default security group is created as well and this cannot be deleted. The default security group is created with ingress/egress rules that allow -_all_ traffic. [AWS Security best practices recommend](https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-2) +*all* traffic. [AWS Security best practices recommend](https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-2) removing these ingress/egress rules in order to restrict access to the default security group. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.78.0 | `false` | `true` | -**Compatibility with old behavior:** +**Compatibility with old behavior:** To allow all ingress/egress traffic to the VPC default security group you can set the `restrictDefaultSecurityGroup: false`. - - ### @aws-cdk/aws-kms:aliasNameRef @@ -1033,13 +948,11 @@ when referencing key.aliasName or key.keyArn. If the flag is not set then a raw string is passed as the Alias name and no implicit dependencies will be set. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.83.0 | `false` | `true` | - ### @aws-cdk/core:includePrefixInUniqueNameGeneration *Include the stack prefix in the stack name generation process* (fix) @@ -1053,13 +966,11 @@ If the flag is not set, then the prefix of the stack is prepended to the generat feature flag can lead to a change in stacks' name. Changing a stack name mean recreating the whole stack, which is not viable in some productive setups. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.84.0 | `false` | `true` | - ### @aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig *Generate a launch template when creating an AutoScalingGroup* (fix) @@ -1072,17 +983,14 @@ will now create an equivalent 'launchTemplate'. Alternatively, users can provide attempt to set user data according to the OS of the machine image if explicit user data is not provided. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.88.0 | `false` | `true` | -**Compatibility with old behavior:** +**Compatibility with old behavior:** If backwards compatibility needs to be maintained due to an existing autoscaling group using a launch config, set this flag to false. - - ### @aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby @@ -1091,7 +999,6 @@ provided. If this is set, an opensearch domain will automatically be created with multi-az with standby enabled. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1099,7 +1006,6 @@ multi-az with standby enabled. **Compatibility with old behavior:** Pass `capacity.multiAzWithStandbyEnabled: false` to `Domain` construct to restore the old behavior. - ### @aws-cdk/aws-efs:denyAnonymousAccess *EFS denies anonymous clients accesses* (default) @@ -1110,7 +1016,6 @@ access to `efs.FileSystem`. If this flag is not set, `efs.FileSystem` will allow all anonymous clients that can access over the network. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1118,7 +1023,6 @@ that can access over the network. **Compatibility with old behavior:** You can pass `allowAnonymousAccess: true` so allow anonymous clients access. - ### @aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId *When enabled, mount targets will have a stable logicalId that is linked to the associated subnet.* (fix) @@ -1130,13 +1034,11 @@ subnets changes. Set this flag to false for existing mount targets. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.93.0 | `false` | `true` | - ### @aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion *Enables aws-lambda-nodejs.Function to use the latest available NodeJs runtime as the default* (default) @@ -1146,7 +1048,6 @@ functions will us the latest version of the runtime provided by the Lambda service. Do not use this if you your lambda function is reliant on dependencies shipped as part of the runtime environment. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1154,7 +1055,6 @@ shipped as part of the runtime environment. **Compatibility with old behavior:** Pass `runtime: lambda.Runtime.NODEJS_16_X` to `Function` construct to restore the previous behavior. - ### @aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier *When enabled, will always use the arn for identifiers for CfnSourceApiAssociation in the GraphqlApi construct rather than id.* (fix) @@ -1163,13 +1063,11 @@ When this feature flag is enabled, we use the IGraphqlApi ARN rather than ID whe the GraphqlApi construct. Using the ARN allows the association to support an association with a source api or merged api in another account. Note that for existing source api associations created with this flag disabled, enabling the flag will lead to a resource replacement. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.97.0 | `false` | `true` | - ### @aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters *When enabled, a scope of InstanceParameterGroup for AuroraClusterInstance with each parameters will change.* (fix) @@ -1181,13 +1079,11 @@ from AuroraCluster. If the flag is set to false then it can only make one `AuroraClusterInstance` with each `InstanceParameterGroup` in the AuroraCluster. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.97.0 | `false` | `true` | - ### @aws-cdk/aws-rds:preventRenderingDeprecatedCredentials *When enabled, creating an RDS database cluster from a snapshot will only render credentials for snapshot credentials.* (fix) @@ -1205,13 +1101,11 @@ Set this flag to prevent rendering deprecated `credentials` and creating an extra database secret when only using `snapshotCredentials` to create an RDS database cluster from a snapshot. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.98.0 | `false` | `true` | - ### @aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource *When enabled, the CodeCommit source action is using the default branch name 'main'.* (fix) @@ -1220,13 +1114,11 @@ When setting up a CodeCommit source action for the source stage of a pipeline, p default branch is 'master'. However, with the activation of this feature flag, the default branch is updated to 'main'. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.103.1 | `false` | `true` | - ### @aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction *When enabled, the logical ID of a Lambda permission for a Lambda action includes an alarm ID.* (fix) @@ -1238,13 +1130,11 @@ can be created with `LambdaAction`. If the flag is set to false then it can only make one alarm for the Lambda with `LambdaAction`. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.124.0 | `false` | `true` | - ### @aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse *Enables Pipeline to set the default value for crossAccountKeys to false.* (default) @@ -1252,7 +1142,6 @@ If the flag is set to false then it can only make one alarm for the Lambda with When this feature flag is enabled, and the `crossAccountKeys` property is not provided in a `Pipeline` construct, the construct automatically defaults the value of this property to false. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1260,7 +1149,6 @@ construct, the construct automatically defaults the value of this property to fa **Compatibility with old behavior:** Pass `crossAccountKeys: true` to `Pipeline` construct to restore the previous behavior. - ### @aws-cdk/aws-codepipeline:defaultPipelineTypeToV2 *Enables Pipeline to set the default pipeline type to V2.* (default) @@ -1268,7 +1156,6 @@ construct, the construct automatically defaults the value of this property to fa When this feature flag is enabled, and the `pipelineType` property is not provided in a `Pipeline` construct, the construct automatically defaults the value of this property to `PipelineType.V2`. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1276,7 +1163,6 @@ construct, the construct automatically defaults the value of this property to `P **Compatibility with old behavior:** Pass `pipelineType: PipelineType.V1` to `Pipeline` construct to restore the previous behavior. - ### @aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope *When enabled, IAM Policy created from KMS key grant will reduce the resource scope to this key only.* (fix) @@ -1284,13 +1170,11 @@ construct, the construct automatically defaults the value of this property to `P When this feature flag is enabled and calling KMS key grant method, the created IAM policy will reduce the resource scope from '*' to this specific granting KMS key. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.134.0 | `false` | `true` | - ### @aws-cdk/aws-eks:nodegroupNameAttribute *When enabled, nodegroupName attribute of the provisioned EKS NodeGroup will not have the cluster name prefix.* (fix) @@ -1298,20 +1182,17 @@ When this feature flag is enabled and calling KMS key grant method, the created When this feature flag is enabled, the nodegroupName attribute will be exactly the name of the nodegroup without any prefix. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.139.0 | `false` | `true` | - ### @aws-cdk/aws-ec2:ebsDefaultGp3Volume *When enabled, the default volume type of the EBS volume will be GP3* (default) When this featuer flag is enabled, the default volume type of the EBS volume will be `EbsDeviceVolumeType.GENERAL_PURPOSE_SSD_GP3`. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1319,7 +1200,6 @@ When this featuer flag is enabled, the default volume type of the EBS volume wil **Compatibility with old behavior:** Pass `volumeType: EbsDeviceVolumeType.GENERAL_PURPOSE_SSD` to `Volume` construct to restore the previous behavior. - ### @aws-cdk/pipelines:reduceAssetRoleTrustScope *Remove the root account principal from PipelineAssetsFileRole trust policy* (default) @@ -1327,7 +1207,6 @@ When this featuer flag is enabled, the default volume type of the EBS volume wil When this feature flag is enabled, the root account principal will not be added to the trust policy of asset role. When this feature flag is disabled, it will keep the root account principal in the trust policy. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1335,14 +1214,12 @@ When this feature flag is disabled, it will keep the root account principal in t **Compatibility with old behavior:** Disable the feature flag to add the root account principal back - ### @aws-cdk/aws-ecs:removeDefaultDeploymentAlarm *When enabled, remove default deployment alarm settings* (default) When this featuer flag is enabled, remove the default deployment alarm settings when creating a AWS ECS service. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1350,7 +1227,6 @@ When this featuer flag is enabled, remove the default deployment alarm settings **Compatibility with old behavior:** Set AWS::ECS::Service 'DeploymentAlarms' manually to restore the previous behavior. - ### @aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault *When enabled, the custom resource used for `AwsCustomResource` will configure the `logApiResponseData` property as true by default* (fix) @@ -1358,19 +1234,17 @@ When this featuer flag is enabled, remove the default deployment alarm settings This results in 'logApiResponseData' being passed as true to the custom resource provider. This will cause the custom resource handler to receive an 'Update' event. If you don't have an SDK call configured for the 'Update' event and you're dependent on specific SDK call response data, you will see this error from CFN: -CustomResource attribute error: Vendor response doesn't contain attribute in object. See https://github.com/aws/aws-cdk/issues/29949) for more details. +CustomResource attribute error: Vendor response doesn't contain attribute in object. See ) for more details. Unlike most feature flags, we don't recommend setting this feature flag to true. However, if you're using the 'AwsCustomResource' construct with 'logApiResponseData' as true in the event object, then setting this feature flag will keep this behavior. Otherwise, setting this feature flag to false will trigger an 'Update' event by removing the 'logApiResponseData' property from the event object. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.145.0 | `false` | `false` | - ### @aws-cdk/aws-s3:keepNotificationInImportedBucket *When enabled, Adding notifications to a bucket in the current stack will not remove notification from imported stack.* (fix) @@ -1380,13 +1254,11 @@ Currently, adding notifications to a bucket where it was created by ourselves wi When this feature flag is enabled, adding notifications to a bucket in the current stack will only update notification defined in this stack. Other notifications that are not managed by this stack will be kept. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.155.0 | `false` | `false` | - ### @aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask *When enabled, use new props for S3 URI field in task definition of state machine for bedrock invoke model.* (fix) @@ -1397,7 +1269,6 @@ of State Machine Task definition. When this feature flag is enabled, specify newly introduced props 's3InputUri' and 's3OutputUri' to populate S3 uri under input and output fields in state machine task definition for Bedrock invoke model. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1405,7 +1276,6 @@ When this feature flag is enabled, specify newly introduced props 's3InputUri' a **Compatibility with old behavior:** Disable the feature flag to use input and output path fields for s3 URI - ### @aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions *When enabled, we will only grant the necessary permissions when users specify cloudwatch log group through logConfiguration* (fix) @@ -1415,7 +1285,6 @@ specified as logConfiguration and it will grant 'Resources': ['*'] to the task r When this feature flag is enabled, we will only grant the necessary permissions when users specify cloudwatch log group. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1423,7 +1292,6 @@ When this feature flag is enabled, we will only grant the necessary permissions **Compatibility with old behavior:** Disable the feature flag to continue grant permissions to log group when no log group is specified - ### @aws-cdk/aws-ec2:ec2SumTImeoutEnabled *When enabled, initOptions.timeout and resourceSignalTimeout values will be summed together.* (fix) @@ -1433,13 +1301,11 @@ only the value from 'resourceSignalTimeout' will be used. When this feature flag is enabled, if both initOptions.timeout and resourceSignalTimeout are specified, the values will to be summed together. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.160.0 | `false` | `true` | - ### @aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission *When enabled, a Lambda authorizer Permission created when using GraphqlApi will be properly scoped with a SourceArn.* (fix) @@ -1451,13 +1317,11 @@ it allows invocations from any source. When this feature flag is enabled, the AWS::Lambda::Permission will be properly scoped with the SourceArn corresponding to the specific AppSync GraphQL API. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | - ### @aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages *When enabled, both `@aws-sdk` and `@smithy` packages will be excluded from the Lambda Node.js 18.x runtime to prevent version mismatches in bundled applications.* (fix) @@ -1468,13 +1332,11 @@ However, this can cause version mismatches between the '@aws-sdk/*' and '@smithy When this feature flag is enabled, both '@aws-sdk/*' and '@smithy/*' packages will be excluded during the bundling process. This ensures that no mismatches occur between these tightly coupled dependencies when using the AWS SDK v3 in Lambda functions. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | - ### @aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId *When enabled, the value of property `instanceResourceId` in construct `DatabaseInstanceReadReplica` will be set to the correct value which is `DbiResourceId` instead of currently `DbInstanceArn`* (fix) @@ -1483,7 +1345,6 @@ Currently, the value of the property 'instanceResourceId' in construct 'Database When this feature flag is enabled, the value of that property will be as expected set to 'DbiResourceId' attribute, and that will fix the grantConnect method. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1491,7 +1352,6 @@ When this feature flag is enabled, the value of that property will be as expecte **Compatibility with old behavior:** Disable the feature flag to use `DbInstanceArn` as value for property `instanceResourceId` - ### @aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics *When enabled, CFN templates added with `cfn-include` will error if the template contains Resource Update or Create policies with CFN Intrinsics that include non-primitive values.* (fix) @@ -1500,13 +1360,11 @@ Without enabling this feature flag, `cfn-include` will silently drop resource up Enabling this feature flag will make `cfn-include` throw on these templates, unless you specify the logical ID of the resource in the 'unhydratedResources' property. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.161.0 | `false` | `true` | - ### @aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy *When enabled, the resource of IAM Run Ecs policy generated by SFN EcsRunTask will reference the definition, instead of constructing ARN.* (fix) @@ -1516,13 +1374,11 @@ The revision number at the end will be replaced with a wildcard which it shouldn When this feature flag is enabled, if the task definition is created in the stack, the 'Resource' section will 'Ref' the taskDefinition. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.163.0 | `false` | `true` | - ### @aws-cdk/aws-dynamodb:resourcePolicyPerReplica *When enabled will allow you to specify a resource policy per replica, and not copy the source table policy to all replicas* (fix) @@ -1534,13 +1390,11 @@ This will prevent you from creating a new table which has an additional replica This is a feature flag as the old behavior was technically incorrect but users may have come to depend on it. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.164.0 | `false` | `true` | - ### @aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault *When enabled, the BastionHost construct will use the latest Amazon Linux 2023 AMI, instead of Amazon Linux 2.* (default) @@ -1552,7 +1406,6 @@ and secure option. When this feature flag is enabled, if you do not pass the machineImage property to the BastionHost construct, the latest Amazon Linux 2023 version will be used instead of Amazon Linux 2. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1560,7 +1413,6 @@ the latest Amazon Linux 2023 version will be used instead of Amazon Linux 2. **Compatibility with old behavior:** Disable the feature flag or explicitly pass an Amazon Linux 2 machine image to the BastionHost construct. - ### @aws-cdk/core:aspectStabilization *When enabled, a stabilization loop will be run when invoking Aspects during synthesis.* (config) @@ -1570,13 +1422,11 @@ This means that the Aspects that create other Aspects are not run and Aspects th When this feature flag is enabled, a stabilization loop is run to recurse the construct tree multiple times when invoking Aspects. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.172.0 | `true` | `true` | - ### @aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource *When enabled, use a new method for DNS Name of user pool domain target without creating a custom resource.* (fix) @@ -1586,25 +1436,22 @@ creates a custom resource internally, but the new method doesn't need a custom r If the flag is set to false then a custom resource will be created when using `UserPoolDomainTarget`. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | | 2.174.0 | `false` | `true` | - ### @aws-cdk/aws-ecs:disableEcsImdsBlocking *When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)*** (temporary) In an ECS Cluster with `MachineImageType.AMAZON_LINUX_2`, the canContainersAccessInstanceRole=false option attempts to add commands to block containers from accessing IMDS. CDK cannot guarantee the correct execution of the feature in all platforms. Setting this feature flag -to true will ensure CDK does not attempt to implement IMDS blocking. By **end of 2025**, CDK will remove the +to true will ensure CDK does not attempt to implement IMDS blocking. By **end of 2025**, CDK will remove the IMDS blocking feature. See [Github discussion](https://github.com/aws/aws-cdk/discussions/32609) for more information. It is recommended to follow ECS documentation to block IMDS for your specific platform and cluster configuration. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1612,18 +1459,16 @@ It is recommended to follow ECS documentation to block IMDS for your specific pl **Compatibility with old behavior:** It is strongly recommended to set this flag to true. However, if necessary, set this flag to false to continue using the old implementation. - ### @aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature *When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)*** (temporary) In an ECS Cluster with `MachineImageType.AMAZON_LINUX_2`, the canContainersAccessInstanceRole=false option attempts to add commands to block containers from -accessing IMDS. Set this flag to true in order to use new and updated commands. Please note that this -feature alone with this feature flag will be deprecated by **end of 2025** as CDK cannot +accessing IMDS. Set this flag to true in order to use new and updated commands. Please note that this +feature alone with this feature flag will be deprecated by **end of 2025** as CDK cannot guarantee the correct execution of the feature in all platforms. See [Github discussion](https://github.com/aws/aws-cdk/discussions/32609) for more information. It is recommended to follow ECS documentation to block IMDS for your specific platform and cluster configuration. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1631,7 +1476,6 @@ It is recommended to follow ECS documentation to block IMDS for your specific pl **Compatibility with old behavior:** Set this flag to false in order to continue using old and outdated commands. However, it is **not** recommended. - ### @aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault *When enabled, the default security group ingress rules will allow IPv6 ingress from anywhere* (fix) @@ -1642,7 +1486,6 @@ will allow IPv6 ingress from anywhere (::/0). Previously, the default security g Using a feature flag to make sure existing customers who might be relying on the overly restrictive permissions are not broken. - | Since | Default | Recommended | | ----- | ----- | ----- | | (not in v1) | | | @@ -1650,7 +1493,6 @@ on the overly restrictive permissions are not broken. **Compatibility with old behavior:** Disable the feature flag to only allow IPv4 ingress in the default security group rules. - ### @aws-cdk/core:enableAdditionalMetadataCollection *When enabled, CDK will expand the scope of usage data collected to better inform CDK development and improve communication for security concerns and emerging issues.* (config) From d5af4c521824405192ebe9e98616fb71781507b3 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 13:52:24 -0800 Subject: [PATCH 06/10] chore: add todo and missing docstring --- .../aws-cdk-lib/core/lib/private/runtime-info.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts index 65d398689d7e2..ef282c55fb5b5 100644 --- a/packages/aws-cdk-lib/core/lib/private/runtime-info.ts +++ b/packages/aws-cdk-lib/core/lib/private/runtime-info.ts @@ -69,7 +69,8 @@ export function redactTelemetryData(metadata: MetadataEntry[]): Record = {}; for (const [key, value] of Object.entries(data)) { result[key] = redactTelemetryDataHelper(value); @@ -180,6 +186,11 @@ export function constructInfoFromStack(stack: Stack): ConstructInfo[] { return Array.from(uniqueMap.values()); } +/** + * Check whether the given construct is a Resource. Note that this is + * duplicated function from 'core/lib/resource.ts' to avoid circular + * dependencies in imports. + */ function isResource(construct: IConstruct): construct is Resource { const RESOURCE_SYMBOL = Symbol.for('@aws-cdk/core.Resource'); return construct !== null && typeof(construct) === 'object' && RESOURCE_SYMBOL in construct; From 02bb4861db674e5911d6801fbe9906c278f46bc5 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 11:19:06 -0800 Subject: [PATCH 07/10] chore: add metadata updater tool to add imports and addMetadata statement --- .../@aws-cdk/aws-amplify-alpha/lib/app.ts | 2 + .../@aws-cdk/aws-amplify-alpha/lib/branch.ts | 2 + .../@aws-cdk/aws-amplify-alpha/lib/domain.ts | 2 + .../lib/auto-scaling-configuration.ts | 2 + .../lib/observability-configuration.ts | 2 + .../aws-apprunner-alpha/lib/service.ts | 2 + .../aws-apprunner-alpha/lib/vpc-connector.ts | 2 + .../lib/vpc-ingress-connection.ts | 2 + .../aws-cloud9-alpha/lib/environment.ts | 2 + .../lib/github-repository.ts | 2 + .../lib/identitypool-role-attachment.ts | 2 + .../lib/identitypool.ts | 2 + packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts | 2 + packages/@aws-cdk/aws-ec2-alpha/lib/route.ts | 2 + .../@aws-cdk/aws-ec2-alpha/lib/subnet-v2.ts | 2 + packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts | 3 + packages/@aws-cdk/aws-eks-v2-alpha/README.md | 16 + .../aws-eks-v2-alpha/lib/access-entry.ts | 2 + .../@aws-cdk/aws-eks-v2-alpha/lib/addon.ts | 2 + .../@aws-cdk/aws-eks-v2-alpha/lib/cluster.ts | 2 + .../aws-eks-v2-alpha/lib/fargate-cluster.ts | 2 + .../aws-eks-v2-alpha/lib/managed-nodegroup.ts | 2 + .../aws-eks-v2-alpha/lib/oidc-provider.ts | 2 + .../@aws-cdk/aws-eks-v2-alpha/package.json | 2 +- .../@aws-cdk/aws-gamelift-alpha/lib/alias.ts | 2 + .../aws-gamelift-alpha/lib/build-fleet.ts | 2 + .../@aws-cdk/aws-gamelift-alpha/lib/build.ts | 2 + .../lib/game-server-group.ts | 2 + .../lib/game-session-queue.ts | 2 + .../lib/matchmaking-ruleset.ts | 2 + .../lib/queued-matchmaking-configuration.ts | 2 + .../@aws-cdk/aws-gamelift-alpha/lib/script.ts | 2 + .../standalone-matchmaking-configuration.ts | 2 + .../@aws-cdk/aws-glue-alpha/lib/connection.ts | 2 + .../lib/data-quality-ruleset.ts | 2 + .../@aws-cdk/aws-glue-alpha/lib/database.ts | 2 + .../aws-glue-alpha/lib/external-table.ts | 2 + packages/@aws-cdk/aws-glue-alpha/lib/job.ts | 2 + .../@aws-cdk/aws-glue-alpha/lib/s3-table.ts | 2 + .../lib/security-configuration.ts | 2 + .../aws-iot-alpha/lib/audit-configuration.ts | 2 + .../@aws-cdk/aws-iot-alpha/lib/logging.ts | 2 + .../aws-iot-alpha/lib/scheduled-audit.ts | 2 + .../@aws-cdk/aws-iot-alpha/lib/topic-rule.ts | 2 + .../aws-iotevents-alpha/lib/detector-model.ts | 2 + .../@aws-cdk/aws-iotevents-alpha/lib/input.ts | 2 + .../@aws-cdk/aws-ivs-alpha/lib/channel.ts | 2 + .../aws-ivs-alpha/lib/playback-key-pair.ts | 2 + .../lib/recording-configuration.ts | 2 + .../@aws-cdk/aws-ivs-alpha/lib/stream-key.ts | 2 + .../lib/application.ts | 3 + .../lib/delivery-stream.ts | 2 + .../aws-lambda-go-alpha/lib/function.ts | 2 + .../aws-lambda-python-alpha/lib/function.ts | 2 + .../aws-lambda-python-alpha/lib/layer.ts | 2 + .../lib/geofence-collection.ts | 2 + .../@aws-cdk/aws-location-alpha/lib/map.ts | 2 + .../aws-location-alpha/lib/place-index.ts | 2 + .../lib/route-calculator.ts | 2 + .../aws-location-alpha/lib/tracker.ts | 2 + .../@aws-cdk/aws-msk-alpha/lib/cluster.ts | 2 + .../@aws-cdk/aws-neptune-alpha/lib/cluster.ts | 2 + .../aws-neptune-alpha/lib/instance.ts | 2 + .../aws-neptune-alpha/lib/parameter-group.ts | 2 + .../aws-neptune-alpha/lib/subnet-group.ts | 2 + packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts | 2 + .../aws-redshift-alpha/lib/cluster.ts | 2 + .../aws-redshift-alpha/lib/database-secret.ts | 2 + .../aws-redshift-alpha/lib/parameter-group.ts | 2 + .../aws-redshift-alpha/lib/subnet-group.ts | 2 + .../lib/firewall-domain-list.ts | 2 + .../lib/firewall-rule-group-association.ts | 2 + .../lib/firewall-rule-group.ts | 2 + .../lib/access-point.ts | 2 + .../lib/endpoint-config.ts | 2 + .../aws-sagemaker-alpha/lib/endpoint.ts | 2 + .../@aws-cdk/aws-sagemaker-alpha/lib/model.ts | 2 + .../@aws-cdk/aws-scheduler-alpha/lib/group.ts | 2 + .../aws-scheduler-alpha/lib/schedule.ts | 2 + .../lib/application.ts | 2 + .../lib/attribute-group.ts | 2 + .../cli-lib-alpha/THIRD_PARTY_LICENSES | 2801 +++++++++++++---- .../lib/example-resource.ts | 4 + .../aws-cdk-lib/aws-apigateway/lib/api-key.ts | 2 + .../aws-apigateway/lib/authorizers/cognito.ts | 2 + .../aws-apigateway/lib/authorizers/lambda.ts | 2 + .../aws-apigateway/lib/base-path-mapping.ts | 2 + .../aws-apigateway/lib/deployment.ts | 2 + .../aws-apigateway/lib/domain-name.ts | 2 + .../aws-apigateway/lib/gateway-response.ts | 2 + .../aws-apigateway/lib/lambda-api.ts | 2 + .../aws-cdk-lib/aws-apigateway/lib/method.ts | 2 + .../aws-cdk-lib/aws-apigateway/lib/model.ts | 2 + .../aws-apigateway/lib/requestvalidator.ts | 2 + .../aws-apigateway/lib/resource.ts | 2 + .../aws-cdk-lib/aws-apigateway/lib/restapi.ts | 2 + .../aws-cdk-lib/aws-apigateway/lib/stage.ts | 2 + .../aws-apigateway/lib/stepfunctions-api.ts | 2 + .../aws-apigateway/lib/usage-plan.ts | 2 + .../aws-apigateway/lib/vpc-link.ts | 2 + .../lib/common/api-mapping.ts | 2 + .../lib/common/domain-name.ts | 2 + .../aws-apigatewayv2/lib/http/api.ts | 2 + .../aws-apigatewayv2/lib/http/authorizer.ts | 2 + .../aws-apigatewayv2/lib/http/integration.ts | 2 + .../aws-apigatewayv2/lib/http/route.ts | 2 + .../aws-apigatewayv2/lib/http/stage.ts | 2 + .../aws-apigatewayv2/lib/http/vpc-link.ts | 2 + .../aws-apigatewayv2/lib/websocket/api.ts | 2 + .../lib/websocket/authorizer.ts | 2 + .../lib/websocket/integration.ts | 2 + .../aws-apigatewayv2/lib/websocket/route.ts | 2 + .../aws-apigatewayv2/lib/websocket/stage.ts | 2 + .../aws-appconfig/lib/application.ts | 2 + .../aws-appconfig/lib/deployment-strategy.ts | 2 + .../aws-appconfig/lib/environment.ts | 2 + .../aws-appconfig/lib/extension.ts | 2 + .../lib/scalable-target.ts | 2 + .../aws-appmesh/lib/gateway-route.ts | 2 + packages/aws-cdk-lib/aws-appmesh/lib/mesh.ts | 2 + packages/aws-cdk-lib/aws-appmesh/lib/route.ts | 2 + .../aws-appmesh/lib/virtual-gateway.ts | 2 + .../aws-appmesh/lib/virtual-node.ts | 2 + .../aws-appmesh/lib/virtual-router.ts | 2 + .../aws-appmesh/lib/virtual-service.ts | 2 + .../aws-appsync/lib/appsync-function.ts | 2 + .../aws-cdk-lib/aws-appsync/lib/graphqlapi.ts | 2 + .../aws-appsync/lib/source-api-association.ts | 2 + .../aws-autoscaling/lib/auto-scaling-group.ts | 2 + .../aws-autoscaling/lib/lifecycle-hook.ts | 2 + .../aws-autoscaling/lib/scheduled-action.ts | 2 + .../aws-autoscaling/lib/warm-pool.ts | 2 + packages/aws-cdk-lib/aws-backup/lib/plan.ts | 2 + .../aws-cdk-lib/aws-backup/lib/selection.ts | 2 + packages/aws-cdk-lib/aws-backup/lib/vault.ts | 2 + .../aws-batch/lib/ecs-job-definition.ts | 2 + .../aws-batch/lib/eks-job-definition.ts | 2 + .../aws-cdk-lib/aws-batch/lib/job-queue.ts | 2 + .../lib/managed-compute-environment.ts | 2 + .../aws-batch/lib/multinode-job-definition.ts | 2 + .../aws-batch/lib/scheduling-policy.ts | 2 + .../lib/unmanaged-compute-environment.ts | 2 + .../aws-certificatemanager/lib/certificate.ts | 2 + .../lib/dns-validated-certificate.ts | 2 + .../lib/private-certificate.ts | 2 + .../lib/slack-channel-configuration.ts | 2 + .../aws-cloudformation/lib/custom-resource.ts | 2 + .../aws-cloudfront/lib/cache-policy.ts | 2 + .../aws-cloudfront/lib/distribution.ts | 2 + .../lib/experimental/edge-function.ts | 2 + .../aws-cloudfront/lib/function.ts | 2 + .../aws-cloudfront/lib/key-group.ts | 2 + .../aws-cloudfront/lib/key-value-store.ts | 2 + .../lib/origin-access-control.ts | 2 + .../lib/origin-access-identity.ts | 2 + .../lib/origin-request-policy.ts | 2 + .../aws-cloudfront/lib/public-key.ts | 2 + .../aws-cloudfront/lib/realtime-log-config.ts | 2 + .../lib/response-headers-policy.ts | 2 + .../aws-cloudfront/lib/web-distribution.ts | 2 + .../aws-cloudtrail/lib/cloudtrail.ts | 2 + .../aws-cdk-lib/aws-cloudwatch/lib/alarm.ts | 2 + .../aws-cloudwatch/lib/composite-alarm.ts | 2 + .../aws-cloudwatch/lib/dashboard.ts | 2 + .../aws-cdk-lib/aws-codebuild/lib/fleet.ts | 2 + .../aws-codebuild/lib/pipeline-project.ts | 2 + .../aws-cdk-lib/aws-codebuild/lib/project.ts | 2 + .../aws-codebuild/lib/report-group.ts | 2 + .../aws-codebuild/lib/source-credentials.ts | 2 + .../lib/untrusted-code-boundary-policy.ts | 2 + .../aws-codecommit/lib/repository.ts | 2 + .../aws-codedeploy/lib/ecs/application.ts | 2 + .../lib/ecs/deployment-config.ts | 2 + .../lib/ecs/deployment-group.ts | 2 + .../aws-codedeploy/lib/lambda/application.ts | 2 + .../lib/lambda/custom-deployment-config.ts | 2 + .../lib/lambda/deployment-config.ts | 2 + .../lib/lambda/deployment-group.ts | 2 + .../lib/private/base-deployment-group.ts | 2 + .../aws-codedeploy/lib/server/application.ts | 2 + .../lib/server/deployment-config.ts | 2 + .../lib/server/deployment-group.ts | 2 + .../lib/profiling-group.ts | 2 + .../aws-codepipeline/lib/pipeline.ts | 2 + .../lib/notification-rule.ts | 2 + .../aws-cognito/lib/user-pool-client.ts | 2 + .../aws-cognito/lib/user-pool-domain.ts | 2 + .../aws-cognito/lib/user-pool-group.ts | 2 + .../aws-cognito/lib/user-pool-idps/amazon.ts | 2 + .../aws-cognito/lib/user-pool-idps/apple.ts | 2 + .../lib/user-pool-idps/facebook.ts | 2 + .../aws-cognito/lib/user-pool-idps/google.ts | 2 + .../aws-cognito/lib/user-pool-idps/oidc.ts | 2 + .../aws-cognito/lib/user-pool-idps/saml.ts | 2 + .../lib/user-pool-resource-server.ts | 2 + .../aws-cdk-lib/aws-cognito/lib/user-pool.ts | 2 + .../aws-config/lib/managed-rules.ts | 2 + packages/aws-cdk-lib/aws-config/lib/rule.ts | 2 + packages/aws-cdk-lib/aws-docdb/lib/cluster.ts | 2 + .../aws-docdb/lib/database-secret.ts | 2 + .../aws-cdk-lib/aws-docdb/lib/instance.ts | 2 + .../aws-docdb/lib/parameter-group.ts | 2 + .../aws-cdk-lib/aws-dynamodb/lib/table-v2.ts | 2 + .../aws-cdk-lib/aws-dynamodb/lib/table.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/bastion-host.ts | 2 + .../lib/client-vpn-authorization-rule.ts | 2 + .../aws-ec2/lib/client-vpn-endpoint.ts | 2 + .../aws-ec2/lib/client-vpn-route.ts | 2 + packages/aws-cdk-lib/aws-ec2/lib/instance.ts | 2 + packages/aws-cdk-lib/aws-ec2/lib/key-pair.ts | 2 + .../aws-ec2/lib/launch-template.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/network-acl.ts | 2 + .../aws-ec2/lib/placement-group.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/prefix-list.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/security-group.ts | 2 + packages/aws-cdk-lib/aws-ec2/lib/volume.ts | 2 + .../aws-ec2/lib/vpc-endpoint-service.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts | 2 + .../aws-cdk-lib/aws-ec2/lib/vpc-flow-logs.ts | 2 + packages/aws-cdk-lib/aws-ec2/lib/vpc.ts | 2 + packages/aws-cdk-lib/aws-ec2/lib/vpn.ts | 2 + .../aws-cdk-lib/aws-ecr/lib/repository.ts | 2 + .../lib/base/_imported-task-definition.ts | 2 + .../aws-ecs/lib/base/task-definition.ts | 2 + packages/aws-cdk-lib/aws-ecs/lib/cluster.ts | 2 + .../aws-ecs/lib/ec2/ec2-service.ts | 2 + .../aws-ecs/lib/ec2/ec2-task-definition.ts | 2 + .../aws-ecs/lib/external/external-service.ts | 3 + .../lib/external/external-task-definition.ts | 2 + .../aws-ecs/lib/fargate/fargate-service.ts | 2 + .../lib/fargate/fargate-task-definition.ts | 2 + .../aws-cdk-lib/aws-efs/lib/access-point.ts | 2 + .../aws-efs/lib/efs-file-system.ts | 2 + .../aws-cdk-lib/aws-eks/lib/access-entry.ts | 2 + packages/aws-cdk-lib/aws-eks/lib/addon.ts | 2 + packages/aws-cdk-lib/aws-eks/lib/cluster.ts | 2 + .../aws-eks/lib/fargate-cluster.ts | 2 + .../aws-eks/lib/managed-nodegroup.ts | 2 + .../aws-cdk-lib/aws-eks/lib/oidc-provider.ts | 2 + .../lib/load-balancer.ts | 2 + .../lib/alb/application-listener.ts | 2 + .../lib/alb/application-load-balancer.ts | 2 + .../lib/alb/trust-store-revocation.ts | 2 + .../lib/alb/trust-store.ts | 2 + .../lib/nlb/network-listener.ts | 2 + .../lib/nlb/network-load-balancer.ts | 2 + .../aws-elasticsearch/lib/domain.ts | 2 + .../aws-events/lib/api-destination.ts | 2 + .../aws-cdk-lib/aws-events/lib/archive.ts | 2 + .../aws-cdk-lib/aws-events/lib/connection.ts | 2 + .../aws-cdk-lib/aws-events/lib/event-bus.ts | 2 + packages/aws-cdk-lib/aws-events/lib/rule.ts | 2 + .../aws-fsx/lib/lustre-file-system.ts | 2 + .../aws-globalaccelerator/lib/accelerator.ts | 2 + .../lib/endpoint-group.ts | 2 + .../aws-globalaccelerator/lib/listener.ts | 2 + .../aws-cdk-lib/aws-iam/lib/access-key.ts | 2 + packages/aws-cdk-lib/aws-iam/lib/group.ts | 2 + .../aws-iam/lib/instance-profile.ts | 2 + packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts | 2 + .../aws-cdk-lib/aws-iam/lib/managed-policy.ts | 2 + .../aws-cdk-lib/aws-iam/lib/oidc-provider.ts | 2 + packages/aws-cdk-lib/aws-iam/lib/policy.ts | 2 + .../aws-iam/lib/private/immutable-role.ts | 2 + .../aws-iam/lib/private/imported-role.ts | 2 + .../aws-iam/lib/private/precreated-role.ts | 2 + packages/aws-cdk-lib/aws-iam/lib/role.ts | 2 + .../aws-cdk-lib/aws-iam/lib/saml-provider.ts | 2 + packages/aws-cdk-lib/aws-iam/lib/user.ts | 2 + .../aws-kinesis/lib/resource-policy.ts | 2 + .../aws-cdk-lib/aws-kinesis/lib/stream.ts | 2 + packages/aws-cdk-lib/aws-kms/lib/alias.ts | 2 + packages/aws-cdk-lib/aws-kms/lib/key.ts | 2 + .../aws-lambda-nodejs/lib/function.ts | 2 + packages/aws-cdk-lib/aws-lambda/lib/alias.ts | 2 + .../aws-lambda/lib/code-signing-config.ts | 2 + .../aws-lambda/lib/event-invoke-config.ts | 2 + .../aws-lambda/lib/event-source-mapping.ts | 2 + .../aws-lambda/lib/function-url.ts | 2 + .../aws-cdk-lib/aws-lambda/lib/function.ts | 2 + .../aws-lambda/lib/image-function.ts | 2 + .../aws-lambda/lib/lambda-version.ts | 2 + packages/aws-cdk-lib/aws-lambda/lib/layers.ts | 2 + .../aws-lambda/lib/singleton-lambda.ts | 2 + .../aws-logs/lib/cross-account-destination.ts | 2 + .../aws-cdk-lib/aws-logs/lib/log-group.ts | 2 + .../aws-cdk-lib/aws-logs/lib/log-stream.ts | 2 + .../aws-cdk-lib/aws-logs/lib/metric-filter.ts | 2 + packages/aws-cdk-lib/aws-logs/lib/policy.ts | 2 + .../aws-logs/lib/query-definition.ts | 2 + .../aws-logs/lib/subscription-filter.ts | 2 + .../aws-opensearchservice/lib/domain.ts | 2 + .../aws-rds/lib/aurora-cluster-instance.ts | 2 + packages/aws-cdk-lib/aws-rds/lib/cluster.ts | 2 + .../aws-rds/lib/database-secret.ts | 2 + packages/aws-cdk-lib/aws-rds/lib/instance.ts | 2 + .../aws-cdk-lib/aws-rds/lib/option-group.ts | 2 + .../aws-rds/lib/parameter-group.ts | 2 + packages/aws-cdk-lib/aws-rds/lib/proxy.ts | 2 + .../aws-rds/lib/serverless-cluster.ts | 2 + .../aws-cdk-lib/aws-rds/lib/subnet-group.ts | 2 + .../aws-route53/lib/health-check.ts | 2 + .../aws-route53/lib/hosted-zone.ts | 2 + .../aws-route53/lib/key-signing-key.ts | 2 + .../aws-cdk-lib/aws-route53/lib/record-set.ts | 2 + .../aws-cdk-lib/aws-s3/lib/bucket-policy.ts | 2 + packages/aws-cdk-lib/aws-s3/lib/bucket.ts | 2 + .../aws-secretsmanager/lib/policy.ts | 2 + .../lib/rotation-schedule.ts | 2 + .../aws-secretsmanager/lib/secret.ts | 2 + .../aws-servicecatalog/lib/portfolio.ts | 2 + .../aws-servicecatalog/lib/product.ts | 2 + .../aws-servicecatalog/lib/tag-options.ts | 2 + .../lib/alias-target-instance.ts | 2 + .../lib/cname-instance.ts | 2 + .../lib/http-namespace.ts | 2 + .../aws-servicediscovery/lib/ip-instance.ts | 2 + .../lib/non-ip-instance.ts | 2 + .../lib/private-dns-namespace.ts | 2 + .../lib/public-dns-namespace.ts | 2 + .../aws-servicediscovery/lib/service.ts | 2 + .../configuration-set-event-destination.ts | 2 + .../aws-ses/lib/configuration-set.ts | 2 + .../aws-ses/lib/dedicated-ip-pool.ts | 2 + .../aws-cdk-lib/aws-ses/lib/email-identity.ts | 2 + .../aws-cdk-lib/aws-ses/lib/receipt-filter.ts | 2 + .../aws-ses/lib/receipt-rule-set.ts | 2 + .../aws-cdk-lib/aws-ses/lib/receipt-rule.ts | 2 + .../aws-cdk-lib/aws-ses/lib/vdm-attributes.ts | 2 + .../aws-signer/lib/signing-profile.ts | 2 + packages/aws-cdk-lib/aws-sns/lib/policy.ts | 2 + .../aws-cdk-lib/aws-sns/lib/subscription.ts | 2 + packages/aws-cdk-lib/aws-sns/lib/topic.ts | 2 + packages/aws-cdk-lib/aws-sqs/lib/policy.ts | 2 + packages/aws-cdk-lib/aws-sqs/lib/queue.ts | 2 + packages/aws-cdk-lib/aws-ssm/lib/parameter.ts | 2 + .../aws-stepfunctions/lib/activity.ts | 3 + .../aws-stepfunctions/lib/state-machine.ts | 2 + .../aws-cdk-lib/aws-synthetics/lib/canary.ts | 2 + .../aws-cdk-lib/core/lib/custom-resource.ts | 2 + packages/aws-cdk-lib/core/lib/resource.ts | 42 + .../lib/private/asset-singleton-role.ts | 2 + .../triggers/lib/trigger-function.ts | 2 + .../constuct-metadata-updater/.gitignore | 15 + .../constuct-metadata-updater/LICENSE | 202 ++ .../constuct-metadata-updater/README.md | 0 .../bin/update-construct-metadata | 2 + .../bin/update-construct-metadata.ts | 7 + .../constuct-metadata-updater/jest.config.js | 2 + .../constuct-metadata-updater/lib/index.ts | 6 + .../lib/metadata-updater.ts | 215 ++ .../constuct-metadata-updater/package.json | 31 + .../test/metadata-updater.test.ts | 185 ++ .../constuct-metadata-updater/tsconfig.json | 22 + .../constuct-metadata-updater/yarn.lock | 2362 ++++++++++++++ 355 files changed, 6015 insertions(+), 579 deletions(-) create mode 100644 tools/@aws-cdk/constuct-metadata-updater/.gitignore create mode 100644 tools/@aws-cdk/constuct-metadata-updater/LICENSE create mode 100644 tools/@aws-cdk/constuct-metadata-updater/README.md create mode 100755 tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata create mode 100755 tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts create mode 100644 tools/@aws-cdk/constuct-metadata-updater/jest.config.js create mode 100644 tools/@aws-cdk/constuct-metadata-updater/lib/index.ts create mode 100644 tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts create mode 100644 tools/@aws-cdk/constuct-metadata-updater/package.json create mode 100644 tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts create mode 100644 tools/@aws-cdk/constuct-metadata-updater/tsconfig.json create mode 100644 tools/@aws-cdk/constuct-metadata-updater/yarn.lock diff --git a/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts b/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts index 803ce4ae8f9a2..fb445d7128f0e 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts +++ b/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts @@ -7,6 +7,7 @@ import { BasicAuth } from './basic-auth'; import { Branch, BranchOptions } from './branch'; import { Domain, DomainOptions } from './domain'; import { renderEnvironmentVariables } from './utils'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * An Amplify Console application @@ -224,6 +225,7 @@ export class App extends Resource implements IApp, iam.IGrantable { constructor(scope: Construct, id: string, props: AppProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.customRules = props.customRules || []; this.environmentVariables = props.environmentVariables || {}; diff --git a/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts b/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts index 8ab9906b29530..b70a6d3c69d6e 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts +++ b/packages/@aws-cdk/aws-amplify-alpha/lib/branch.ts @@ -17,6 +17,7 @@ import { IApp } from './app'; import { BasicAuth } from './basic-auth'; import { renderEnvironmentVariables } from './utils'; import { AssetDeploymentIsCompleteFunction, AssetDeploymentOnEventFunction } from '../custom-resource-handlers/dist/aws-amplify-alpha/asset-deployment-provider.generated'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A branch @@ -162,6 +163,7 @@ export class Branch extends Resource implements IBranch { constructor(scope: Construct, id: string, props: BranchProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.environmentVariables = props.environmentVariables || {}; diff --git a/packages/@aws-cdk/aws-amplify-alpha/lib/domain.ts b/packages/@aws-cdk/aws-amplify-alpha/lib/domain.ts index 762566ea97e63..63656ff0d16b5 100644 --- a/packages/@aws-cdk/aws-amplify-alpha/lib/domain.ts +++ b/packages/@aws-cdk/aws-amplify-alpha/lib/domain.ts @@ -5,6 +5,7 @@ import { Construct } from 'constructs'; import { CfnDomain } from 'aws-cdk-lib/aws-amplify'; import { IApp } from './app'; import { IBranch } from './branch'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Options to add a domain to an application @@ -127,6 +128,7 @@ export class Domain extends Resource { constructor(scope: Construct, id: string, props: DomainProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.subDomains = props.subDomains || []; diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/auto-scaling-configuration.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/auto-scaling-configuration.ts index 16ae92f7e144b..da4b22dd27274 100644 --- a/packages/@aws-cdk/aws-apprunner-alpha/lib/auto-scaling-configuration.ts +++ b/packages/@aws-cdk/aws-apprunner-alpha/lib/auto-scaling-configuration.ts @@ -1,6 +1,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnAutoScalingConfiguration } from 'aws-cdk-lib/aws-apprunner'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the App Runner Auto Scaling Configuration. @@ -154,6 +155,7 @@ export class AutoScalingConfiguration extends cdk.Resource implements IAutoScali super(scope, id, { physicalName: props.autoScalingConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateAutoScalingConfiguration(props); diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/observability-configuration.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/observability-configuration.ts index 4b7fddee0786b..4e8abadd67069 100644 --- a/packages/@aws-cdk/aws-apprunner-alpha/lib/observability-configuration.ts +++ b/packages/@aws-cdk/aws-apprunner-alpha/lib/observability-configuration.ts @@ -1,6 +1,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnObservabilityConfiguration } from 'aws-cdk-lib/aws-apprunner'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The implementation provider chosen for tracing App Runner services @@ -140,6 +141,7 @@ export class ObservabilityConfiguration extends cdk.Resource implements IObserva super(scope, id, { physicalName: props.observabilityConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.observabilityConfigurationName !== undefined && !cdk.Token.isUnresolved(props.observabilityConfigurationName)) { diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts index 3f25b1ed1b681..3ab22ea301872 100644 --- a/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts +++ b/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts @@ -11,6 +11,7 @@ import { CfnService } from 'aws-cdk-lib/aws-apprunner'; import { IVpcConnector } from './vpc-connector'; import { IAutoScalingConfiguration } from './auto-scaling-configuration'; import { IObservabilityConfiguration } from './observability-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The image repository types @@ -1267,6 +1268,7 @@ export class Service extends cdk.Resource implements IService, iam.IGrantable { public constructor(scope: Construct, id: string, props: ServiceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const source = props.source.bind(this); this.source = source; diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-connector.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-connector.ts index a7e798ec5df16..6f94a422f54d8 100644 --- a/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-connector.ts +++ b/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-connector.ts @@ -3,6 +3,7 @@ import { Connections } from 'aws-cdk-lib/aws-ec2'; import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnVpcConnector } from 'aws-cdk-lib/aws-apprunner'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the AppRunner VPC Connector @@ -135,6 +136,7 @@ export class VpcConnector extends cdk.Resource implements IVpcConnector { super(scope, id, { physicalName: props.vpcConnectorName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.vpcConnectorName !== undefined && !cdk.Token.isUnresolved(props.vpcConnectorName)) { diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-ingress-connection.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-ingress-connection.ts index df47330c29693..a619de9d5d186 100644 --- a/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-ingress-connection.ts +++ b/packages/@aws-cdk/aws-apprunner-alpha/lib/vpc-ingress-connection.ts @@ -3,6 +3,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { IService } from './service'; import { CfnVpcIngressConnection } from 'aws-cdk-lib/aws-apprunner'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the AppRunner VPC Ingress Connection @@ -142,6 +143,7 @@ export class VpcIngressConnection extends cdk.Resource implements IVpcIngressCon super(scope, id, { physicalName: props.vpcIngressConnectionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.vpcIngressConnectionName !== undefined && !cdk.Token.isUnresolved(props.vpcIngressConnectionName)) { diff --git a/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts b/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts index 5fab01baf1f9f..1c9a9fb1887e4 100644 --- a/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts +++ b/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts @@ -4,6 +4,7 @@ import { IUser } from 'aws-cdk-lib/aws-iam'; import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnEnvironmentEC2 } from 'aws-cdk-lib/aws-cloud9'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Cloud9 Environment @@ -197,6 +198,7 @@ export class Ec2Environment extends cdk.Resource implements IEc2Environment { constructor(scope: Construct, id: string, props: Ec2EnvironmentProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; if (!props.subnetSelection && this.vpc.publicSubnets.length === 0) { diff --git a/packages/@aws-cdk/aws-codestar-alpha/lib/github-repository.ts b/packages/@aws-cdk/aws-codestar-alpha/lib/github-repository.ts index 8e988da37e5d0..bc8875fb6e953 100644 --- a/packages/@aws-cdk/aws-codestar-alpha/lib/github-repository.ts +++ b/packages/@aws-cdk/aws-codestar-alpha/lib/github-repository.ts @@ -2,6 +2,7 @@ import * as s3 from 'aws-cdk-lib/aws-s3'; import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import * as codestar from 'aws-cdk-lib/aws-codestar'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * GitHubRepository resource interface @@ -90,6 +91,7 @@ export class GitHubRepository extends cdk.Resource implements IGitHubRepository constructor(scope: Construct, id: string, props: GitHubRepositoryProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new codestar.CfnGitHubRepository(this, 'Resource', { repositoryOwner: props.owner, diff --git a/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool-role-attachment.ts b/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool-role-attachment.ts index 06643535abc19..12552c1cdf5c6 100644 --- a/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool-role-attachment.ts +++ b/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool-role-attachment.ts @@ -3,6 +3,7 @@ import { IRole } from 'aws-cdk-lib/aws-iam'; import { Resource, IResource, Token } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { IIdentityPool, IdentityPoolProviderUrl } from './identitypool'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an Identity Pool Role Attachment @@ -144,6 +145,7 @@ export class IdentityPoolRoleAttachment extends Resource implements IIdentityPoo constructor(scope: Construct, id: string, props: IdentityPoolRoleAttachmentProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.identityPoolId = props.identityPool.identityPoolId; const mappings = props.roleMappings || []; let roles: any = undefined, roleMappings: any = undefined; diff --git a/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool.ts b/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool.ts index 135419ae3cc1c..05ab7e895d615 100644 --- a/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool.ts +++ b/packages/@aws-cdk/aws-cognito-identitypool-alpha/lib/identitypool.ts @@ -4,6 +4,7 @@ import { Resource, IResource, Stack, ArnFormat, Lazy, Token } from 'aws-cdk-lib/ import { Construct } from 'constructs'; import { IdentityPoolRoleAttachment, IdentityPoolRoleMapping } from './identitypool-role-attachment'; import { IUserPoolAuthenticationProvider } from './identitypool-user-pool-authentication-provider'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Cognito Identity Pool @@ -362,6 +363,7 @@ export class IdentityPool extends Resource implements IIdentityPool { super(scope, id, { physicalName: props.identityPoolName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const authProviders: IdentityPoolAuthenticationProviders = props.authenticationProviders || {}; const providers = authProviders.userPools ? authProviders.userPools.map(userPool => userPool.bind(this, this)) : undefined; if (providers && providers.length) this.cognitoIdentityProviders = providers; diff --git a/packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts b/packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts index 378e9f9726291..f207a866f89de 100644 --- a/packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts +++ b/packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts @@ -1,6 +1,7 @@ import { CfnIPAM, CfnIPAMPool, CfnIPAMPoolCidr, CfnIPAMScope } from 'aws-cdk-lib/aws-ec2'; import { Construct } from 'constructs'; import { Lazy, Names, Resource, Stack, Tags } from 'aws-cdk-lib'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents the address family for IP addresses in an IPAM pool. @@ -340,6 +341,7 @@ class IpamPool extends Resource implements IIpamPool { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) { throw new Error('awsService is required when addressFamily is set to ipv6'); diff --git a/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts b/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts index 3d2dc4a7c22ee..2a662c67e2e8b 100644 --- a/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts +++ b/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts @@ -4,6 +4,7 @@ import { Annotations, Duration, IResource, Resource, Tags } from 'aws-cdk-lib/co import { IVpcV2, VPNGatewayV2Options } from './vpc-v2-base'; import { NetworkUtils, allRouteTableIds, CidrBlock } from './util'; import { ISubnetV2 } from './subnet-v2'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Indicates whether the NAT gateway supports public or private connectivity. @@ -236,6 +237,7 @@ export class EgressOnlyInternetGateway extends Resource implements IRouteTarget constructor(scope: Construct, id: string, props: EgressOnlyInternetGatewayProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.egressOnlyInternetGatewayName) { Tags.of(this).add(NAME_TAG, props.egressOnlyInternetGatewayName); diff --git a/packages/@aws-cdk/aws-ec2-alpha/lib/subnet-v2.ts b/packages/@aws-cdk/aws-ec2-alpha/lib/subnet-v2.ts index ad144439ce2c3..2e9b6e3816dac 100644 --- a/packages/@aws-cdk/aws-ec2-alpha/lib/subnet-v2.ts +++ b/packages/@aws-cdk/aws-ec2-alpha/lib/subnet-v2.ts @@ -4,6 +4,7 @@ import { Construct, DependencyGroup, IDependable } from 'constructs'; import { IVpcV2 } from './vpc-v2-base'; import { CidrBlock, CidrBlockIpv6 } from './util'; import { RouteTable } from './route'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface to define subnet CIDR @@ -249,6 +250,7 @@ export class SubnetV2 extends Resource implements ISubnetV2 { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const ipv4CidrBlock = props.ipv4CidrBlock.cidr; const ipv6CidrBlock = props.ipv6CidrBlock?.cidr; diff --git a/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts b/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts index ea493343f8802..1d3c08d5f967d 100644 --- a/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts +++ b/packages/@aws-cdk/aws-ec2-alpha/lib/vpc-v2.ts @@ -5,6 +5,7 @@ import { IpamOptions, IIpamPool } from './ipam'; import { IVpcV2, VpcV2Base } from './vpc-v2-base'; import { ISubnetV2, SubnetV2, SubnetV2Attributes } from './subnet-v2'; import { region_info } from 'aws-cdk-lib'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Additional props needed for secondary Address @@ -457,6 +458,8 @@ export class VpcV2 extends VpcV2Base { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); + this.vpcName = props.vpcName; this.ipAddresses = props.primaryAddressBlock ?? IpAddresses.ipv4('10.0.0.0/16'); const vpcOptions = this.ipAddresses.allocateVpcCidr(); diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/README.md b/packages/@aws-cdk/aws-eks-v2-alpha/README.md index 137470e970625..3db7c65962d02 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/README.md +++ b/packages/@aws-cdk/aws-eks-v2-alpha/README.md @@ -1,3 +1,19 @@ # EKS Alpha Module + + +--- + +![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge) + +> The APIs of higher level constructs in this module are experimental and under active development. +> They are subject to non-backward compatible changes or removal in any future version. These are +> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be +> announced in the release notes. This means that while you may use them, you may need to update +> your source code when upgrading to a newer version of this package. + +--- + + + Under development diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/access-entry.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/access-entry.ts index df4717f003ff4..8e62af51e39a8 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/access-entry.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/access-entry.ts @@ -4,6 +4,7 @@ import { CfnAccessEntry } from 'aws-cdk-lib/aws-eks'; import { Resource, IResource, Aws, Lazy, } from 'aws-cdk-lib/core'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an access entry in an Amazon EKS cluster. @@ -327,6 +328,7 @@ export class AccessEntry extends Resource implements IAccessEntry { constructor(scope: Construct, id: string, props: AccessEntryProps ) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.cluster = props.cluster; this.principal = props.principal; diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/addon.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/addon.ts index 56b767840f2ba..b94f65cb9c702 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/addon.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/addon.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { ICluster } from './cluster'; import { CfnAddon } from 'aws-cdk-lib/aws-eks'; import { ArnFormat, IResource, Resource, Stack, Fn } from 'aws-cdk-lib/core'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an Amazon EKS Add-On. @@ -127,6 +128,7 @@ export class Addon extends Resource implements IAddon { super(scope, id, { physicalName: props.addonName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.clusterName = props.cluster.clusterName; this.addonName = props.addonName; diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/cluster.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/cluster.ts index f0e876173a19f..7b61e5ee86baf 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/cluster.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/cluster.ts @@ -27,6 +27,7 @@ import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as ssm from 'aws-cdk-lib/aws-ssm'; import { Annotations, CfnOutput, CfnResource, IResource, Resource, Stack, Tags, Token, Duration, Size, CfnTag, ArnComponents } from 'aws-cdk-lib/core'; import { CfnCluster } from 'aws-cdk-lib/aws-eks'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; // defaults are based on https://eksctl.io const DEFAULT_CAPACITY_COUNT = 2; @@ -1516,6 +1517,7 @@ export class Cluster extends ClusterBase { super(scope, id, { physicalName: props.clusterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const stack = Stack.of(this); diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/fargate-cluster.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/fargate-cluster.ts index 022d6bc6ecdbf..a2166687159c9 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/fargate-cluster.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/fargate-cluster.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { Cluster, ClusterOptions, CoreDnsComputeType } from './cluster'; import { FargateProfile, FargateProfileOptions } from './fargate-profile'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Configuration props for EKS Fargate. @@ -35,6 +36,7 @@ export class FargateCluster extends Cluster { coreDnsComputeType: props.coreDnsComputeType ?? CoreDnsComputeType.FARGATE, version: props.version, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.defaultProfile = this.addFargateProfile( props.defaultProfile?.fargateProfileName ?? (props.defaultProfile ? 'custom' : 'default'), diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/managed-nodegroup.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/managed-nodegroup.ts index b54fd81e03bda..6d77a0e204047 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/managed-nodegroup.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/managed-nodegroup.ts @@ -5,6 +5,7 @@ import { InstanceType, ISecurityGroup, SubnetSelection, InstanceArchitecture, In import { IRole, ManagedPolicy, PolicyStatement, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; import { IResource, Resource, Annotations, withResolved, FeatureFlags } from 'aws-cdk-lib/core'; import * as cxapi from 'aws-cdk-lib/cx-api'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * NodeGroup interface @@ -390,6 +391,7 @@ export class Nodegroup extends Resource implements INodegroup { super(scope, id, { physicalName: props.nodegroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.cluster = props.cluster; diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/lib/oidc-provider.ts b/packages/@aws-cdk/aws-eks-v2-alpha/lib/oidc-provider.ts index ca52b9c1dbb50..03c72808a8aa3 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/lib/oidc-provider.ts +++ b/packages/@aws-cdk/aws-eks-v2-alpha/lib/oidc-provider.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import * as iam from 'aws-cdk-lib/aws-iam'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Initialization properties for `OpenIdConnectProvider`. @@ -48,5 +49,6 @@ export class OpenIdConnectProvider extends iam.OpenIdConnectProvider { url: props.url, clientIds, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/@aws-cdk/aws-eks-v2-alpha/package.json b/packages/@aws-cdk/aws-eks-v2-alpha/package.json index 334048c6a37de..bba3a1394b2ac 100644 --- a/packages/@aws-cdk/aws-eks-v2-alpha/package.json +++ b/packages/@aws-cdk/aws-eks-v2-alpha/package.json @@ -1,7 +1,7 @@ { "name": "@aws-cdk/aws-eks-v2-alpha", "version": "0.0.0", - "private": true, + "private": false, "description": "The CDK Construct Library for AWS::EKS", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts index 1b0e359791f1f..1e617e7fddb9a 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts @@ -3,6 +3,7 @@ import { Construct } from 'constructs'; import { IFleet } from './fleet-base'; import { IGameSessionQueueDestination } from './game-session-queue'; import { CfnAlias } from 'aws-cdk-lib/aws-gamelift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Gamelift Alias for a Gamelift fleet destination. @@ -199,6 +200,7 @@ export class Alias extends AliasBase { super(scope, id, { physicalName: props.aliasName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!cdk.Token.isUnresolved(props.aliasName)) { if (props.aliasName.length > 1024) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/build-fleet.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/build-fleet.ts index ae9e24a32222f..972cb84685a44 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/build-fleet.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/build-fleet.ts @@ -5,6 +5,7 @@ import { IBuild } from './build'; import { FleetBase, FleetProps, IFleet } from './fleet-base'; import { CfnFleet } from 'aws-cdk-lib/aws-gamelift'; import { Port, IPeer, IngressRule } from './ingress-rule'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a GameLift Fleet used to run a custom game build. @@ -90,6 +91,7 @@ export class BuildFleet extends FleetBase implements IBuildFleet { super(scope, id, { physicalName: props.fleetName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!cdk.Token.isUnresolved(props.fleetName)) { if (props.fleetName.length > 1024) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/build.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/build.ts index edb8ac74ee883..15dad60c44e93 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/build.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/build.ts @@ -5,6 +5,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { Content } from './content'; import { CfnBuild } from 'aws-cdk-lib/aws-gamelift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Your custom-built game server software that runs on GameLift and hosts game sessions for your players. @@ -273,6 +274,7 @@ export class Build extends BuildBase { super(scope, id, { physicalName: props.buildName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.buildName && !cdk.Token.isUnresolved(props.buildName)) { if (props.buildName.length > 1024) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/game-server-group.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/game-server-group.ts index 4411552d3a6f1..97745c0d77ad7 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/game-server-group.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/game-server-group.ts @@ -4,6 +4,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'; import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnGameServerGroup } from 'aws-cdk-lib/aws-gamelift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Configuration settings for intelligent automatic scaling that uses target tracking. @@ -424,6 +425,7 @@ export class GameServerGroup extends GameServerGroupBase { super(scope, id, { physicalName: props.gameServerGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!cdk.Token.isUnresolved(props.gameServerGroupName)) { if (props.gameServerGroupName.length > 128) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/game-session-queue.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/game-session-queue.ts index d5e0cefe9f7c1..2d416beb5abe9 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/game-session-queue.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/game-session-queue.ts @@ -3,6 +3,7 @@ import * as sns from 'aws-cdk-lib/aws-sns'; import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnGameSessionQueue } from 'aws-cdk-lib/aws-gamelift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a game session queue destination @@ -363,6 +364,7 @@ export class GameSessionQueue extends GameSessionQueueBase { super(scope, id, { physicalName: props.gameSessionQueueName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!cdk.Token.isUnresolved(props.gameSessionQueueName)) { if (props.gameSessionQueueName.length > 128) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/matchmaking-ruleset.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/matchmaking-ruleset.ts index 64323b5e4a7dd..1b3679e62bb55 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/matchmaking-ruleset.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/matchmaking-ruleset.ts @@ -3,6 +3,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnMatchmakingRuleSet } from 'aws-cdk-lib/aws-gamelift'; import { RuleSetContent } from './matchmaking-ruleset-body'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Gamelift matchmaking ruleset @@ -195,6 +196,7 @@ export class MatchmakingRuleSet extends MatchmakingRuleSetBase { super(scope, id, { physicalName: props.matchmakingRuleSetName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!cdk.Token.isUnresolved(props.matchmakingRuleSetName)) { if (props.matchmakingRuleSetName.length > 128) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/queued-matchmaking-configuration.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/queued-matchmaking-configuration.ts index 991aecdff82fc..ef879a9f6a7d9 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/queued-matchmaking-configuration.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/queued-matchmaking-configuration.ts @@ -5,6 +5,7 @@ import { Construct } from 'constructs'; import { IGameSessionQueue } from './game-session-queue'; import * as gamelift from 'aws-cdk-lib/aws-gamelift'; import { MatchmakingConfigurationProps, GameProperty, MatchmakingConfigurationBase, IMatchmakingConfiguration } from './matchmaking-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a new queued matchmaking configuration @@ -105,6 +106,7 @@ export class QueuedMatchmakingConfiguration extends MatchmakingConfigurationBase super(scope, id, { physicalName: props.matchmakingConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.matchmakingConfigurationName && !cdk.Token.isUnresolved(props.matchmakingConfigurationName)) { if (props.matchmakingConfigurationName.length > 128) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/script.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/script.ts index e0cc161cc62bb..6a1e6c72d562e 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/script.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/script.ts @@ -5,6 +5,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { Content } from './content'; import { CfnScript } from 'aws-cdk-lib/aws-gamelift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Your configuration and custom game logic for use with Realtime Servers. @@ -191,6 +192,7 @@ export class Script extends ScriptBase { super(scope, id, { physicalName: props.scriptName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.scriptName && !cdk.Token.isUnresolved(props.scriptName)) { if (props.scriptName.length > 1024) { diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/standalone-matchmaking-configuration.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/standalone-matchmaking-configuration.ts index 7f7df76116168..cf01a1bba6b92 100644 --- a/packages/@aws-cdk/aws-gamelift-alpha/lib/standalone-matchmaking-configuration.ts +++ b/packages/@aws-cdk/aws-gamelift-alpha/lib/standalone-matchmaking-configuration.ts @@ -4,6 +4,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import * as gamelift from 'aws-cdk-lib/aws-gamelift'; import { MatchmakingConfigurationProps, MatchmakingConfigurationBase, IMatchmakingConfiguration } from './matchmaking-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a new standalone matchmaking configuration @@ -53,6 +54,7 @@ export class StandaloneMatchmakingConfiguration extends MatchmakingConfiguration super(scope, id, { physicalName: props.matchmakingConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.matchmakingConfigurationName && !cdk.Token.isUnresolved(props.matchmakingConfigurationName)) { if (props.matchmakingConfigurationName.length > 128) { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/connection.ts b/packages/@aws-cdk/aws-glue-alpha/lib/connection.ts index 61981720abd0a..f4da1c5599363 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/connection.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/connection.ts @@ -2,6 +2,7 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as cdk from 'aws-cdk-lib/core'; import * as constructs from 'constructs'; import { CfnConnection } from 'aws-cdk-lib/aws-glue'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The type of the glue connection @@ -303,6 +304,7 @@ export class Connection extends cdk.Resource implements IConnection { super(scope, id, { physicalName: props.connectionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.properties = props.properties || {}; diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/data-quality-ruleset.ts b/packages/@aws-cdk/aws-glue-alpha/lib/data-quality-ruleset.ts index aeb477652fa94..243efaa468e02 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/data-quality-ruleset.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/data-quality-ruleset.ts @@ -2,6 +2,7 @@ import * as cdk from 'aws-cdk-lib'; import * as constructs from 'constructs'; import { IResource, Resource } from 'aws-cdk-lib/core'; import { CfnDataQualityRuleset } from 'aws-cdk-lib/aws-glue'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of a DataQualityTargetTable. @@ -122,6 +123,7 @@ export class DataQualityRuleset extends Resource implements IDataQualityRuleset super(scope, id, { physicalName: props.rulesetName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const rulesetResource = new CfnDataQualityRuleset(this, 'Resource', { clientToken: props.clientToken, diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/database.ts b/packages/@aws-cdk/aws-glue-alpha/lib/database.ts index 6b208b3fdfecd..82402a33bdd4c 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/database.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/database.ts @@ -1,6 +1,7 @@ import { ArnFormat, IResource, Lazy, Names, Resource, Stack } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnDatabase } from 'aws-cdk-lib/aws-glue'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; export interface IDatabase extends IResource { /** @@ -102,6 +103,7 @@ export class Database extends Resource implements IDatabase { produce: () => Names.uniqueResourceName(this, {}).toLowerCase(), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.description !== undefined) { validateDescription(props.description); diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/external-table.ts b/packages/@aws-cdk/aws-glue-alpha/lib/external-table.ts index 38bb5b28e5919..fc19bfb9b0f0f 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/external-table.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/external-table.ts @@ -4,6 +4,7 @@ import { Construct } from 'constructs'; import { IConnection } from './connection'; import { Column } from './schema'; import { PartitionIndex, TableBase, TableBaseProps } from './table-base'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; export interface ExternalTableProps extends TableBaseProps { /** @@ -52,6 +53,7 @@ export class ExternalTable extends TableBase { constructor(scope: Construct, id: string, props: ExternalTableProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.connection = props.connection; this.tableResource = new CfnTable(this, 'Table', { catalogId: props.database.catalogId, diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/job.ts index d6f9a954861cd..1960c7c34c6cf 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/job.ts @@ -10,6 +10,7 @@ import { Code, GlueVersion, JobExecutable, JobExecutableConfig, JobType } from ' import { IConnection } from './connection'; import { CfnJob } from 'aws-cdk-lib/aws-glue'; import { ISecurityConfiguration } from './security-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The type of predefined worker that is allocated when a job runs. @@ -701,6 +702,7 @@ export class Job extends JobBase { super(scope, id, { physicalName: props.jobName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const executable = props.executable.bind(); diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/s3-table.ts b/packages/@aws-cdk/aws-glue-alpha/lib/s3-table.ts index b8ca20aded84b..d33eceacd0126 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/s3-table.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/s3-table.ts @@ -5,6 +5,7 @@ import * as s3 from 'aws-cdk-lib/aws-s3'; import { Construct } from 'constructs'; import { Column } from './schema'; import { PartitionIndex, TableBase, TableBaseProps } from './table-base'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Encryption options for a Table. @@ -120,6 +121,7 @@ export class S3Table extends TableBase { constructor(scope: Construct, id: string, props: S3TableProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.s3Prefix = props.s3Prefix ?? ''; const { bucket, encryption, encryptionKey } = createBucket(this, props); this.bucket = bucket; diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/security-configuration.ts b/packages/@aws-cdk/aws-glue-alpha/lib/security-configuration.ts index 6af34e41d6728..a88693e8bcd11 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/security-configuration.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/security-configuration.ts @@ -3,6 +3,7 @@ import * as cdk from 'aws-cdk-lib/core'; import { Lazy, Names } from 'aws-cdk-lib/core'; import * as constructs from 'constructs'; import { CfnSecurityConfiguration } from 'aws-cdk-lib/aws-glue'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface representing a created or an imported `SecurityConfiguration`. @@ -194,6 +195,7 @@ export class SecurityConfiguration extends cdk.Resource implements ISecurityConf produce: () => Names.uniqueResourceName(this, {}), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!props.s3Encryption && !props.cloudWatchEncryption && !props.jobBookmarksEncryption) { throw new Error('One of cloudWatchEncryption, jobBookmarksEncryption or s3Encryption must be defined'); diff --git a/packages/@aws-cdk/aws-iot-alpha/lib/audit-configuration.ts b/packages/@aws-cdk/aws-iot-alpha/lib/audit-configuration.ts index 8fa046a78ab0b..b27163b8665db 100644 --- a/packages/@aws-cdk/aws-iot-alpha/lib/audit-configuration.ts +++ b/packages/@aws-cdk/aws-iot-alpha/lib/audit-configuration.ts @@ -3,6 +3,7 @@ import { Construct } from 'constructs'; import * as iot from 'aws-cdk-lib/aws-iot'; import * as iam from 'aws-cdk-lib/aws-iam'; import * as sns from 'aws-cdk-lib/aws-sns'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Audit Configuration @@ -197,6 +198,7 @@ export class AccountAuditConfiguration extends Resource implements IAccountAudit constructor(scope: Construct, id: string, props?: AccountAuditConfigurationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.accountId = Stack.of(this).account; diff --git a/packages/@aws-cdk/aws-iot-alpha/lib/logging.ts b/packages/@aws-cdk/aws-iot-alpha/lib/logging.ts index 5df5afff1276c..d76bd1c72df79 100644 --- a/packages/@aws-cdk/aws-iot-alpha/lib/logging.ts +++ b/packages/@aws-cdk/aws-iot-alpha/lib/logging.ts @@ -2,6 +2,7 @@ import { Resource, Stack, IResource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import * as iot from 'aws-cdk-lib/aws-iot'; import * as iam from 'aws-cdk-lib/aws-iam'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Logging @@ -90,6 +91,7 @@ export class Logging extends Resource implements ILogging { constructor(scope: Construct, id: string, props?: LoggingProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const accountId = Stack.of(this).account; diff --git a/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts b/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts index 7b69887cae327..15fa892ced110 100644 --- a/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts +++ b/packages/@aws-cdk/aws-iot-alpha/lib/scheduled-audit.ts @@ -2,6 +2,7 @@ import { Resource, Stack, IResource, Token, ArnFormat } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import * as iot from 'aws-cdk-lib/aws-iot'; import { IAccountAuditConfiguration } from './audit-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Scheduled Audit @@ -317,6 +318,7 @@ export class ScheduledAudit extends Resource implements IScheduledAudit { constructor(scope: Construct, id: string, props: ScheduledAuditProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.auditChecks.length === 0) { throw new Error('At least one \'auditChecks\' must be specified.'); diff --git a/packages/@aws-cdk/aws-iot-alpha/lib/topic-rule.ts b/packages/@aws-cdk/aws-iot-alpha/lib/topic-rule.ts index 91f707189fc66..21f537afae485 100644 --- a/packages/@aws-cdk/aws-iot-alpha/lib/topic-rule.ts +++ b/packages/@aws-cdk/aws-iot-alpha/lib/topic-rule.ts @@ -3,6 +3,7 @@ import { Construct } from 'constructs'; import { IAction } from './action'; import { IotSql } from './iot-sql'; import { CfnTopicRule } from 'aws-cdk-lib/aws-iot'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Rule @@ -115,6 +116,7 @@ export class TopicRule extends Resource implements ITopicRule { super(scope, id, { physicalName: props.topicRuleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const sqlConfig = props.sql.bind(this); diff --git a/packages/@aws-cdk/aws-iotevents-alpha/lib/detector-model.ts b/packages/@aws-cdk/aws-iotevents-alpha/lib/detector-model.ts index 4eb4e6d216d0e..4feb14dbc1c4f 100644 --- a/packages/@aws-cdk/aws-iotevents-alpha/lib/detector-model.ts +++ b/packages/@aws-cdk/aws-iotevents-alpha/lib/detector-model.ts @@ -3,6 +3,7 @@ import { Resource, IResource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnDetectorModel } from 'aws-cdk-lib/aws-iotevents'; import { State } from './state'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Events detector model. @@ -108,6 +109,7 @@ export class DetectorModel extends Resource implements IDetectorModel { super(scope, id, { physicalName: props.detectorModelName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!props.initialState._onEnterEventsHaveAtLeastOneCondition()) { throw new Error('Detector Model must have at least one Input with a condition'); diff --git a/packages/@aws-cdk/aws-iotevents-alpha/lib/input.ts b/packages/@aws-cdk/aws-iotevents-alpha/lib/input.ts index 400bdac3f9d79..36f5a81ce100b 100644 --- a/packages/@aws-cdk/aws-iotevents-alpha/lib/input.ts +++ b/packages/@aws-cdk/aws-iotevents-alpha/lib/input.ts @@ -2,6 +2,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'; import { Resource, IResource, Aws } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnInput } from 'aws-cdk-lib/aws-iotevents'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Events input. @@ -102,6 +103,7 @@ export class Input extends InputBase { super(scope, id, { physicalName: props.inputName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.attributeJsonPaths.length === 0) { throw new Error('attributeJsonPaths property cannot be empty'); diff --git a/packages/@aws-cdk/aws-ivs-alpha/lib/channel.ts b/packages/@aws-cdk/aws-ivs-alpha/lib/channel.ts index 8bb48712a7375..44c4f98c33211 100644 --- a/packages/@aws-cdk/aws-ivs-alpha/lib/channel.ts +++ b/packages/@aws-cdk/aws-ivs-alpha/lib/channel.ts @@ -4,6 +4,7 @@ import { Construct } from 'constructs'; import { CfnChannel } from 'aws-cdk-lib/aws-ivs'; import { StreamKey } from './stream-key'; import { IRecordingConfiguration } from './recording-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Channel @@ -211,6 +212,7 @@ export class Channel extends ChannelBase { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (this.physicalName && !core.Token.isUnresolved(this.physicalName) && !/^[a-zA-Z0-9-_]*$/.test(this.physicalName)) { throw new Error(`channelName must contain only numbers, letters, hyphens and underscores, got: '${this.physicalName}'`); diff --git a/packages/@aws-cdk/aws-ivs-alpha/lib/playback-key-pair.ts b/packages/@aws-cdk/aws-ivs-alpha/lib/playback-key-pair.ts index 7359ca843f42b..f94c871c2beb4 100644 --- a/packages/@aws-cdk/aws-ivs-alpha/lib/playback-key-pair.ts +++ b/packages/@aws-cdk/aws-ivs-alpha/lib/playback-key-pair.ts @@ -2,6 +2,7 @@ import * as core from 'aws-cdk-lib/core'; import { Lazy, Names } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnPlaybackKeyPair } from 'aws-cdk-lib/aws-ivs'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Playback Key Pair @@ -60,6 +61,7 @@ export class PlaybackKeyPair extends PlaybackKeyPairBase { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.playbackKeyPairName && !core.Token.isUnresolved(props.playbackKeyPairName) && !/^[a-zA-Z0-9-_]*$/.test(props.playbackKeyPairName)) { throw new Error(`playbackKeyPairName must contain only numbers, letters, hyphens and underscores, got: '${props.playbackKeyPairName}'`); diff --git a/packages/@aws-cdk/aws-ivs-alpha/lib/recording-configuration.ts b/packages/@aws-cdk/aws-ivs-alpha/lib/recording-configuration.ts index 8864e958233b0..37962d027ce1f 100644 --- a/packages/@aws-cdk/aws-ivs-alpha/lib/recording-configuration.ts +++ b/packages/@aws-cdk/aws-ivs-alpha/lib/recording-configuration.ts @@ -4,6 +4,7 @@ import { Duration, Fn, IResource, Resource, Stack, Token } from 'aws-cdk-lib/cor import { Construct } from 'constructs'; import { RenditionConfiguration } from './rendition-configuration'; import { ThumbnailConfiguration } from './thumbnail-configuration'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the IVS Recording configuration @@ -130,6 +131,7 @@ export class RecordingConfiguration extends Resource implements IRecordingConfig super(scope, id, { physicalName: props.recordingConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.props = props; diff --git a/packages/@aws-cdk/aws-ivs-alpha/lib/stream-key.ts b/packages/@aws-cdk/aws-ivs-alpha/lib/stream-key.ts index 1532ad924c11b..4c77a43054102 100644 --- a/packages/@aws-cdk/aws-ivs-alpha/lib/stream-key.ts +++ b/packages/@aws-cdk/aws-ivs-alpha/lib/stream-key.ts @@ -2,6 +2,7 @@ import * as core from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { IChannel } from './channel'; import { CfnStreamKey } from 'aws-cdk-lib/aws-ivs'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Stream Key @@ -40,6 +41,7 @@ export class StreamKey extends core.Resource implements IStreamKey { constructor(scope: Construct, id: string, props: StreamKeyProps) { super(scope, id, {}); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnStreamKey(this, 'Resource', { channelArn: props.channel.channelArn, diff --git a/packages/@aws-cdk/aws-kinesisanalytics-flink-alpha/lib/application.ts b/packages/@aws-cdk/aws-kinesisanalytics-flink-alpha/lib/application.ts index df744b6f36faa..6a492c55b015f 100644 --- a/packages/@aws-cdk/aws-kinesisanalytics-flink-alpha/lib/application.ts +++ b/packages/@aws-cdk/aws-kinesisanalytics-flink-alpha/lib/application.ts @@ -10,6 +10,7 @@ import { environmentProperties } from './private/environment-properties'; import { flinkApplicationConfiguration } from './private/flink-application-configuration'; import { validateFlinkApplicationProps as validateApplicationProps } from './private/validation'; import { LogLevel, MetricsLevel, Runtime } from './types'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * An interface expressing the public properties on both an imported and @@ -907,6 +908,7 @@ class Import extends ApplicationBase { constructor(scope: Construct, id: string, attrs: { applicationArn: string; securityGroups?: ec2.ISecurityGroup[] }) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, attrs); // Imported applications have no associated role or grantPrincipal this.grantPrincipal = new iam.UnknownPrincipal({ resource: this }); @@ -971,6 +973,7 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps) { super(scope, id, { physicalName: props.applicationName }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); validateApplicationProps(props); this.role = props.role ?? new iam.Role(this, 'Role', { diff --git a/packages/@aws-cdk/aws-kinesisfirehose-alpha/lib/delivery-stream.ts b/packages/@aws-cdk/aws-kinesisfirehose-alpha/lib/delivery-stream.ts index e00fd1f25b72f..5dfca368a0956 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose-alpha/lib/delivery-stream.ts +++ b/packages/@aws-cdk/aws-kinesisfirehose-alpha/lib/delivery-stream.ts @@ -10,6 +10,7 @@ import { FirehoseMetrics } from 'aws-cdk-lib/aws-kinesisfirehose/lib/kinesisfire import { CfnDeliveryStream } from 'aws-cdk-lib/aws-kinesisfirehose'; import { StreamEncryption } from './encryption'; import { ISource } from './source'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; const PUT_RECORD_ACTIONS = [ 'firehose:PutRecord', @@ -319,6 +320,7 @@ export class DeliveryStream extends DeliveryStreamBase { super(scope, id, { physicalName: props.deliveryStreamName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this._role = props.role; diff --git a/packages/@aws-cdk/aws-lambda-go-alpha/lib/function.ts b/packages/@aws-cdk/aws-lambda-go-alpha/lib/function.ts index eea8ac5670d13..5d03273236677 100644 --- a/packages/@aws-cdk/aws-lambda-go-alpha/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda-go-alpha/lib/function.ts @@ -5,6 +5,7 @@ import { Construct } from 'constructs'; import { Bundling } from './bundling'; import { BundlingOptions } from './types'; import { findUp } from './util'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a GolangFunction @@ -120,6 +121,7 @@ export class GoFunction extends lambda.Function { }), handler: 'bootstrap', // setting name to bootstrap so that the 'provided' runtime can also be used }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/@aws-cdk/aws-lambda-python-alpha/lib/function.ts b/packages/@aws-cdk/aws-lambda-python-alpha/lib/function.ts index 510725c028af2..46522ab8ab213 100644 --- a/packages/@aws-cdk/aws-lambda-python-alpha/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda-python-alpha/lib/function.ts @@ -5,6 +5,7 @@ import { Stack } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { Bundling } from './bundling'; import { BundlingOptions } from './types'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a PythonFunction @@ -80,5 +81,6 @@ export class PythonFunction extends Function { }), handler: resolvedHandler, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/@aws-cdk/aws-lambda-python-alpha/lib/layer.ts b/packages/@aws-cdk/aws-lambda-python-alpha/lib/layer.ts index 7b7820acf8d2e..a975b593eef58 100644 --- a/packages/@aws-cdk/aws-lambda-python-alpha/lib/layer.ts +++ b/packages/@aws-cdk/aws-lambda-python-alpha/lib/layer.ts @@ -4,6 +4,7 @@ import { Stack } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { Bundling } from './bundling'; import { BundlingOptions } from './types'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for PythonLayerVersion @@ -69,5 +70,6 @@ export class PythonLayerVersion extends lambda.LayerVersion { ...props.bundling, }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/@aws-cdk/aws-location-alpha/lib/geofence-collection.ts b/packages/@aws-cdk/aws-location-alpha/lib/geofence-collection.ts index 20a70aa754d8a..c7ee580093549 100644 --- a/packages/@aws-cdk/aws-location-alpha/lib/geofence-collection.ts +++ b/packages/@aws-cdk/aws-location-alpha/lib/geofence-collection.ts @@ -4,6 +4,7 @@ import { ArnFormat, IResource, Lazy, Resource, Stack, Token } from 'aws-cdk-lib/ import { Construct } from 'constructs'; import { CfnGeofenceCollection } from 'aws-cdk-lib/aws-location'; import { generateUniqueId } from './util'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Geofence Collection @@ -131,6 +132,7 @@ export class GeofenceCollection extends Resource implements IGeofenceCollection super(scope, id, { physicalName: props.geofenceCollectionName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const geofenceCollection = new CfnGeofenceCollection(this, 'Resource', { collectionName: this.physicalName, diff --git a/packages/@aws-cdk/aws-location-alpha/lib/map.ts b/packages/@aws-cdk/aws-location-alpha/lib/map.ts index 3f9a9078163b7..eca4e83833e91 100644 --- a/packages/@aws-cdk/aws-location-alpha/lib/map.ts +++ b/packages/@aws-cdk/aws-location-alpha/lib/map.ts @@ -3,6 +3,7 @@ import { ArnFormat, IResource, Lazy, Resource, Stack, Token } from 'aws-cdk-lib/ import { Construct } from 'constructs'; import { CfnMap } from 'aws-cdk-lib/aws-location'; import { generateUniqueId } from './util'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents the Amazon Location Service Map @@ -290,6 +291,7 @@ export class Map extends Resource implements IMap { super(scope, id, { physicalName: props.mapName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const map = new CfnMap(this, 'Resource', { configuration: { diff --git a/packages/@aws-cdk/aws-location-alpha/lib/place-index.ts b/packages/@aws-cdk/aws-location-alpha/lib/place-index.ts index a13cd7f7607fc..a0581efd0c3da 100644 --- a/packages/@aws-cdk/aws-location-alpha/lib/place-index.ts +++ b/packages/@aws-cdk/aws-location-alpha/lib/place-index.ts @@ -3,6 +3,7 @@ import { ArnFormat, IResource, Lazy, Resource, Stack, Token } from 'aws-cdk-lib/ import { Construct } from 'constructs'; import { CfnPlaceIndex } from 'aws-cdk-lib/aws-location'; import { DataSource, generateUniqueId } from './util'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Place Index @@ -150,6 +151,7 @@ export class PlaceIndex extends Resource implements IPlaceIndex { super(scope, id, { physicalName: props.placeIndexName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const placeIndex = new CfnPlaceIndex(this, 'Resource', { indexName: this.physicalName, diff --git a/packages/@aws-cdk/aws-location-alpha/lib/route-calculator.ts b/packages/@aws-cdk/aws-location-alpha/lib/route-calculator.ts index 63d83ee373ec3..0ce7e26d9c458 100644 --- a/packages/@aws-cdk/aws-location-alpha/lib/route-calculator.ts +++ b/packages/@aws-cdk/aws-location-alpha/lib/route-calculator.ts @@ -3,6 +3,7 @@ import { ArnFormat, IResource, Lazy, Resource, Stack, Token } from 'aws-cdk-lib/ import { Construct } from 'constructs'; import { CfnRouteCalculator } from 'aws-cdk-lib/aws-location'; import { generateUniqueId, DataSource } from './util'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Route Calculator @@ -127,6 +128,7 @@ export class RouteCalculator extends Resource implements IRouteCalculator { super(scope, id, { physicalName: props.routeCalculatorName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const routeCalculator = new CfnRouteCalculator(this, 'Resource', { calculatorName: this.physicalName, diff --git a/packages/@aws-cdk/aws-location-alpha/lib/tracker.ts b/packages/@aws-cdk/aws-location-alpha/lib/tracker.ts index 8f3049f4e240d..5fae414ff7f12 100644 --- a/packages/@aws-cdk/aws-location-alpha/lib/tracker.ts +++ b/packages/@aws-cdk/aws-location-alpha/lib/tracker.ts @@ -5,6 +5,7 @@ import { Construct } from 'constructs'; import { CfnTracker, CfnTrackerConsumer } from 'aws-cdk-lib/aws-location'; import { generateUniqueId } from './util'; import { IGeofenceCollection } from './geofence-collection'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Tracker @@ -197,6 +198,7 @@ export class Tracker extends Resource implements ITracker { super(scope, id, { physicalName: props.trackerName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const tracker = new CfnTracker(this, 'Resource', { trackerName: this.physicalName, diff --git a/packages/@aws-cdk/aws-msk-alpha/lib/cluster.ts b/packages/@aws-cdk/aws-msk-alpha/lib/cluster.ts index f83da19627a0e..7718e4b5f2db9 100644 --- a/packages/@aws-cdk/aws-msk-alpha/lib/cluster.ts +++ b/packages/@aws-cdk/aws-msk-alpha/lib/cluster.ts @@ -13,6 +13,7 @@ import * as constructs from 'constructs'; import { addressOf } from 'constructs/lib/private/uniqueid'; import { KafkaVersion } from './'; import { CfnCluster } from 'aws-cdk-lib/aws-msk'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a MSK Cluster @@ -467,6 +468,7 @@ export class Cluster extends ClusterBase { super(scope, id, { physicalName: props.clusterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const subnetSelection = props.vpc.selectSubnets(props.vpcSubnets); diff --git a/packages/@aws-cdk/aws-neptune-alpha/lib/cluster.ts b/packages/@aws-cdk/aws-neptune-alpha/lib/cluster.ts index 252ba0f923f40..122061fb21cc4 100644 --- a/packages/@aws-cdk/aws-neptune-alpha/lib/cluster.ts +++ b/packages/@aws-cdk/aws-neptune-alpha/lib/cluster.ts @@ -10,6 +10,7 @@ import { InstanceType } from './instance'; import { CfnDBCluster, CfnDBInstance } from 'aws-cdk-lib/aws-neptune'; import { IClusterParameterGroup, IParameterGroup } from './parameter-group'; import { ISubnetGroup, SubnetGroup } from './subnet-group'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Instances Types to use in Neptune cluster @@ -594,6 +595,7 @@ export class DatabaseCluster extends DatabaseClusterBase implements IDatabaseClu constructor(scope: Construct, id: string, props: DatabaseClusterProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; this.vpcSubnets = props.vpcSubnets ?? { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }; diff --git a/packages/@aws-cdk/aws-neptune-alpha/lib/instance.ts b/packages/@aws-cdk/aws-neptune-alpha/lib/instance.ts index a8012df9e9bf0..9e0ec20a75faa 100644 --- a/packages/@aws-cdk/aws-neptune-alpha/lib/instance.ts +++ b/packages/@aws-cdk/aws-neptune-alpha/lib/instance.ts @@ -6,6 +6,7 @@ import { IDatabaseCluster } from './cluster'; import { Endpoint } from './endpoint'; import { CfnDBInstance } from 'aws-cdk-lib/aws-neptune'; import { IParameterGroup } from './parameter-group'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Instances Types to use in Neptune cluster @@ -499,6 +500,7 @@ export class DatabaseInstance extends DatabaseInstanceBase implements IDatabaseI constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const instance = new CfnDBInstance(this, 'Resource', { autoMinorVersionUpgrade: props.autoMinorVersionUpgrade, diff --git a/packages/@aws-cdk/aws-neptune-alpha/lib/parameter-group.ts b/packages/@aws-cdk/aws-neptune-alpha/lib/parameter-group.ts index 94ce5d5cbe7c2..5ef12f5288f70 100644 --- a/packages/@aws-cdk/aws-neptune-alpha/lib/parameter-group.ts +++ b/packages/@aws-cdk/aws-neptune-alpha/lib/parameter-group.ts @@ -1,6 +1,7 @@ import { IResource, Resource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnDBClusterParameterGroup, CfnDBParameterGroup } from 'aws-cdk-lib/aws-neptune'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The DB parameter group family that a DB parameter group is compatible with @@ -108,6 +109,7 @@ export class ClusterParameterGroup extends Resource implements IClusterParameter constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnDBClusterParameterGroup(this, 'Resource', { name: props.clusterParameterGroupName, diff --git a/packages/@aws-cdk/aws-neptune-alpha/lib/subnet-group.ts b/packages/@aws-cdk/aws-neptune-alpha/lib/subnet-group.ts index 9e2528db70573..2cf7ca4bcd941 100644 --- a/packages/@aws-cdk/aws-neptune-alpha/lib/subnet-group.ts +++ b/packages/@aws-cdk/aws-neptune-alpha/lib/subnet-group.ts @@ -2,6 +2,7 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2'; import { IResource, RemovalPolicy, Resource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnDBSubnetGroup } from 'aws-cdk-lib/aws-neptune'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface for a subnet group. @@ -73,6 +74,7 @@ export class SubnetGroup extends Resource implements ISubnetGroup { constructor(scope: Construct, id: string, props: SubnetGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const { subnetIds } = props.vpc.selectSubnets(props.vpcSubnets ?? { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }); diff --git a/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts b/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts index 6056bcc3d79ac..46fe1122c4181 100644 --- a/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts +++ b/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts @@ -7,6 +7,7 @@ import { IFilter } from './filter'; import { ILogDestination, IncludeExecutionData, LogLevel } from './logs'; import { ISource, SourceWithDeadLetterTarget } from './source'; import { ITarget } from './target'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface representing a created or an imported `Pipe`. @@ -183,6 +184,7 @@ class ImportedPipe extends PipeBase { constructor(scope: Construct, id: string, pipeName: string) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, { pipeineName: pipeName }); this.pipeName = pipeName; this.pipeArn = Stack.of(this).formatArn({ service: 'pipes', diff --git a/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts b/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts index 19d3ac3fb590a..0b5817ceea1e4 100644 --- a/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts +++ b/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts @@ -13,6 +13,7 @@ import { Endpoint } from './endpoint'; import { ClusterParameterGroup, IClusterParameterGroup } from './parameter-group'; import { CfnCluster } from 'aws-cdk-lib/aws-redshift'; import { ClusterSubnetGroup, IClusterSubnetGroup } from './subnet-group'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Node Types to use in the cluster @@ -548,6 +549,7 @@ export class Cluster extends ClusterBase { constructor(scope: Construct, id: string, props: ClusterProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; this.vpcSubnets = props.vpcSubnets ?? { diff --git a/packages/@aws-cdk/aws-redshift-alpha/lib/database-secret.ts b/packages/@aws-cdk/aws-redshift-alpha/lib/database-secret.ts index f6c2f40d8a321..609695e961474 100644 --- a/packages/@aws-cdk/aws-redshift-alpha/lib/database-secret.ts +++ b/packages/@aws-cdk/aws-redshift-alpha/lib/database-secret.ts @@ -1,6 +1,7 @@ import * as kms from 'aws-cdk-lib/aws-kms'; import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager'; import { Construct } from 'constructs'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -42,5 +43,6 @@ export class DatabaseSecret extends secretsmanager.Secret { excludeCharacters: props.excludeCharacters ?? '"@/\\\ \'', }, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/@aws-cdk/aws-redshift-alpha/lib/parameter-group.ts b/packages/@aws-cdk/aws-redshift-alpha/lib/parameter-group.ts index 5b2125df029c2..e94bf8d5b2e6f 100644 --- a/packages/@aws-cdk/aws-redshift-alpha/lib/parameter-group.ts +++ b/packages/@aws-cdk/aws-redshift-alpha/lib/parameter-group.ts @@ -1,6 +1,7 @@ import { IResource, Resource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnClusterParameterGroup } from 'aws-cdk-lib/aws-redshift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A parameter group @@ -75,6 +76,7 @@ export class ClusterParameterGroup extends ClusterParameterGroupBase { constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.parameters = props.parameters; this.resource = new CfnClusterParameterGroup(this, 'Resource', { description: props.description || 'Cluster parameter group for family redshift-1.0', diff --git a/packages/@aws-cdk/aws-redshift-alpha/lib/subnet-group.ts b/packages/@aws-cdk/aws-redshift-alpha/lib/subnet-group.ts index 5075f1019d9a5..ab6b9963e2fda 100644 --- a/packages/@aws-cdk/aws-redshift-alpha/lib/subnet-group.ts +++ b/packages/@aws-cdk/aws-redshift-alpha/lib/subnet-group.ts @@ -2,6 +2,7 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2'; import { IResource, RemovalPolicy, Resource } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnClusterSubnetGroup } from 'aws-cdk-lib/aws-redshift'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface for a cluster subnet group. @@ -64,6 +65,7 @@ export class ClusterSubnetGroup extends Resource implements IClusterSubnetGroup constructor(scope: Construct, id: string, props: ClusterSubnetGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const { subnetIds } = props.vpc.selectSubnets(props.vpcSubnets ?? { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }); diff --git a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-domain-list.ts b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-domain-list.ts index 162588ea0327a..06ba7ff832883 100644 --- a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-domain-list.ts +++ b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-domain-list.ts @@ -4,6 +4,7 @@ import { Asset } from 'aws-cdk-lib/aws-s3-assets'; import { IResource, Resource, Token } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnFirewallDomainList } from 'aws-cdk-lib/aws-route53resolver'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Firewall Domain List @@ -209,6 +210,7 @@ export class FirewallDomainList extends Resource implements IFirewallDomainList constructor(scope: Construct, id: string, props: FirewallDomainListProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.name && !Token.isUnresolved(props.name) && !/^[\w-.]{1,128}$/.test(props.name)) { throw new Error(`Invalid domain list name: ${props.name}. The name must have 1-128 characters. Valid characters: A-Z, a-z, 0-9, _, -, .`); diff --git a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group-association.ts b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group-association.ts index f7091e2eca2ef..e71c0732db472 100644 --- a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group-association.ts +++ b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group-association.ts @@ -3,6 +3,7 @@ import { Resource, Token } from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { IFirewallRuleGroup } from './firewall-rule-group'; import { CfnFirewallRuleGroupAssociation } from 'aws-cdk-lib/aws-route53resolver'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Options for a Firewall Rule Group Association @@ -106,6 +107,7 @@ export class FirewallRuleGroupAssociation extends Resource { constructor(scope: Construct, id: string, props: FirewallRuleGroupAssociationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!Token.isUnresolved(props.priority) && (props.priority <= 100 || props.priority >= 9000)) { throw new Error(`Priority must be greater than 100 and less than 9000, got ${props.priority}`); diff --git a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group.ts b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group.ts index 6d9e7869b0015..e96a9a1218ab8 100644 --- a/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group.ts +++ b/packages/@aws-cdk/aws-route53resolver-alpha/lib/firewall-rule-group.ts @@ -3,6 +3,7 @@ import { Construct } from 'constructs'; import { IFirewallDomainList } from './firewall-domain-list'; import { FirewallRuleGroupAssociation, FirewallRuleGroupAssociationOptions } from './firewall-rule-group-association'; import { CfnFirewallRuleGroup } from 'aws-cdk-lib/aws-route53resolver'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Firewall Rule Group @@ -225,6 +226,7 @@ export class FirewallRuleGroup extends Resource implements IFirewallRuleGroup { constructor(scope: Construct, id: string, props: FirewallRuleGroupProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.rules = props.rules ?? []; diff --git a/packages/@aws-cdk/aws-s3objectlambda-alpha/lib/access-point.ts b/packages/@aws-cdk/aws-s3objectlambda-alpha/lib/access-point.ts index 486e4902472ef..3734c8c763f6f 100644 --- a/packages/@aws-cdk/aws-s3objectlambda-alpha/lib/access-point.ts +++ b/packages/@aws-cdk/aws-s3objectlambda-alpha/lib/access-point.ts @@ -4,6 +4,7 @@ import * as s3 from 'aws-cdk-lib/aws-s3'; import * as core from 'aws-cdk-lib/core'; import { Construct } from 'constructs'; import { CfnAccessPoint } from 'aws-cdk-lib/aws-s3objectlambda'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface that represents the AccessPoint resource. @@ -210,6 +211,7 @@ export class AccessPoint extends AccessPointBase { super(scope, id, { physicalName: props.accessPointName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.accessPointName) { validateAccessPointName(props.accessPointName); diff --git a/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint-config.ts b/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint-config.ts index 4cdeb6d07850f..236e42e1f42f9 100644 --- a/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint-config.ts +++ b/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint-config.ts @@ -7,6 +7,7 @@ import { InstanceType } from './instance-type'; import { IModel } from './model'; import { sameEnv } from './private/util'; import { CfnEndpointConfig } from 'aws-cdk-lib/aws-sagemaker'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface for a SageMaker EndpointConfig resource. @@ -206,6 +207,7 @@ export class EndpointConfig extends cdk.Resource implements IEndpointConfig { super(scope, id, { physicalName: props.endpointConfigName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); (props.instanceProductionVariants || []).map(p => this.addInstanceProductionVariant(p)); diff --git a/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint.ts b/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint.ts index 2fcb1d79651a3..f5bc83d0ebc54 100644 --- a/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint.ts +++ b/packages/@aws-cdk/aws-sagemaker-alpha/lib/endpoint.ts @@ -11,6 +11,7 @@ import { InstanceType } from './instance-type'; import { sameEnv } from './private/util'; import { CfnEndpoint } from 'aws-cdk-lib/aws-sagemaker'; import { ScalableInstanceCount } from './scalable-instance-count'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /* * Amazon SageMaker automatic scaling doesn't support automatic scaling for burstable instances such @@ -408,6 +409,7 @@ export class Endpoint extends EndpointBase { super(scope, id, { physicalName: props.endpointName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateEnvironmentCompatibility(props.endpointConfig); this.endpointConfig = props.endpointConfig; diff --git a/packages/@aws-cdk/aws-sagemaker-alpha/lib/model.ts b/packages/@aws-cdk/aws-sagemaker-alpha/lib/model.ts index 28f88d4934b1d..297171be968f0 100644 --- a/packages/@aws-cdk/aws-sagemaker-alpha/lib/model.ts +++ b/packages/@aws-cdk/aws-sagemaker-alpha/lib/model.ts @@ -5,6 +5,7 @@ import { Construct } from 'constructs'; import { ContainerImage } from './container-image'; import { ModelData } from './model-data'; import { CfnModel } from 'aws-cdk-lib/aws-sagemaker'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface that defines a Model resource. @@ -307,6 +308,7 @@ export class Model extends ModelBase { super(scope, id, { physicalName: props.modelName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this._connections = this.configureNetworking(props); this.subnets = (props.vpc) ? props.vpc.selectSubnets(props.vpcSubnets) : undefined; diff --git a/packages/@aws-cdk/aws-scheduler-alpha/lib/group.ts b/packages/@aws-cdk/aws-scheduler-alpha/lib/group.ts index 7f737a91eca2e..117f6c4e68cb9 100644 --- a/packages/@aws-cdk/aws-scheduler-alpha/lib/group.ts +++ b/packages/@aws-cdk/aws-scheduler-alpha/lib/group.ts @@ -2,6 +2,7 @@ import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch'; import * as iam from 'aws-cdk-lib/aws-iam'; import { CfnScheduleGroup } from 'aws-cdk-lib/aws-scheduler'; import { Arn, ArnFormat, Aws, IResource, Names, RemovalPolicy, Resource, Stack } from 'aws-cdk-lib/core'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; import { Construct } from 'constructs'; export interface GroupProps { @@ -339,6 +340,7 @@ export class Group extends GroupBase { public constructor(scope: Construct, id: string, props: GroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.groupName = props.groupName ?? Names.uniqueResourceName(this, { maxLength: 64, diff --git a/packages/@aws-cdk/aws-scheduler-alpha/lib/schedule.ts b/packages/@aws-cdk/aws-scheduler-alpha/lib/schedule.ts index 1fe1859fa690d..3e76c4fec6cee 100644 --- a/packages/@aws-cdk/aws-scheduler-alpha/lib/schedule.ts +++ b/packages/@aws-cdk/aws-scheduler-alpha/lib/schedule.ts @@ -2,6 +2,7 @@ import { Duration, IResource, Resource, Token } from 'aws-cdk-lib'; import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch'; import * as kms from 'aws-cdk-lib/aws-kms'; import { CfnSchedule } from 'aws-cdk-lib/aws-scheduler'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; import { Construct } from 'constructs'; import { IGroup } from './group'; import { ScheduleExpression } from './schedule-expression'; @@ -272,6 +273,7 @@ export class Schedule extends Resource implements ISchedule { super(scope, id, { physicalName: props.scheduleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.group = props.group; diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/application.ts b/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/application.ts index 40d5479148fdf..617ded4ac532c 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/application.ts +++ b/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/application.ts @@ -7,6 +7,7 @@ import { getPrincipalsforSharing, hashValues, ShareOptions, SharePermission } fr import { isAccountUnresolved } from './private/utils'; import { InputValidator } from './private/validation'; import { CfnApplication, CfnAttributeGroupAssociation, CfnResourceAssociation } from 'aws-cdk-lib/aws-servicecatalogappregistry'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; const APPLICATION_READ_ONLY_RAM_PERMISSION_ARN = `arn:${cdk.Aws.PARTITION}:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationReadOnly`; const APPLICATION_ALLOW_ACCESS_RAM_PERMISSION_ARN = `arn:${cdk.Aws.PARTITION}:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryApplicationAllowAssociation`; @@ -314,6 +315,7 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateApplicationProps(props); diff --git a/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/attribute-group.ts b/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/attribute-group.ts index f71c6cce8c365..07b9730ec8574 100644 --- a/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/attribute-group.ts +++ b/packages/@aws-cdk/aws-servicecatalogappregistry-alpha/lib/attribute-group.ts @@ -5,6 +5,7 @@ import { IApplication } from './application'; import { getPrincipalsforSharing, hashValues, ShareOptions, SharePermission } from './common'; import { InputValidator } from './private/validation'; import { CfnAttributeGroup, CfnAttributeGroupAssociation } from 'aws-cdk-lib/aws-servicecatalogappregistry'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; const ATTRIBUTE_GROUP_READ_ONLY_RAM_PERMISSION_ARN = `arn:${cdk.Aws.PARTITION}:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryAttributeGroupReadOnly`; const ATTRIBUTE_GROUP_ALLOW_ACCESS_RAM_PERMISSION_ARN = `arn:${cdk.Aws.PARTITION}:ram::aws:permission/AWSRAMPermissionServiceCatalogAppRegistryAttributeGroupAllowAssociation`; @@ -150,6 +151,7 @@ export class AttributeGroup extends AttributeGroupBase implements IAttributeGrou constructor(scope: Construct, id: string, props: AttributeGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateAttributeGroupProps(props); diff --git a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES index 83df0b8ecbb3d..98d1cf54ada22 100644 --- a/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES +++ b/packages/@aws-cdk/cli-lib-alpha/THIRD_PARTY_LICENSES @@ -1442,7 +1442,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-cognito-identity@3.685.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.685.0 | Apache-2.0 +** @aws-sdk/client-cognito-identity@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/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.699.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-cognito-identity@3.716.0 - https://www.npmjs.com/package/@aws-sdk/client-cognito-identity/v/3.716.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.682.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.682.0 | Apache-2.0 +** @aws-sdk/client-ecr@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.699.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-ecr@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-ecr@3.720.0 - https://www.npmjs.com/package/@aws-sdk/client-ecr/v/3.720.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-s3@3.685.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.685.0 | Apache-2.0 +** @aws-sdk/client-s3@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.699.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-s3@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-s3@3.717.0 - https://www.npmjs.com/package/@aws-sdk/client-s3/v/3.717.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-secrets-manager@3.682.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.682.0 | Apache-2.0 +** @aws-sdk/client-secrets-manager@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.699.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-secrets-manager@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-secrets-manager@3.716.0 - https://www.npmjs.com/package/@aws-sdk/client-secrets-manager/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -4944,7 +4944,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso-oidc@3.682.0 - https://www.npmjs.com/package/@aws-sdk/client-sso-oidc/v/3.682.0 | Apache-2.0 +** @aws-sdk/client-sso-oidc@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-sso-oidc/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5150,7 +5150,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso-oidc@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-sso-oidc/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-sso-oidc@3.716.0 - https://www.npmjs.com/package/@aws-sdk/client-sso-oidc/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5356,7 +5356,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso@3.682.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.682.0 | Apache-2.0 +** @aws-sdk/client-sso@3.696.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5562,7 +5562,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sso@3.696.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.696.0 | Apache-2.0 +** @aws-sdk/client-sso@3.716.0 - https://www.npmjs.com/package/@aws-sdk/client-sso/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5768,7 +5768,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sts@3.682.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.682.0 | Apache-2.0 +** @aws-sdk/client-sts@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -5974,7 +5974,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/client-sts@3.699.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.699.0 | Apache-2.0 +** @aws-sdk/client-sts@3.716.0 - https://www.npmjs.com/package/@aws-sdk/client-sts/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6180,15 +6180,15 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/core@3.679.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.679.0 | Apache-2.0 +** @aws-sdk/core@3.696.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.696.0 | Apache-2.0 ---------------- -** @aws-sdk/core@3.696.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.696.0 | Apache-2.0 +** @aws-sdk/core@3.716.0 - https://www.npmjs.com/package/@aws-sdk/core/v/3.716.0 | Apache-2.0 ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.685.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.685.0 | Apache-2.0 +** @aws-sdk/credential-provider-cognito-identity@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6394,7 +6394,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/credential-provider-cognito-identity@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.699.0 | Apache-2.0 +** @aws-sdk/credential-provider-cognito-identity@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-cognito-identity/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6600,7 +6600,7 @@ The @aws-cdk/cli-lib-alpha package includes the following third-party software/l ---------------- -** @aws-sdk/credential-provider-env@3.679.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.679.0 | Apache-2.0 +** @aws-sdk/credential-provider-env@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6805,7 +6805,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-env@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.696.0 | Apache-2.0 +** @aws-sdk/credential-provider-env@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-env/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7010,15 +7010,15 @@ Apache License ---------------- -** @aws-sdk/credential-provider-http@3.679.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.679.0 | Apache-2.0 +** @aws-sdk/credential-provider-http@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.696.0 | Apache-2.0 ---------------- -** @aws-sdk/credential-provider-http@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.696.0 | Apache-2.0 +** @aws-sdk/credential-provider-http@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-http/v/3.716.0 | Apache-2.0 ---------------- -** @aws-sdk/credential-provider-ini@3.682.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.682.0 | Apache-2.0 +** @aws-sdk/credential-provider-ini@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7223,7 +7223,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-ini@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.699.0 | Apache-2.0 +** @aws-sdk/credential-provider-ini@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-ini/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7428,7 +7428,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.682.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.682.0 | Apache-2.0 +** @aws-sdk/credential-provider-node@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7633,7 +7633,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-node@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.699.0 | Apache-2.0 +** @aws-sdk/credential-provider-node@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-node/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -7838,7 +7838,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-process@3.679.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.679.0 | Apache-2.0 +** @aws-sdk/credential-provider-process@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8043,7 +8043,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-process@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.696.0 | Apache-2.0 +** @aws-sdk/credential-provider-process@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-process/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8248,7 +8248,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-sso@3.682.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.682.0 | Apache-2.0 +** @aws-sdk/credential-provider-sso@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8453,7 +8453,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-sso@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.699.0 | Apache-2.0 +** @aws-sdk/credential-provider-sso@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-sso/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8658,7 +8658,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-web-identity@3.679.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.679.0 | Apache-2.0 +** @aws-sdk/credential-provider-web-identity@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -8863,7 +8863,7 @@ Apache License ---------------- -** @aws-sdk/credential-provider-web-identity@3.696.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.696.0 | Apache-2.0 +** @aws-sdk/credential-provider-web-identity@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-provider-web-identity/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9068,7 +9068,7 @@ Apache License ---------------- -** @aws-sdk/credential-providers@3.685.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.685.0 | Apache-2.0 +** @aws-sdk/credential-providers@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9273,7 +9273,7 @@ Apache License ---------------- -** @aws-sdk/credential-providers@3.699.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.699.0 | Apache-2.0 +** @aws-sdk/credential-providers@3.716.0 - https://www.npmjs.com/package/@aws-sdk/credential-providers/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9683,7 +9683,7 @@ Apache License ---------------- -** @aws-sdk/lib-storage@3.685.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.685.0 | Apache-2.0 +** @aws-sdk/lib-storage@3.699.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.699.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -9888,7 +9888,7 @@ Apache License ---------------- -** @aws-sdk/lib-storage@3.699.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.699.0 | Apache-2.0 +** @aws-sdk/lib-storage@3.717.0 - https://www.npmjs.com/package/@aws-sdk/lib-storage/v/3.717.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10093,7 +10093,7 @@ Apache License ---------------- -** @aws-sdk/middleware-bucket-endpoint@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-bucket-endpoint@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10299,7 +10299,7 @@ Apache License ---------------- -** @aws-sdk/middleware-bucket-endpoint@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-bucket-endpoint@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-bucket-endpoint/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10505,7 +10505,7 @@ Apache License ---------------- -** @aws-sdk/middleware-expect-continue@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-expect-continue@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10711,7 +10711,7 @@ Apache License ---------------- -** @aws-sdk/middleware-expect-continue@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-expect-continue@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-expect-continue/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10917,7 +10917,7 @@ Apache License ---------------- -** @aws-sdk/middleware-flexible-checksums@3.682.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.682.0 | Apache-2.0 +** @aws-sdk/middleware-flexible-checksums@3.697.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.697.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -11123,7 +11123,7 @@ Apache License ---------------- -** @aws-sdk/middleware-flexible-checksums@3.697.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.697.0 | Apache-2.0 +** @aws-sdk/middleware-flexible-checksums@3.717.0 - https://www.npmjs.com/package/@aws-sdk/middleware-flexible-checksums/v/3.717.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -11329,7 +11329,7 @@ Apache License ---------------- -** @aws-sdk/middleware-host-header@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-host-header@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -11535,7 +11535,7 @@ Apache License ---------------- -** @aws-sdk/middleware-host-header@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-host-header@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-host-header/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -11741,7 +11741,7 @@ Apache License ---------------- -** @aws-sdk/middleware-location-constraint@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-location-constraint@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -11947,7 +11947,7 @@ Apache License ---------------- -** @aws-sdk/middleware-location-constraint@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-location-constraint@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-location-constraint/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -12153,7 +12153,7 @@ Apache License ---------------- -** @aws-sdk/middleware-logger@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-logger@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -12358,7 +12358,7 @@ Apache License ---------------- -** @aws-sdk/middleware-logger@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-logger@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-logger/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -12563,7 +12563,7 @@ Apache License ---------------- -** @aws-sdk/middleware-recursion-detection@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-recursion-detection@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -12769,7 +12769,7 @@ Apache License ---------------- -** @aws-sdk/middleware-recursion-detection@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.696.0 | Apache-2.0 +** @aws-sdk/middleware-recursion-detection@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-recursion-detection/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13384,212 +13384,6 @@ Apache License limitations under the License. ----------------- - -** @aws-sdk/middleware-sdk-s3@3.685.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.685.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-sdk-s3@3.696.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.696.0 | Apache-2.0 @@ -13798,7 +13592,7 @@ Apache License ---------------- -** @aws-sdk/middleware-ssec@3.679.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.679.0 | Apache-2.0 +** @aws-sdk/middleware-sdk-s3@3.716.0 - https://www.npmjs.com/package/@aws-sdk/middleware-sdk-s3/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13987,7 +13781,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. @@ -14210,7 +14004,7 @@ Apache License ---------------- -** @aws-sdk/middleware-user-agent@3.682.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.682.0 | Apache-2.0 +** @aws-sdk/middleware-ssec@3.714.0 - https://www.npmjs.com/package/@aws-sdk/middleware-ssec/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14399,7 +14193,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. @@ -14622,8 +14416,8 @@ Apache License ---------------- -** @aws-sdk/region-config-resolver@3.679.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.679.0 | Apache-2.0 -Apache License +** @aws-sdk/middleware-user-agent@3.716.0 - https://www.npmjs.com/package/@aws-sdk/middleware-user-agent/v/3.716.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14811,7 +14605,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. @@ -14825,6 +14619,7 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- ** @aws-sdk/region-config-resolver@3.696.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.696.0 | Apache-2.0 @@ -15032,8 +14827,8 @@ Apache License ---------------- -** @aws-sdk/signature-v4-multi-region@3.685.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.685.0 | Apache-2.0 - Apache License +** @aws-sdk/region-config-resolver@3.714.0 - https://www.npmjs.com/package/@aws-sdk/region-config-resolver/v/3.714.0 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -15221,7 +15016,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. @@ -15235,7 +15030,6 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- ** @aws-sdk/signature-v4-multi-region@3.696.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.696.0 | Apache-2.0 @@ -15444,8 +15238,8 @@ Apache License ---------------- -** @aws-sdk/token-providers@3.679.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.679.0 | Apache-2.0 -Apache License +** @aws-sdk/signature-v4-multi-region@3.716.0 - https://www.npmjs.com/package/@aws-sdk/signature-v4-multi-region/v/3.716.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -15633,7 +15427,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. @@ -15647,6 +15441,7 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- ** @aws-sdk/token-providers@3.699.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.699.0 | Apache-2.0 @@ -15854,7 +15649,7 @@ Apache License ---------------- -** @aws-sdk/util-arn-parser@3.679.0 - https://www.npmjs.com/package/@aws-sdk/util-arn-parser/v/3.679.0 | Apache-2.0 +** @aws-sdk/token-providers@3.714.0 - https://www.npmjs.com/package/@aws-sdk/token-providers/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -16264,7 +16059,7 @@ Apache License ---------------- -** @aws-sdk/util-endpoints@3.679.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.679.0 | Apache-2.0 +** @aws-sdk/util-endpoints@3.696.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -16469,7 +16264,7 @@ Apache License ---------------- -** @aws-sdk/util-endpoints@3.696.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.696.0 | Apache-2.0 +** @aws-sdk/util-endpoints@3.714.0 - https://www.npmjs.com/package/@aws-sdk/util-endpoints/v/3.714.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -16879,7 +16674,7 @@ Apache License ---------------- -** @aws-sdk/util-user-agent-node@3.682.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.682.0 | Apache-2.0 +** @aws-sdk/util-user-agent-node@3.696.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17085,7 +16880,7 @@ Apache License ---------------- -** @aws-sdk/util-user-agent-node@3.696.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.696.0 | Apache-2.0 +** @aws-sdk/util-user-agent-node@3.716.0 - https://www.npmjs.com/package/@aws-sdk/util-user-agent-node/v/3.716.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17291,7 +17086,7 @@ Apache License ---------------- -** @aws-sdk/xml-builder@3.679.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.679.0 | Apache-2.0 +** @aws-sdk/xml-builder@3.696.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.696.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17496,7 +17291,7 @@ Apache License ---------------- -** @aws-sdk/xml-builder@3.696.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.696.0 | Apache-2.0 +** @aws-sdk/xml-builder@3.709.0 - https://www.npmjs.com/package/@aws-sdk/xml-builder/v/3.709.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -17915,7 +17710,7 @@ Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. ---------------- -** @smithy/abort-controller@3.1.6 - https://www.npmjs.com/package/@smithy/abort-controller/v/3.1.6 | Apache-2.0 +** @smithy/abort-controller@3.1.8 - https://www.npmjs.com/package/@smithy/abort-controller/v/3.1.8 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18120,7 +17915,7 @@ Apache License ---------------- -** @smithy/abort-controller@3.1.8 - https://www.npmjs.com/package/@smithy/abort-controller/v/3.1.8 | Apache-2.0 +** @smithy/abort-controller@3.1.9 - https://www.npmjs.com/package/@smithy/abort-controller/v/3.1.9 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18325,7 +18120,7 @@ Apache License ---------------- -** @smithy/config-resolver@3.0.10 - https://www.npmjs.com/package/@smithy/config-resolver/v/3.0.10 | Apache-2.0 +** @smithy/config-resolver@3.0.12 - https://www.npmjs.com/package/@smithy/config-resolver/v/3.0.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18530,7 +18325,7 @@ Apache License ---------------- -** @smithy/config-resolver@3.0.12 - https://www.npmjs.com/package/@smithy/config-resolver/v/3.0.12 | Apache-2.0 +** @smithy/config-resolver@3.0.13 - https://www.npmjs.com/package/@smithy/config-resolver/v/3.0.13 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18735,7 +18530,7 @@ Apache License ---------------- -** @smithy/core@2.5.1 - https://www.npmjs.com/package/@smithy/core/v/2.5.1 | Apache-2.0 +** @smithy/core@2.5.3 - https://www.npmjs.com/package/@smithy/core/v/2.5.3 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -18941,7 +18736,7 @@ Apache License ---------------- -** @smithy/core@2.5.3 - https://www.npmjs.com/package/@smithy/core/v/2.5.3 | Apache-2.0 +** @smithy/core@2.5.6 - https://www.npmjs.com/package/@smithy/core/v/2.5.6 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -19147,7 +18942,7 @@ Apache License ---------------- -** @smithy/credential-provider-imds@3.2.5 - https://www.npmjs.com/package/@smithy/credential-provider-imds/v/3.2.5 | Apache-2.0 +** @smithy/credential-provider-imds@3.2.7 - https://www.npmjs.com/package/@smithy/credential-provider-imds/v/3.2.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -19352,7 +19147,7 @@ Apache License ---------------- -** @smithy/credential-provider-imds@3.2.7 - https://www.npmjs.com/package/@smithy/credential-provider-imds/v/3.2.7 | Apache-2.0 +** @smithy/credential-provider-imds@3.2.8 - https://www.npmjs.com/package/@smithy/credential-provider-imds/v/3.2.8 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -19557,7 +19352,7 @@ Apache License ---------------- -** @smithy/eventstream-codec@3.1.7 - https://www.npmjs.com/package/@smithy/eventstream-codec/v/3.1.7 | Apache-2.0 +** @smithy/eventstream-codec@3.1.10 - https://www.npmjs.com/package/@smithy/eventstream-codec/v/3.1.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -20175,7 +19970,7 @@ Apache License ---------------- -** @smithy/eventstream-serde-config-resolver@3.0.8 - https://www.npmjs.com/package/@smithy/eventstream-serde-config-resolver/v/3.0.8 | Apache-2.0 +** @smithy/eventstream-serde-config-resolver@3.0.11 - https://www.npmjs.com/package/@smithy/eventstream-serde-config-resolver/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -20381,7 +20176,7 @@ Apache License ---------------- -** @smithy/eventstream-serde-node@3.0.10 - https://www.npmjs.com/package/@smithy/eventstream-serde-node/v/3.0.10 | Apache-2.0 +** @smithy/eventstream-serde-node@3.0.12 - https://www.npmjs.com/package/@smithy/eventstream-serde-node/v/3.0.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -20587,7 +20382,7 @@ Apache License ---------------- -** @smithy/eventstream-serde-node@3.0.12 - https://www.npmjs.com/package/@smithy/eventstream-serde-node/v/3.0.12 | Apache-2.0 +** @smithy/eventstream-serde-node@3.0.13 - https://www.npmjs.com/package/@smithy/eventstream-serde-node/v/3.0.13 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -20793,7 +20588,7 @@ Apache License ---------------- -** @smithy/eventstream-serde-universal@3.0.10 - https://www.npmjs.com/package/@smithy/eventstream-serde-universal/v/3.0.10 | Apache-2.0 +** @smithy/eventstream-serde-universal@3.0.12 - https://www.npmjs.com/package/@smithy/eventstream-serde-universal/v/3.0.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -20999,7 +20794,7 @@ Apache License ---------------- -** @smithy/eventstream-serde-universal@3.0.12 - https://www.npmjs.com/package/@smithy/eventstream-serde-universal/v/3.0.12 | Apache-2.0 +** @smithy/eventstream-serde-universal@3.0.13 - https://www.npmjs.com/package/@smithy/eventstream-serde-universal/v/3.0.13 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -21205,7 +21000,7 @@ Apache License ---------------- -** @smithy/fetch-http-handler@4.0.0 - https://www.npmjs.com/package/@smithy/fetch-http-handler/v/4.0.0 | Apache-2.0 +** @smithy/fetch-http-handler@4.1.1 - https://www.npmjs.com/package/@smithy/fetch-http-handler/v/4.1.1 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -21410,7 +21205,7 @@ Apache License ---------------- -** @smithy/fetch-http-handler@4.1.1 - https://www.npmjs.com/package/@smithy/fetch-http-handler/v/4.1.1 | Apache-2.0 +** @smithy/fetch-http-handler@4.1.2 - https://www.npmjs.com/package/@smithy/fetch-http-handler/v/4.1.2 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -21820,7 +21615,7 @@ Apache License ---------------- -** @smithy/hash-node@3.0.8 - https://www.npmjs.com/package/@smithy/hash-node/v/3.0.8 | Apache-2.0 +** @smithy/hash-node@3.0.11 - https://www.npmjs.com/package/@smithy/hash-node/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -22025,7 +21820,7 @@ Apache License ---------------- -** @smithy/hash-stream-node@3.1.7 - https://www.npmjs.com/package/@smithy/hash-stream-node/v/3.1.7 | Apache-2.0 +** @smithy/hash-stream-node@3.1.10 - https://www.npmjs.com/package/@smithy/hash-stream-node/v/3.1.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -22845,7 +22640,7 @@ Apache License ---------------- -** @smithy/middleware-content-length@3.0.10 - https://www.npmjs.com/package/@smithy/middleware-content-length/v/3.0.10 | Apache-2.0 +** @smithy/middleware-content-length@3.0.12 - https://www.npmjs.com/package/@smithy/middleware-content-length/v/3.0.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -23050,7 +22845,7 @@ Apache License ---------------- -** @smithy/middleware-content-length@3.0.12 - https://www.npmjs.com/package/@smithy/middleware-content-length/v/3.0.12 | Apache-2.0 +** @smithy/middleware-content-length@3.0.13 - https://www.npmjs.com/package/@smithy/middleware-content-length/v/3.0.13 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -23460,7 +23255,7 @@ Apache License ---------------- -** @smithy/middleware-endpoint@3.2.1 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/3.2.1 | Apache-2.0 +** @smithy/middleware-endpoint@3.2.3 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/3.2.3 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -23665,7 +23460,7 @@ Apache License ---------------- -** @smithy/middleware-endpoint@3.2.3 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/3.2.3 | Apache-2.0 +** @smithy/middleware-endpoint@3.2.7 - https://www.npmjs.com/package/@smithy/middleware-endpoint/v/3.2.7 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -23870,7 +23665,7 @@ Apache License ---------------- -** @smithy/middleware-retry@3.0.25 - https://www.npmjs.com/package/@smithy/middleware-retry/v/3.0.25 | Apache-2.0 +** @smithy/middleware-retry@3.0.27 - https://www.npmjs.com/package/@smithy/middleware-retry/v/3.0.27 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -24076,7 +23871,7 @@ Apache License ---------------- -** @smithy/middleware-retry@3.0.27 - https://www.npmjs.com/package/@smithy/middleware-retry/v/3.0.27 | Apache-2.0 +** @smithy/middleware-retry@3.0.32 - https://www.npmjs.com/package/@smithy/middleware-retry/v/3.0.32 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -24486,6 +24281,212 @@ Apache License limitations under the License. +---------------- + +** @smithy/middleware-serde@3.0.11 - https://www.npmjs.com/package/@smithy/middleware-serde/v/3.0.11 | 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. + + ---------------- ** @smithy/middleware-serde@3.0.8 - https://www.npmjs.com/package/@smithy/middleware-serde/v/3.0.8 | Apache-2.0 @@ -24899,7 +24900,7 @@ Apache License ---------------- -** @smithy/middleware-stack@3.0.8 - https://www.npmjs.com/package/@smithy/middleware-stack/v/3.0.8 | Apache-2.0 +** @smithy/middleware-stack@3.0.11 - https://www.npmjs.com/package/@smithy/middleware-stack/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25309,7 +25310,7 @@ Apache License ---------------- -** @smithy/node-config-provider@3.1.9 - https://www.npmjs.com/package/@smithy/node-config-provider/v/3.1.9 | Apache-2.0 +** @smithy/node-config-provider@3.1.12 - https://www.npmjs.com/package/@smithy/node-config-provider/v/3.1.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25514,7 +25515,7 @@ Apache License ---------------- -** @smithy/node-http-handler@3.2.5 - https://www.npmjs.com/package/@smithy/node-http-handler/v/3.2.5 | Apache-2.0 +** @smithy/node-config-provider@3.1.9 - https://www.npmjs.com/package/@smithy/node-config-provider/v/3.1.9 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25703,7 +25704,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. @@ -25924,7 +25925,7 @@ Apache License ---------------- -** @smithy/property-provider@3.1.10 - https://www.npmjs.com/package/@smithy/property-provider/v/3.1.10 | Apache-2.0 +** @smithy/node-http-handler@3.3.3 - https://www.npmjs.com/package/@smithy/node-http-handler/v/3.3.3 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -26129,7 +26130,7 @@ Apache License ---------------- -** @smithy/property-provider@3.1.8 - https://www.npmjs.com/package/@smithy/property-provider/v/3.1.8 | Apache-2.0 +** @smithy/property-provider@3.1.10 - https://www.npmjs.com/package/@smithy/property-provider/v/3.1.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -26334,8 +26335,8 @@ Apache License ---------------- -** @smithy/protocol-http@4.1.5 - https://www.npmjs.com/package/@smithy/protocol-http/v/4.1.5 | Apache-2.0 - Apache License +** @smithy/property-provider@3.1.11 - https://www.npmjs.com/package/@smithy/property-provider/v/3.1.11 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -26523,7 +26524,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. @@ -26537,6 +26538,210 @@ Apache License See the License for the specific language governing permissions and limitations under the License. +---------------- + +** @smithy/property-provider@3.1.8 - https://www.npmjs.com/package/@smithy/property-provider/v/3.1.8 | 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. ---------------- @@ -26746,7 +26951,7 @@ Apache License ---------------- -** @smithy/querystring-builder@3.0.10 - https://www.npmjs.com/package/@smithy/querystring-builder/v/3.0.10 | Apache-2.0 +** @smithy/protocol-http@4.1.8 - https://www.npmjs.com/package/@smithy/protocol-http/v/4.1.8 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -26935,7 +27140,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. @@ -26952,7 +27157,7 @@ Apache License ---------------- -** @smithy/querystring-builder@3.0.8 - https://www.npmjs.com/package/@smithy/querystring-builder/v/3.0.8 | Apache-2.0 +** @smithy/querystring-builder@3.0.10 - https://www.npmjs.com/package/@smithy/querystring-builder/v/3.0.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -27158,7 +27363,7 @@ Apache License ---------------- -** @smithy/querystring-parser@3.0.10 - https://www.npmjs.com/package/@smithy/querystring-parser/v/3.0.10 | Apache-2.0 +** @smithy/querystring-builder@3.0.11 - https://www.npmjs.com/package/@smithy/querystring-builder/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -27364,7 +27569,7 @@ Apache License ---------------- -** @smithy/querystring-parser@3.0.8 - https://www.npmjs.com/package/@smithy/querystring-parser/v/3.0.8 | Apache-2.0 +** @smithy/querystring-parser@3.0.10 - https://www.npmjs.com/package/@smithy/querystring-parser/v/3.0.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -27570,7 +27775,7 @@ Apache License ---------------- -** @smithy/service-error-classification@3.0.10 - https://www.npmjs.com/package/@smithy/service-error-classification/v/3.0.10 | Apache-2.0 +** @smithy/querystring-parser@3.0.11 - https://www.npmjs.com/package/@smithy/querystring-parser/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -27776,7 +27981,7 @@ Apache License ---------------- -** @smithy/service-error-classification@3.0.8 - https://www.npmjs.com/package/@smithy/service-error-classification/v/3.0.8 | Apache-2.0 +** @smithy/querystring-parser@3.0.8 - https://www.npmjs.com/package/@smithy/querystring-parser/v/3.0.8 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -27982,8 +28187,8 @@ Apache License ---------------- -** @smithy/shared-ini-file-loader@3.1.11 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.11 | Apache-2.0 -Apache License +** @smithy/service-error-classification@3.0.10 - https://www.npmjs.com/package/@smithy/service-error-classification/v/3.0.10 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -28185,10 +28390,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/shared-ini-file-loader@3.1.8 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.8 | Apache-2.0 -Apache License +** @smithy/service-error-classification@3.0.11 - https://www.npmjs.com/package/@smithy/service-error-classification/v/3.0.11 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -28390,10 +28596,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/shared-ini-file-loader@3.1.9 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.9 | Apache-2.0 -Apache License +** @smithy/service-error-classification@3.0.8 - https://www.npmjs.com/package/@smithy/service-error-classification/v/3.0.8 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -28595,9 +28802,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/signature-v4@4.2.1 - https://www.npmjs.com/package/@smithy/signature-v4/v/4.2.1 | Apache-2.0 +** @smithy/shared-ini-file-loader@3.1.11 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -28802,7 +29010,7 @@ Apache License ---------------- -** @smithy/signature-v4@4.2.3 - https://www.npmjs.com/package/@smithy/signature-v4/v/4.2.3 | Apache-2.0 +** @smithy/shared-ini-file-loader@3.1.12 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.12 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -29007,8 +29215,8 @@ Apache License ---------------- -** @smithy/smithy-client@3.4.2 - https://www.npmjs.com/package/@smithy/smithy-client/v/3.4.2 | Apache-2.0 - Apache License +** @smithy/shared-ini-file-loader@3.1.8 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.8 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -29196,7 +29404,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. @@ -29210,11 +29418,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @smithy/smithy-client@3.4.4 - https://www.npmjs.com/package/@smithy/smithy-client/v/3.4.4 | Apache-2.0 - Apache License +** @smithy/shared-ini-file-loader@3.1.9 - https://www.npmjs.com/package/@smithy/shared-ini-file-loader/v/3.1.9 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -29402,7 +29609,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. @@ -29416,11 +29623,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @smithy/types@3.5.0 - https://www.npmjs.com/package/@smithy/types/v/3.5.0 | Apache-2.0 - Apache License +** @smithy/signature-v4@4.2.3 - https://www.npmjs.com/package/@smithy/signature-v4/v/4.2.3 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -29608,7 +29814,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. @@ -29622,11 +29828,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @smithy/url-parser@3.0.10 - https://www.npmjs.com/package/@smithy/url-parser/v/3.0.10 | Apache-2.0 - Apache License +** @smithy/signature-v4@4.2.4 - https://www.npmjs.com/package/@smithy/signature-v4/v/4.2.4 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -29828,10 +30033,9 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - ---------------- -** @smithy/url-parser@3.0.8 - https://www.npmjs.com/package/@smithy/url-parser/v/3.0.8 | Apache-2.0 +** @smithy/smithy-client@3.4.4 - https://www.npmjs.com/package/@smithy/smithy-client/v/3.4.4 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -30020,7 +30224,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. @@ -30037,8 +30241,8 @@ Apache License ---------------- -** @smithy/util-base64@3.0.0 - https://www.npmjs.com/package/@smithy/util-base64/v/3.0.0 | Apache-2.0 -Apache License +** @smithy/smithy-client@3.5.2 - https://www.npmjs.com/package/@smithy/smithy-client/v/3.5.2 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -30226,7 +30430,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. @@ -30240,10 +30444,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/util-body-length-node@3.0.0 - https://www.npmjs.com/package/@smithy/util-body-length-node/v/3.0.0 | Apache-2.0 -Apache License +** @smithy/types@3.5.0 - https://www.npmjs.com/package/@smithy/types/v/3.5.0 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -30431,7 +30636,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. @@ -30445,10 +30650,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/util-buffer-from@2.2.0 - https://www.npmjs.com/package/@smithy/util-buffer-from/v/2.2.0 | Apache-2.0 -Apache License +** @smithy/types@3.7.2 - https://www.npmjs.com/package/@smithy/types/v/3.7.2 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -30636,7 +30842,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. @@ -30650,10 +30856,11 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/util-buffer-from@3.0.0 - https://www.npmjs.com/package/@smithy/util-buffer-from/v/3.0.0 | Apache-2.0 -Apache License +** @smithy/url-parser@3.0.10 - https://www.npmjs.com/package/@smithy/url-parser/v/3.0.10 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -30855,214 +31062,10 @@ Apache License See the License for the specific language governing permissions and limitations under the License. ----------------- - -** @smithy/util-config-provider@3.0.0 - https://www.npmjs.com/package/@smithy/util-config-provider/v/3.0.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 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. ---------------- -** @smithy/util-defaults-mode-node@3.0.25 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/3.0.25 | Apache-2.0 +** @smithy/url-parser@3.0.11 - https://www.npmjs.com/package/@smithy/url-parser/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -31268,7 +31271,7 @@ Apache License ---------------- -** @smithy/util-defaults-mode-node@3.0.27 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/3.0.27 | Apache-2.0 +** @smithy/url-parser@3.0.8 - https://www.npmjs.com/package/@smithy/url-parser/v/3.0.8 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -31474,7 +31477,7 @@ Apache License ---------------- -** @smithy/util-endpoints@2.1.4 - https://www.npmjs.com/package/@smithy/util-endpoints/v/2.1.4 | Apache-2.0 +** @smithy/util-base64@3.0.0 - https://www.npmjs.com/package/@smithy/util-base64/v/3.0.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -31663,7 +31666,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 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. @@ -31679,7 +31682,7 @@ Apache License ---------------- -** @smithy/util-endpoints@2.1.6 - https://www.npmjs.com/package/@smithy/util-endpoints/v/2.1.6 | Apache-2.0 +** @smithy/util-body-length-node@3.0.0 - https://www.npmjs.com/package/@smithy/util-body-length-node/v/3.0.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -31868,7 +31871,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 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. @@ -31884,7 +31887,7 @@ Apache License ---------------- -** @smithy/util-hex-encoding@3.0.0 - https://www.npmjs.com/package/@smithy/util-hex-encoding/v/3.0.0 | Apache-2.0 +** @smithy/util-buffer-from@2.2.0 - https://www.npmjs.com/package/@smithy/util-buffer-from/v/2.2.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -32089,7 +32092,7 @@ Apache License ---------------- -** @smithy/util-middleware@3.0.10 - https://www.npmjs.com/package/@smithy/util-middleware/v/3.0.10 | Apache-2.0 +** @smithy/util-buffer-from@3.0.0 - https://www.npmjs.com/package/@smithy/util-buffer-from/v/3.0.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -32278,7 +32281,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 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. @@ -32294,7 +32297,7 @@ Apache License ---------------- -** @smithy/util-middleware@3.0.8 - https://www.npmjs.com/package/@smithy/util-middleware/v/3.0.8 | Apache-2.0 +** @smithy/util-config-provider@3.0.0 - https://www.npmjs.com/package/@smithy/util-config-provider/v/3.0.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -32483,7 +32486,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 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. @@ -32499,8 +32502,8 @@ Apache License ---------------- -** @smithy/util-retry@3.0.10 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.10 | Apache-2.0 -Apache License +** @smithy/util-defaults-mode-node@3.0.27 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/3.0.27 | Apache-2.0 + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -32688,7 +32691,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 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. @@ -32702,10 +32705,1242 @@ Apache License See the License for the specific language governing permissions and limitations under the License. + ---------------- -** @smithy/util-retry@3.0.7 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.7 | Apache-2.0 -Apache License +** @smithy/util-defaults-mode-node@3.0.32 - https://www.npmjs.com/package/@smithy/util-defaults-mode-node/v/3.0.32 | 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. + + +---------------- + +** @smithy/util-endpoints@2.1.6 - https://www.npmjs.com/package/@smithy/util-endpoints/v/2.1.6 | 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 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. + +---------------- + +** @smithy/util-endpoints@2.1.7 - https://www.npmjs.com/package/@smithy/util-endpoints/v/2.1.7 | 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 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. + +---------------- + +** @smithy/util-hex-encoding@3.0.0 - https://www.npmjs.com/package/@smithy/util-hex-encoding/v/3.0.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. + +---------------- + +** @smithy/util-middleware@3.0.10 - https://www.npmjs.com/package/@smithy/util-middleware/v/3.0.10 | 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 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. + +---------------- + +** @smithy/util-middleware@3.0.11 - https://www.npmjs.com/package/@smithy/util-middleware/v/3.0.11 | 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 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. + +---------------- + +** @smithy/util-middleware@3.0.8 - https://www.npmjs.com/package/@smithy/util-middleware/v/3.0.8 | Apache-2.0 +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -32909,7 +34144,7 @@ Apache License ---------------- -** @smithy/util-retry@3.0.8 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.8 | Apache-2.0 +** @smithy/util-retry@3.0.10 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.10 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -33114,7 +34349,7 @@ Apache License ---------------- -** @smithy/util-stream@3.2.1 - https://www.npmjs.com/package/@smithy/util-stream/v/3.2.1 | Apache-2.0 +** @smithy/util-retry@3.0.11 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.11 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -33303,7 +34538,212 @@ 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 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. + +---------------- + +** @smithy/util-retry@3.0.7 - https://www.npmjs.com/package/@smithy/util-retry/v/3.0.7 | 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 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. @@ -33524,6 +34964,211 @@ Apache License ---------------- +** @smithy/util-stream@3.3.3 - https://www.npmjs.com/package/@smithy/util-stream/v/3.3.3 | 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. + +---------------- + ** @smithy/util-uri-escape@3.0.0 - https://www.npmjs.com/package/@smithy/util-uri-escape/v/3.0.0 | Apache-2.0 Apache License Version 2.0, January 2004 @@ -34139,7 +35784,7 @@ Apache License ---------------- -** @smithy/util-waiter@3.1.7 - https://www.npmjs.com/package/@smithy/util-waiter/v/3.1.7 | Apache-2.0 +** @smithy/util-waiter@3.1.9 - https://www.npmjs.com/package/@smithy/util-waiter/v/3.1.9 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -34344,7 +35989,7 @@ Apache License ---------------- -** @smithy/util-waiter@3.1.9 - https://www.npmjs.com/package/@smithy/util-waiter/v/3.1.9 | Apache-2.0 +** @smithy/util-waiter@3.2.0 - https://www.npmjs.com/package/@smithy/util-waiter/v/3.2.0 | Apache-2.0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ diff --git a/packages/@aws-cdk/example-construct-library/lib/example-resource.ts b/packages/@aws-cdk/example-construct-library/lib/example-resource.ts index 9715ef09581e9..358c986e0fa08 100644 --- a/packages/@aws-cdk/example-construct-library/lib/example-resource.ts +++ b/packages/@aws-cdk/example-construct-library/lib/example-resource.ts @@ -15,6 +15,7 @@ import { Construct } from 'constructs'; // for files that are part of this package or part of core, we do import individual classes or functions import { CfnWaitCondition, CfnWaitConditionHandle, Fn, IResource, RemovalPolicy, Resource, Stack, Token } from 'aws-cdk-lib/core'; import { exampleResourceArnComponents } from './private/example-resource-common'; +import { MetadataType } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface that represents the ExampleResource resource. @@ -402,6 +403,9 @@ export class ExampleResource extends ExampleResourceBase { physicalName: props.waitConditionHandleName, }); + // Add construct props to metadata for analytics collection purposes + this.node.addMetadata(MetadataType.CONSTRUCT, props); + // We often add validations for properties, // so that customers receive feedback about incorrect properties // sooner than a CloudFormation deployment. diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts b/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts index d4b42fc6d3b0e..5f7b934d73c51 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts @@ -6,6 +6,7 @@ import { IStage } from './stage'; import { QuotaSettings, ThrottleSettings, UsagePlan, UsagePlanPerApiStage } from './usage-plan'; import * as iam from '../../aws-iam'; import { ArnFormat, IResource as IResourceBase, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * API keys are alphanumeric string values that you distribute to @@ -170,6 +171,7 @@ export class ApiKey extends ApiKeyBase { super(scope, id, { physicalName: props.apiKeyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnApiKey(this, 'Resource', { customerId: props.customerId, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts index 46b4348dcddb2..e4d983a6a0a11 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IdentitySource } from './identity-source'; import * as cognito from '../../../aws-cognito'; import { Duration, FeatureFlags, Lazy, Names, Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { APIGATEWAY_AUTHORIZER_CHANGE_DEPLOYMENT_LOGICAL_ID } from '../../../cx-api'; import { CfnAuthorizer, CfnAuthorizerProps } from '../apigateway.generated'; import { Authorizer, IAuthorizer } from '../authorizer'; @@ -71,6 +72,7 @@ export class CognitoUserPoolsAuthorizer extends Authorizer implements IAuthorize constructor(scope: Construct, id: string, props: CognitoUserPoolsAuthorizerProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const restApiId = this.lazyRestApiId(); diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts index df124eb306291..946d07048ec05 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts @@ -3,6 +3,7 @@ import { IdentitySource } from './identity-source'; import * as iam from '../../../aws-iam'; import * as lambda from '../../../aws-lambda'; import { Arn, ArnFormat, Duration, FeatureFlags, Lazy, Names, Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { APIGATEWAY_AUTHORIZER_CHANGE_DEPLOYMENT_LOGICAL_ID } from '../../../cx-api'; import { CfnAuthorizer, CfnAuthorizerProps } from '../apigateway.generated'; import { Authorizer, IAuthorizer } from '../authorizer'; @@ -208,6 +209,7 @@ export class TokenAuthorizer extends LambdaAuthorizer { constructor(scope: Construct, id: string, props: TokenAuthorizerProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const restApiId = this.lazyRestApiId(); diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/base-path-mapping.ts b/packages/aws-cdk-lib/aws-apigateway/lib/base-path-mapping.ts index 005acd07c24a8..0a881e7296204 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/base-path-mapping.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/base-path-mapping.ts @@ -4,6 +4,7 @@ import { IDomainName } from './domain-name'; import { IRestApi, RestApiBase } from './restapi'; import { Stage } from './stage'; import { Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface BasePathMappingOptions { /** @@ -54,6 +55,7 @@ export interface BasePathMappingProps extends BasePathMappingOptions { export class BasePathMapping extends Resource { constructor(scope: Construct, id: string, props: BasePathMappingProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.basePath && !Token.isUnresolved(props.basePath)) { if (props.basePath.startsWith('/') || props.basePath.endsWith('/')) { diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts b/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts index c245f82769110..7c6c01b1d4448 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts @@ -4,6 +4,7 @@ import { Method } from './method'; import { IRestApi, RestApi, SpecRestApi, RestApiBase } from './restapi'; import { Lazy, RemovalPolicy, Resource, CfnResource } from '../../core'; import { md5hash } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface DeploymentProps { /** @@ -80,6 +81,7 @@ export class Deployment extends Resource { constructor(scope: Construct, id: string, props: DeploymentProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.resource = new LatestDeploymentResource(this, 'Resource', { description: props.description, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts b/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts index 4f4ae930983b1..933e9718aec43 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts @@ -7,6 +7,7 @@ import * as apigwv2 from '../../aws-apigatewayv2'; import * as acm from '../../aws-certificatemanager'; import { IBucket } from '../../aws-s3'; import { IResource, Names, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for creating an api mapping @@ -138,6 +139,7 @@ export class DomainName extends Resource implements IDomainName { constructor(scope: Construct, id: string, props: DomainNameProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.endpointType = props.endpointType || EndpointType.REGIONAL; const edge = this.endpointType === EndpointType.EDGE; diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/gateway-response.ts b/packages/aws-cdk-lib/aws-apigateway/lib/gateway-response.ts index 60d5604b08f73..32749fef02ad2 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/gateway-response.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/gateway-response.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnGatewayResponse, CfnGatewayResponseProps } from './apigateway.generated'; import { IRestApi } from './restapi'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents gateway response resource. @@ -57,6 +58,7 @@ export interface GatewayResponseOptions { export class GatewayResponse extends Resource implements IGatewayResponse { constructor(scope: Construct, id: string, props: GatewayResponseProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const gatewayResponseProps: CfnGatewayResponseProps = { restApiId: props.restApi.restApiId, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts b/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts index 6dbea4c17a12f..7794a3c611deb 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts @@ -5,6 +5,7 @@ import { Method } from './method'; import { ProxyResource, Resource } from './resource'; import { RestApi, RestApiProps } from './restapi'; import * as lambda from '../../aws-lambda'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface LambdaRestApiProps extends RestApiProps { /** @@ -60,6 +61,7 @@ export class LambdaRestApi extends RestApi { ...props.options, // deprecated, but we still support ...props, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.proxy !== false) { this.root.addProxy(); diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/method.ts b/packages/aws-cdk-lib/aws-apigateway/lib/method.ts index 8f282d253dbcc..a0060f6c2e9e5 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/method.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/method.ts @@ -14,6 +14,7 @@ import { validateHttpMethod } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { Annotations, ArnFormat, FeatureFlags, Lazy, Names, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { APIGATEWAY_REQUEST_VALIDATOR_UNIQUE_ID } from '../../cx-api'; export interface MethodOptions { @@ -177,6 +178,7 @@ export class Method extends Resource { constructor(scope: Construct, id: string, props: MethodProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.resource = props.resource; this.api = props.resource.api; diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/model.ts b/packages/aws-cdk-lib/aws-apigateway/lib/model.ts index 23da756a5bafd..6ae1c625335e3 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/model.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/model.ts @@ -4,6 +4,7 @@ import * as jsonSchema from './json-schema'; import { IRestApi, RestApi } from './restapi'; import * as util from './util'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IModel { /** @@ -164,6 +165,7 @@ export class Model extends Resource implements IModel { super(scope, id, { physicalName: props.modelName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const modelProps: CfnModelProps = { name: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/requestvalidator.ts b/packages/aws-cdk-lib/aws-apigateway/lib/requestvalidator.ts index 79a07eb1cc1f3..89904d54a5e55 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/requestvalidator.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/requestvalidator.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnRequestValidator, CfnRequestValidatorProps } from './apigateway.generated'; import { IRestApi, RestApi } from './restapi'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IRequestValidator extends IResource { /** @@ -68,6 +69,7 @@ export class RequestValidator extends Resource implements IRequestValidator { super(scope, id, { physicalName: props.requestValidatorName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const validatorProps: CfnRequestValidatorProps = { name: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts b/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts index 16f6af41840ba..5e127b292b625 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts @@ -6,6 +6,7 @@ import { MockIntegration } from './integrations'; import { Method, MethodOptions, AuthorizationType } from './method'; import { IRestApi, RestApi } from './restapi'; import { IResource as IResourceBase, Resource as ResourceConstruct } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IResource extends IResourceBase { /** @@ -438,6 +439,7 @@ export class Resource extends ResourceBase { constructor(scope: Construct, id: string, props: ResourceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); validateResourcePathPart(props.pathPart); diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts b/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts index 32dca38262529..23966899cec22 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts @@ -18,6 +18,7 @@ import * as cloudwatch from '../../aws-cloudwatch'; import { IVpcEndpoint } from '../../aws-ec2'; import * as iam from '../../aws-iam'; import { ArnFormat, CfnOutput, IResource as IResourceBase, Resource, Stack, Token, FeatureFlags, RemovalPolicy, Size } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { APIGATEWAY_DISABLE_CLOUDWATCH_ROLE } from '../../cx-api'; const RESTAPI_SYMBOL = Symbol.for('@aws-cdk/aws-apigateway.RestApiBase'); @@ -700,6 +701,7 @@ export class SpecRestApi extends RestApiBase { constructor(scope: Construct, id: string, props: SpecRestApiProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const apiDefConfig = props.apiDefinition.bind(this); const resource = new CfnRestApi(this, 'Resource', { name: this.restApiName, diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts b/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts index 266ea23df121d..53e0f3177e22a 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts @@ -8,6 +8,7 @@ import { IRestApi, RestApiBase } from './restapi'; import { parseMethodOptionsPath } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import { ArnFormat, Duration, IResource, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an APIGateway Stage. @@ -375,6 +376,7 @@ export class Stage extends StageBase { constructor(scope: Construct, id: string, props: StageProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.enableCacheCluster = props.cacheClusterEnabled; diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts b/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts index 3175d852920d8..c85ac94a0b6a4 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts @@ -4,6 +4,7 @@ import { RequestContext } from './integrations'; import { StepFunctionsIntegration } from './integrations/stepfunctions'; import * as iam from '../../aws-iam'; import * as sfn from '../../aws-stepfunctions'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for StepFunctionsRestApi @@ -129,6 +130,7 @@ export class StepFunctionsRestApi extends RestApi { }); super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.root.addMethod('ANY', stepfunctionsIntegration); } diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/usage-plan.ts b/packages/aws-cdk-lib/aws-apigateway/lib/usage-plan.ts index 5a0ef81f4ab6b..45ea10b02657d 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/usage-plan.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/usage-plan.ts @@ -6,6 +6,7 @@ import { IRestApi } from './restapi'; import { Stage } from './stage'; import { validateDouble, validateInteger } from './util'; import { FeatureFlags, IResource, Lazy, Names, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { APIGATEWAY_USAGEPLANKEY_ORDERINSENSITIVE_ID } from '../../cx-api'; /** @@ -241,6 +242,7 @@ export class UsagePlan extends UsagePlanBase { constructor(scope: Construct, id: string, props: UsagePlanProps = { }) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let resource: CfnUsagePlan; resource = new CfnUsagePlan(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/vpc-link.ts b/packages/aws-cdk-lib/aws-apigateway/lib/vpc-link.ts index f9af63078f011..1168a17fbeea0 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/vpc-link.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/vpc-link.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnVpcLink } from './apigateway.generated'; import * as elbv2 from '../../aws-elasticloadbalancingv2'; import { IResource, Lazy, Names, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an API Gateway VpcLink @@ -68,6 +69,7 @@ export class VpcLink extends Resource implements IVpcLink { physicalName: props.vpcLinkName || Lazy.string({ produce: () => Names.nodeUniqueId(this.node) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const cfnResource = new CfnVpcLink(this, 'Resource', { name: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/api-mapping.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/api-mapping.ts index 05d9cca6c4bc8..c29906f7ce14d 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/api-mapping.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/api-mapping.ts @@ -4,6 +4,7 @@ import { IDomainName } from './domain-name'; import { IStage } from './stage'; import { CfnApiMapping, CfnApiMappingProps } from '.././index'; import { IResource, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Represents an ApiGatewayV2 ApiMapping resource @@ -88,6 +89,7 @@ export class ApiMapping extends Resource implements IApiMapping { constructor(scope: Construct, id: string, props: ApiMappingProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // defaultStage is present in IHttpStage. // However, importing "http" or "websocket" must import "common", but creating dependencies diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/domain-name.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/domain-name.ts index bdc0bc7d0d549..f832cd99eb268 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/domain-name.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/common/domain-name.ts @@ -3,6 +3,7 @@ import { CfnDomainName, CfnDomainNameProps } from '.././index'; import { ICertificate } from '../../../aws-certificatemanager'; import { IBucket } from '../../../aws-s3'; import { IResource, Lazy, Resource, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * The minimum version of the SSL protocol that you want API Gateway to use for HTTPS connections. @@ -170,6 +171,7 @@ export class DomainName extends Resource implements IDomainName { constructor(scope: Construct, id: string, props: DomainNameProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.domainName === '') { throw new Error('empty string for domainName not allowed'); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts index 7a7dde32667fc..7a18ca5f83c68 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts @@ -7,6 +7,7 @@ import { VpcLink, VpcLinkProps } from './vpc-link'; import { CfnApi, CfnApiProps } from '.././index'; import { Metric, MetricOptions } from '../../../aws-cloudwatch'; import { ArnFormat, Duration, Stack, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IApi } from '../common/api'; import { ApiBase } from '../common/base'; import { DomainMappingOptions } from '../common/stage'; @@ -409,6 +410,7 @@ export class HttpApi extends HttpApiBase { constructor(scope: Construct, id: string, props?: HttpApiProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.httpApiName = props?.apiName ?? id; this.disableExecuteApiEndpoint = props?.disableExecuteApiEndpoint; diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/authorizer.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/authorizer.ts index 0221a11c1dfea..84dd6d7e4f164 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/authorizer.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/authorizer.ts @@ -4,6 +4,7 @@ import { IHttpRoute } from './route'; import { CfnAuthorizer } from '.././index'; import { Duration, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IAuthorizer } from '../common'; /** @@ -157,6 +158,7 @@ export class HttpAuthorizer extends Resource implements IHttpAuthorizer { constructor(scope: Construct, id: string, props: HttpAuthorizerProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let authorizerPayloadFormatVersion = props.payloadFormatVersion; diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts index c7b592c6dd8ca..86a5c4cc34464 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts @@ -4,6 +4,7 @@ import { HttpMethod, IHttpRoute } from './route'; import { CfnIntegration } from '.././index'; import { IRole } from '../../../aws-iam'; import { Aws, Duration, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IIntegration } from '../common'; import { ParameterMapping } from '../parameter-mapping'; @@ -252,6 +253,7 @@ export class HttpIntegration extends Resource implements IHttpIntegration { constructor(scope: Construct, id: string, props: HttpIntegrationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!props.integrationSubtype && !props.integrationUri) { throw new Error('Either `integrationSubtype` or `integrationUri` must be specified.'); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts index 0c82e6597f1e3..7ab5420300063 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts @@ -5,6 +5,7 @@ import { HttpRouteIntegration } from './integration'; import { CfnRoute, CfnRouteProps } from '.././index'; import * as iam from '../../../aws-iam'; import { Aws, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IRoute } from '../common'; /** @@ -182,6 +183,7 @@ export class HttpRoute extends Resource implements IHttpRoute { constructor(scope: Construct, id: string, props: HttpRouteProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.httpApi = props.httpApi; this.path = props.routeKey.path; diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts index 0ec38b893af56..4b6ee8a319a1f 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts @@ -3,6 +3,7 @@ import { IHttpApi } from './api'; import { CfnStage } from '.././index'; import { Metric, MetricOptions } from '../../../aws-cloudwatch'; import { Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { StageOptions, IStage, StageAttributes } from '../common'; import { IApi } from '../common/api'; import { StageBase } from '../common/base'; @@ -162,6 +163,7 @@ export class HttpStage extends HttpStageBase { super(scope, id, { physicalName: props.stageName ? props.stageName : DEFAULT_STAGE_NAME, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnStage(this, 'Resource', { apiId: props.httpApi.apiId, diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/vpc-link.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/vpc-link.ts index 3938920ddedc8..9bfd7b32a3dca 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/vpc-link.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/vpc-link.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnVpcLink } from '.././index'; import * as ec2 from '../../../aws-ec2'; import { IResource, Lazy, Names, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Represents an API Gateway VpcLink @@ -88,6 +89,7 @@ export class VpcLink extends Resource implements IVpcLink { constructor(scope: Construct, id: string, props: VpcLinkProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; const cfnResource = new CfnVpcLink(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts index 195c46812db2a..cc5202b75a8d7 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts @@ -3,6 +3,7 @@ import { WebSocketRoute, WebSocketRouteOptions } from './route'; import { CfnApi } from '.././index'; import { Grant, IGrantable } from '../../../aws-iam'; import { ArnFormat, Stack, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IApi } from '../common/api'; import { ApiBase } from '../common/base'; @@ -135,6 +136,7 @@ export class WebSocketApi extends ApiBase implements IWebSocketApi { constructor(scope: Construct, id: string, props?: WebSocketApiProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.webSocketApiName = props?.apiName ?? id; diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/authorizer.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/authorizer.ts index 52fc6f6ff0cab..38a308f59d676 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/authorizer.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/authorizer.ts @@ -4,6 +4,7 @@ import { IWebSocketRoute } from './route'; import { CfnAuthorizer } from '.././index'; import { Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IAuthorizer } from '../common'; /** @@ -104,6 +105,7 @@ export class WebSocketAuthorizer extends Resource implements IWebSocketAuthorize constructor(scope: Construct, id: string, props: WebSocketAuthorizerProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.type === WebSocketAuthorizerType.LAMBDA && !props.authorizerUri) { throw new Error('authorizerUri is mandatory for Lambda authorizers'); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts index ab2ed9d55817c..05815327449ab 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts @@ -4,6 +4,7 @@ import { IWebSocketRoute } from './route'; import { CfnIntegration } from '.././index'; import { IRole } from '../../../aws-iam'; import { Duration, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IIntegration } from '../common'; /** @@ -170,6 +171,7 @@ export class WebSocketIntegration extends Resource implements IWebSocketIntegrat constructor(scope: Construct, id: string, props: WebSocketIntegrationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.timeout && !props.timeout.isUnresolved() && (props.timeout.toMilliseconds() < 50 || props.timeout.toMilliseconds() > 29000)) { throw new Error('Integration timeout must be between 50 milliseconds and 29 seconds.'); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts index 0114e13c50e0d..88c0269fd5a5a 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts @@ -4,6 +4,7 @@ import { IWebSocketRouteAuthorizer, WebSocketNoneAuthorizer } from './authorizer import { WebSocketRouteIntegration } from './integration'; import { CfnRoute, CfnRouteResponse } from '.././index'; import { Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IRoute } from '../common'; /** @@ -83,6 +84,7 @@ export class WebSocketRoute extends Resource implements IWebSocketRoute { constructor(scope: Construct, id: string, props: WebSocketRouteProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.routeKey != '$connect' && props.authorizer) { throw new Error('You can only set a WebSocket authorizer to a $connect route.'); diff --git a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts index 6332b7532fd17..c1370d3858b03 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts @@ -3,6 +3,7 @@ import { IWebSocketApi } from './api'; import { CfnStage } from '.././index'; import { Grant, IGrantable } from '../../../aws-iam'; import { Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { StageOptions, IApi, IStage, StageAttributes } from '../common'; import { StageBase } from '../common/base'; @@ -82,6 +83,7 @@ export class WebSocketStage extends StageBase implements IWebSocketStage { super(scope, id, { physicalName: props.stageName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.baseApi = props.webSocketApi; this.api = props.webSocketApi; diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/application.ts b/packages/aws-cdk-lib/aws-appconfig/lib/application.ts index b84ef3e131803..79b996467220b 100644 --- a/packages/aws-cdk-lib/aws-appconfig/lib/application.ts +++ b/packages/aws-cdk-lib/aws-appconfig/lib/application.ts @@ -6,6 +6,7 @@ import { Environment, EnvironmentOptions, IEnvironment } from './environment'; import { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible, ExtensibleBase } from './extension'; import * as ecs from '../../aws-ecs'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Defines the platform for the AWS AppConfig Lambda extension. @@ -433,6 +434,7 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.description = props.description; this.name = props.applicationName || cdk.Names.uniqueResourceName(this, { diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts b/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts index bcbe715e14e15..ed59de9027fbb 100644 --- a/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts +++ b/packages/aws-cdk-lib/aws-appconfig/lib/deployment-strategy.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnDeploymentStrategy } from './appconfig.generated'; import { Resource, IResource, Stack, ArnFormat, Names, Duration } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for DeploymentStrategy. @@ -132,6 +133,7 @@ export class DeploymentStrategy extends Resource implements IDeploymentStrategy super(scope, id, { physicalName: props.deploymentStrategyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.deploymentDurationInMinutes = props.rolloutStrategy.deploymentDuration.toMinutes(); this.growthFactor = props.rolloutStrategy.growthFactor; diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts b/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts index 9c3c4318f33ca..dd794499c25c2 100644 --- a/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts +++ b/packages/aws-cdk-lib/aws-appconfig/lib/environment.ts @@ -8,6 +8,7 @@ import { DeletionProtectionCheck } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { Resource, IResource, Stack, ArnFormat, PhysicalName, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Attributes of an existing AWS AppConfig environment to import it. @@ -303,6 +304,7 @@ export class Environment extends EnvironmentBase { super(scope, id, { physicalName: props.environmentName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.name = props.environmentName || Names.uniqueResourceName(this, { maxLength: 64, diff --git a/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts b/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts index f0b63a17527dc..11a6b44e548ac 100644 --- a/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts +++ b/packages/aws-cdk-lib/aws-appconfig/lib/extension.ts @@ -7,6 +7,7 @@ import * as lambda from '../../aws-lambda'; import * as sns from '../../aws-sns'; import * as sqs from '../../aws-sqs'; import { ArnFormat, IResource, Names, PhysicalName, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Defines Extension action points. @@ -496,6 +497,7 @@ export class Extension extends Resource implements IExtension { super(scope, id, { physicalName: props.extensionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.actions = props.actions; this.name = props.extensionName || Names.uniqueResourceName(this, { diff --git a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts index fe6fe8f31443e..aa41a0835a7ea 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts @@ -5,6 +5,7 @@ import { BasicStepScalingPolicyProps, StepScalingPolicy } from './step-scaling-p import { BasicTargetTrackingScalingPolicyProps, TargetTrackingScalingPolicy } from './target-tracking-scaling-policy'; import * as iam from '../../aws-iam'; import { IResource, Lazy, Resource, TimeZone, withResolved } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IScalableTarget extends IResource { /** @@ -98,6 +99,7 @@ export class ScalableTarget extends Resource implements IScalableTarget { constructor(scope: Construct, id: string, props: ScalableTargetProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); withResolved(props.maxCapacity, max => { if (max < 0) { diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/gateway-route.ts b/packages/aws-cdk-lib/aws-appmesh/lib/gateway-route.ts index 30d7c9a8457c0..52f8b66bd682c 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/gateway-route.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/gateway-route.ts @@ -4,6 +4,7 @@ import { GatewayRouteSpec } from './gateway-route-spec'; import { renderMeshOwner } from './private/utils'; import { IVirtualGateway, VirtualGateway } from './virtual-gateway'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface for which all GatewayRoute based classes MUST implement @@ -107,6 +108,7 @@ export class GatewayRoute extends cdk.Resource implements IGatewayRoute { super(scope, id, { physicalName: props.gatewayRouteName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.virtualGateway = props.virtualGateway; const routeSpecConfig = props.routeSpec.bind(this); diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/mesh.ts b/packages/aws-cdk-lib/aws-appmesh/lib/mesh.ts index 04a3f699bc98e..1f4e6e055d56f 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/mesh.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/mesh.ts @@ -5,6 +5,7 @@ import { VirtualGateway, VirtualGatewayBaseProps } from './virtual-gateway'; import { VirtualNode, VirtualNodeBaseProps } from './virtual-node'; import { VirtualRouter, VirtualRouterBaseProps } from './virtual-router'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A utility enum defined for the egressFilter type property, the default of DROP_ALL, @@ -188,6 +189,7 @@ export class Mesh extends MeshBase { super(scope, id, { physicalName: props.meshName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const mesh = new CfnMesh(this, 'Resource', { meshName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/route.ts b/packages/aws-cdk-lib/aws-appmesh/lib/route.ts index 0b42cb9715fd7..535bb84366391 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/route.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/route.ts @@ -5,6 +5,7 @@ import { renderMeshOwner } from './private/utils'; import { RouteSpec } from './route-spec'; import { IVirtualRouter, VirtualRouter } from './virtual-router'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface for which all Route based classes MUST implement @@ -113,6 +114,7 @@ export class Route extends cdk.Resource implements IRoute { super(scope, id, { physicalName: props.routeName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.virtualRouter = props.virtualRouter; diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-gateway.ts b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-gateway.ts index cc81da8e73dfa..a5e70bc21ace0 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-gateway.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-gateway.ts @@ -7,6 +7,7 @@ import { AccessLog, BackendDefaults } from './shared-interfaces'; import { VirtualGatewayListener, VirtualGatewayListenerConfig } from './virtual-gateway-listener'; import * as iam from '../../aws-iam'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface which all Virtual Gateway based classes must implement @@ -177,6 +178,7 @@ export class VirtualGateway extends VirtualGatewayBase { super(scope, id, { physicalName: props.virtualGatewayName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.mesh = props.mesh; diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-node.ts b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-node.ts index 0e6b6f6ddb3d0..312de46db5b2f 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-node.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-node.ts @@ -7,6 +7,7 @@ import { AccessLog, BackendDefaults, Backend } from './shared-interfaces'; import { VirtualNodeListener, VirtualNodeListenerConfig } from './virtual-node-listener'; import * as iam from '../../aws-iam'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface which all VirtualNode based classes must implement @@ -184,6 +185,7 @@ export class VirtualNode extends VirtualNodeBase { super(scope, id, { physicalName: props.virtualNodeName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.mesh = props.mesh; this.serviceDiscoveryConfig = props.serviceDiscovery?.bind(this); diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-router.ts b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-router.ts index 1888276184b41..37281ac5ff5fb 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-router.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-router.ts @@ -5,6 +5,7 @@ import { renderMeshOwner } from './private/utils'; import { Route, RouteBaseProps } from './route'; import { VirtualRouterListener } from './virtual-router-listener'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface which all VirtualRouter based classes MUST implement @@ -144,6 +145,7 @@ export class VirtualRouter extends VirtualRouterBase { super(scope, id, { physicalName: props.virtualRouterName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.mesh = props.mesh; if (props.listeners && props.listeners.length) { diff --git a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-service.ts b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-service.ts index 1c5d3138f96cc..08f5d5ddc5c10 100644 --- a/packages/aws-cdk-lib/aws-appmesh/lib/virtual-service.ts +++ b/packages/aws-cdk-lib/aws-appmesh/lib/virtual-service.ts @@ -5,6 +5,7 @@ import { renderMeshOwner } from './private/utils'; import { IVirtualNode } from './virtual-node'; import { IVirtualRouter } from './virtual-router'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents the interface which all VirtualService based classes MUST implement @@ -105,6 +106,7 @@ export class VirtualService extends cdk.Resource implements IVirtualService { super(scope, id, { physicalName: props.virtualServiceName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const providerConfig = props.virtualServiceProvider.bind(this); this.mesh = providerConfig.mesh; diff --git a/packages/aws-cdk-lib/aws-appsync/lib/appsync-function.ts b/packages/aws-cdk-lib/aws-appsync/lib/appsync-function.ts index c4378622eb142..b77bfcdd0b8aa 100644 --- a/packages/aws-cdk-lib/aws-appsync/lib/appsync-function.ts +++ b/packages/aws-cdk-lib/aws-appsync/lib/appsync-function.ts @@ -6,6 +6,7 @@ import { IGraphqlApi } from './graphqlapi-base'; import { MappingTemplate } from './mapping-template'; import { FunctionRuntime } from './runtime'; import { Resource, IResource, Lazy, Fn } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * the base properties for AppSync Functions @@ -157,6 +158,7 @@ export class AppsyncFunction extends Resource implements IAppsyncFunction { public constructor(scope: Construct, id: string, props: AppsyncFunctionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // If runtime is specified, code must also be if (props.runtime && !props.code) { diff --git a/packages/aws-cdk-lib/aws-appsync/lib/graphqlapi.ts b/packages/aws-cdk-lib/aws-appsync/lib/graphqlapi.ts index 824240274a687..cf2104062c533 100644 --- a/packages/aws-cdk-lib/aws-appsync/lib/graphqlapi.ts +++ b/packages/aws-cdk-lib/aws-appsync/lib/graphqlapi.ts @@ -9,6 +9,7 @@ import { ManagedPolicy, Role, IRole, ServicePrincipal } from '../../aws-iam'; import { IFunction } from '../../aws-lambda'; import { ILogGroup, LogGroup, LogRetention, RetentionDays } from '../../aws-logs'; import { CfnResource, Duration, Expiration, FeatureFlags, IResolvable, Lazy, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -608,6 +609,7 @@ export class GraphqlApi extends GraphqlApiBase { constructor(scope: Construct, id: string, props: GraphqlApiProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const defaultMode = props.authorizationConfig?.defaultAuthorization ?? { authorizationType: AuthorizationType.API_KEY }; diff --git a/packages/aws-cdk-lib/aws-appsync/lib/source-api-association.ts b/packages/aws-cdk-lib/aws-appsync/lib/source-api-association.ts index 0ea7e64998801..ad8fd30f8bb71 100644 --- a/packages/aws-cdk-lib/aws-appsync/lib/source-api-association.ts +++ b/packages/aws-cdk-lib/aws-appsync/lib/source-api-association.ts @@ -3,6 +3,7 @@ import { CfnSourceApiAssociation } from './appsync.generated'; import { IGraphqlApi } from './graphqlapi-base'; import { Effect, IRole, PolicyStatement } from '../../aws-iam'; import { Fn, IResource, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Merge type used to associate the source API @@ -162,6 +163,7 @@ export class SourceApiAssociation extends Resource implements ISourceApiAssociat constructor(scope: Construct, id: string, props: SourceApiAssociationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.mergeType = props.mergeType ?? MergeType.AUTO_MERGE; this.mergedApiExecutionRole = props.mergedApiExecutionRole; diff --git a/packages/aws-cdk-lib/aws-autoscaling/lib/auto-scaling-group.ts b/packages/aws-cdk-lib/aws-autoscaling/lib/auto-scaling-group.ts index a0886cc441cf1..cef186374a7d2 100644 --- a/packages/aws-cdk-lib/aws-autoscaling/lib/auto-scaling-group.ts +++ b/packages/aws-cdk-lib/aws-autoscaling/lib/auto-scaling-group.ts @@ -25,6 +25,7 @@ import { Token, Tokenization, withResolved, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AUTOSCALING_GENERATE_LAUNCH_TEMPLATE } from '../../cx-api'; /** @@ -1337,6 +1338,7 @@ export class AutoScalingGroup extends AutoScalingGroupBase implements super(scope, id, { physicalName: props.autoScalingGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.newInstancesProtectedFromScaleIn = props.newInstancesProtectedFromScaleIn; diff --git a/packages/aws-cdk-lib/aws-autoscaling/lib/lifecycle-hook.ts b/packages/aws-cdk-lib/aws-autoscaling/lib/lifecycle-hook.ts index d2ecb1316fcfd..a09c73e35aed3 100644 --- a/packages/aws-cdk-lib/aws-autoscaling/lib/lifecycle-hook.ts +++ b/packages/aws-cdk-lib/aws-autoscaling/lib/lifecycle-hook.ts @@ -4,6 +4,7 @@ import { CfnLifecycleHook } from './autoscaling.generated'; import { ILifecycleHookTarget } from './lifecycle-hook-target'; import * as iam from '../../aws-iam'; import { Duration, IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Basic properties for a lifecycle hook @@ -112,6 +113,7 @@ export class LifecycleHook extends Resource implements ILifecycleHook { super(scope, id, { physicalName: props.lifecycleHookName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const targetProps = props.notificationTarget ? props.notificationTarget.bind(this, { lifecycleHook: this, role: props.role }) : undefined; diff --git a/packages/aws-cdk-lib/aws-autoscaling/lib/scheduled-action.ts b/packages/aws-cdk-lib/aws-autoscaling/lib/scheduled-action.ts index bbbff662c6c33..8c0142f29c8f1 100644 --- a/packages/aws-cdk-lib/aws-autoscaling/lib/scheduled-action.ts +++ b/packages/aws-cdk-lib/aws-autoscaling/lib/scheduled-action.ts @@ -3,6 +3,7 @@ import { IAutoScalingGroup } from './auto-scaling-group'; import { CfnScheduledAction } from './autoscaling.generated'; import { Schedule } from './schedule'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a scheduled scaling action @@ -99,6 +100,7 @@ export class ScheduledAction extends Resource { constructor(scope: Construct, id: string, props: ScheduledActionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.minCapacity === undefined && props.maxCapacity === undefined && props.desiredCapacity === undefined) { throw new Error('At least one of minCapacity, maxCapacity, or desiredCapacity is required'); diff --git a/packages/aws-cdk-lib/aws-autoscaling/lib/warm-pool.ts b/packages/aws-cdk-lib/aws-autoscaling/lib/warm-pool.ts index 6803f2fc5bf8c..6bae619bcbc0c 100644 --- a/packages/aws-cdk-lib/aws-autoscaling/lib/warm-pool.ts +++ b/packages/aws-cdk-lib/aws-autoscaling/lib/warm-pool.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IAutoScalingGroup } from './auto-scaling-group'; import { CfnWarmPool } from './autoscaling.generated'; import { Lazy, Names, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for a warm pool @@ -59,6 +60,7 @@ export class WarmPool extends Resource { super(scope, id, { physicalName: Lazy.string({ produce: () => Names.uniqueId(this) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.maxGroupPreparedCapacity && props.maxGroupPreparedCapacity < -1) { throw new Error('\'maxGroupPreparedCapacity\' parameter should be greater than or equal to -1'); diff --git a/packages/aws-cdk-lib/aws-backup/lib/plan.ts b/packages/aws-cdk-lib/aws-backup/lib/plan.ts index a7ce167ac92ea..a18d056e1d0ea 100644 --- a/packages/aws-cdk-lib/aws-backup/lib/plan.ts +++ b/packages/aws-cdk-lib/aws-backup/lib/plan.ts @@ -4,6 +4,7 @@ import { BackupPlanCopyActionProps, BackupPlanRule } from './rule'; import { BackupSelection, BackupSelectionOptions } from './selection'; import { BackupVault, IBackupVault } from './vault'; import { IResource, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A backup plan @@ -130,6 +131,7 @@ export class BackupPlan extends Resource implements IBackupPlan { constructor(scope: Construct, id: string, props: BackupPlanProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const plan = new CfnBackupPlan(this, 'Resource', { backupPlan: { diff --git a/packages/aws-cdk-lib/aws-backup/lib/selection.ts b/packages/aws-cdk-lib/aws-backup/lib/selection.ts index 3c1324335efa5..b12bac53b1980 100644 --- a/packages/aws-cdk-lib/aws-backup/lib/selection.ts +++ b/packages/aws-cdk-lib/aws-backup/lib/selection.ts @@ -5,6 +5,7 @@ import { IBackupPlan } from './plan'; import { BackupResource, TagOperation } from './resource'; import * as iam from '../../aws-iam'; import { Lazy, Resource, Aspects, AspectPriority } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for a BackupSelection @@ -92,6 +93,7 @@ export class BackupSelection extends Resource implements iam.IGrantable { constructor(scope: Construct, id: string, props: BackupSelectionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const role = props.role || new iam.Role(this, 'Role', { assumedBy: new iam.ServicePrincipal('backup.amazonaws.com'), diff --git a/packages/aws-cdk-lib/aws-backup/lib/vault.ts b/packages/aws-cdk-lib/aws-backup/lib/vault.ts index 3375318d9c7e8..7555d24672101 100644 --- a/packages/aws-cdk-lib/aws-backup/lib/vault.ts +++ b/packages/aws-cdk-lib/aws-backup/lib/vault.ts @@ -4,6 +4,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as sns from '../../aws-sns'; import { ArnFormat, Duration, IResource, Lazy, Names, RemovalPolicy, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A backup vault @@ -269,6 +270,7 @@ export class BackupVault extends BackupVaultBase { constructor(scope: Construct, id: string, props: BackupVaultProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.backupVaultName && !Token.isUnresolved(props.backupVaultName) && !/^[a-zA-Z0-9\-_]{2,50}$/.test(props.backupVaultName)) { throw new Error('Expected vault name to match pattern `^[a-zA-Z0-9\-_]{2,50}$`'); diff --git a/packages/aws-cdk-lib/aws-batch/lib/ecs-job-definition.ts b/packages/aws-cdk-lib/aws-batch/lib/ecs-job-definition.ts index f43aafbef86fb..fe61d5a11a8f3 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/ecs-job-definition.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/ecs-job-definition.ts @@ -5,6 +5,7 @@ import { baseJobDefinitionProperties, IJobDefinition, JobDefinitionBase, JobDefi import { IJobQueue } from './job-queue'; import * as iam from '../../aws-iam'; import { ArnFormat, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A JobDefinition that uses ECS orchestration @@ -83,6 +84,7 @@ export class EcsJobDefinition extends JobDefinitionBase implements IEcsJobDefini constructor(scope: Construct, id: string, props: EcsJobDefinitionProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.container = props.container; this.propagateTags = props?.propagateTags; diff --git a/packages/aws-cdk-lib/aws-batch/lib/eks-job-definition.ts b/packages/aws-cdk-lib/aws-batch/lib/eks-job-definition.ts index 480490f96d547..4f6badac857b5 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/eks-job-definition.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/eks-job-definition.ts @@ -3,6 +3,7 @@ import { CfnJobDefinition } from './batch.generated'; import { EksContainerDefinition, EmptyDirVolume, HostPathVolume, SecretPathVolume } from './eks-container-definition'; import { baseJobDefinitionProperties, IJobDefinition, JobDefinitionBase, JobDefinitionProps } from './job-definition-base'; import { ArnFormat, Lazy, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A JobDefinition that uses Eks orchestration @@ -150,6 +151,7 @@ export class EksJobDefinition extends JobDefinitionBase implements IEksJobDefini constructor(scope: Construct, id: string, props: EksJobDefinitionProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.container = props.container; this.dnsPolicy = props.dnsPolicy; diff --git a/packages/aws-cdk-lib/aws-batch/lib/job-queue.ts b/packages/aws-cdk-lib/aws-batch/lib/job-queue.ts index dd1c0e9265d08..1995cabb4f7d0 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/job-queue.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/job-queue.ts @@ -3,6 +3,7 @@ import { CfnJobQueue } from './batch.generated'; import { IComputeEnvironment } from './compute-environment-base'; import { ISchedulingPolicy } from './scheduling-policy'; import { ArnFormat, Duration, IResource, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a JobQueue @@ -259,6 +260,7 @@ export class JobQueue extends Resource implements IJobQueue { super(scope, id, { physicalName: props?.jobQueueName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.computeEnvironments = props?.computeEnvironments ?? []; this.priority = props?.priority ?? 1; diff --git a/packages/aws-cdk-lib/aws-batch/lib/managed-compute-environment.ts b/packages/aws-cdk-lib/aws-batch/lib/managed-compute-environment.ts index c9f03e9f0dd73..a910cb50cc508 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/managed-compute-environment.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/managed-compute-environment.ts @@ -6,6 +6,7 @@ import * as eks from '../../aws-eks'; import * as iam from '../../aws-iam'; import { IRole } from '../../aws-iam'; import { ArnFormat, Duration, ITaggable, Lazy, Resource, Stack, TagManager, TagType } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Managed ComputeEnvironment. Batch will provision EC2 Instances to @@ -645,6 +646,7 @@ export class ManagedEc2EcsComputeEnvironment extends ManagedComputeEnvironmentBa constructor(scope: Construct, id: string, props: ManagedEc2EcsComputeEnvironmentProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.images = props.images; this.allocationStrategy = determineAllocationStrategy(id, props.allocationStrategy, this.spot); diff --git a/packages/aws-cdk-lib/aws-batch/lib/multinode-job-definition.ts b/packages/aws-cdk-lib/aws-batch/lib/multinode-job-definition.ts index a103c8819f1fd..d34288f3dd682 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/multinode-job-definition.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/multinode-job-definition.ts @@ -5,6 +5,7 @@ import { Compatibility } from './ecs-job-definition'; import { baseJobDefinitionProperties, IJobDefinition, JobDefinitionBase, JobDefinitionProps } from './job-definition-base'; import * as ec2 from '../../aws-ec2'; import { ArnFormat, Lazy, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Not a real instance type! Indicates that Batch will choose one it determines to be optimal @@ -150,6 +151,7 @@ export class MultiNodeJobDefinition extends JobDefinitionBase implements IMultiN constructor(scope: Construct, id: string, props?: MultiNodeJobDefinitionProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.containers = props?.containers ?? []; this.mainNode = props?.mainNode; diff --git a/packages/aws-cdk-lib/aws-batch/lib/scheduling-policy.ts b/packages/aws-cdk-lib/aws-batch/lib/scheduling-policy.ts index 930cc1f3b7f97..33aa8c2e8d1bf 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/scheduling-policy.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/scheduling-policy.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnSchedulingPolicy } from './batch.generated'; import { ArnFormat, Duration, IResource, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Scheduling Policy. Scheduling Policies tell the Batch @@ -211,6 +212,7 @@ export class FairshareSchedulingPolicy extends SchedulingPolicyBase implements I constructor(scope: Construct, id: string, props?: FairshareSchedulingPolicyProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.computeReservation = props?.computeReservation; this.shareDecay = props?.shareDecay; this.shares = props?.shares ?? []; diff --git a/packages/aws-cdk-lib/aws-batch/lib/unmanaged-compute-environment.ts b/packages/aws-cdk-lib/aws-batch/lib/unmanaged-compute-environment.ts index 126ab14852dff..7f9dc324fd5dc 100644 --- a/packages/aws-cdk-lib/aws-batch/lib/unmanaged-compute-environment.ts +++ b/packages/aws-cdk-lib/aws-batch/lib/unmanaged-compute-environment.ts @@ -3,6 +3,7 @@ import { CfnComputeEnvironment } from './batch.generated'; import { IComputeEnvironment, ComputeEnvironmentBase, ComputeEnvironmentProps } from './compute-environment-base'; import { ManagedPolicy, Role, ServicePrincipal } from '../../aws-iam'; import { ArnFormat, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an UnmanagedComputeEnvironment. Batch will not provision instances on your behalf @@ -67,6 +68,7 @@ export class UnmanagedComputeEnvironment extends ComputeEnvironmentBase implemen constructor(scope: Construct, id: string, props?: UnmanagedComputeEnvironmentProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.unmanagedvCPUs = props?.unmanagedvCpus; const resource = new CfnComputeEnvironment(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-certificatemanager/lib/certificate.ts b/packages/aws-cdk-lib/aws-certificatemanager/lib/certificate.ts index caaf9fd3717a0..77565aeee548e 100644 --- a/packages/aws-cdk-lib/aws-certificatemanager/lib/certificate.ts +++ b/packages/aws-cdk-lib/aws-certificatemanager/lib/certificate.ts @@ -5,6 +5,7 @@ import { apexDomain } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import * as route53 from '../../aws-route53'; import { IResource, Token, Tags } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Name tag constant @@ -270,6 +271,7 @@ export class Certificate extends CertificateBase implements ICertificate { constructor(scope: Construct, id: string, props: CertificateProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let validation: CertificateValidation; if (props.validation) { diff --git a/packages/aws-cdk-lib/aws-certificatemanager/lib/dns-validated-certificate.ts b/packages/aws-cdk-lib/aws-certificatemanager/lib/dns-validated-certificate.ts index 49e0c5b8e7b91..0d9501e61d576 100644 --- a/packages/aws-cdk-lib/aws-certificatemanager/lib/dns-validated-certificate.ts +++ b/packages/aws-cdk-lib/aws-certificatemanager/lib/dns-validated-certificate.ts @@ -5,6 +5,7 @@ import * as iam from '../../aws-iam'; import * as route53 from '../../aws-route53'; import * as cdk from '../../core'; import { Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { CertificateRequestCertificateRequestFunction } from '../../custom-resource-handlers/dist/aws-certificatemanager/certificate-request-provider.generated'; /** @@ -84,6 +85,7 @@ export class DnsValidatedCertificate extends CertificateBase implements ICertifi constructor(scope: Construct, id: string, props: DnsValidatedCertificateProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.keyAlgorithm) { cdk.Annotations.of(this) diff --git a/packages/aws-cdk-lib/aws-certificatemanager/lib/private-certificate.ts b/packages/aws-cdk-lib/aws-certificatemanager/lib/private-certificate.ts index dd5696102c791..73f6efd205858 100644 --- a/packages/aws-cdk-lib/aws-certificatemanager/lib/private-certificate.ts +++ b/packages/aws-cdk-lib/aws-certificatemanager/lib/private-certificate.ts @@ -3,6 +3,7 @@ import { ICertificate, KeyAlgorithm } from './certificate'; import { CertificateBase } from './certificate-base'; import { CfnCertificate } from './certificatemanager.generated'; import * as acmpca from '../../aws-acmpca'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for your private certificate @@ -66,6 +67,7 @@ export class PrivateCertificate extends CertificateBase implements ICertificate constructor(scope: Construct, id: string, props: PrivateCertificateProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const cert = new CfnCertificate(this, 'Resource', { domainName: props.domainName, diff --git a/packages/aws-cdk-lib/aws-chatbot/lib/slack-channel-configuration.ts b/packages/aws-cdk-lib/aws-chatbot/lib/slack-channel-configuration.ts index dadf4600cda45..d8e3e4d7b17b2 100644 --- a/packages/aws-cdk-lib/aws-chatbot/lib/slack-channel-configuration.ts +++ b/packages/aws-cdk-lib/aws-chatbot/lib/slack-channel-configuration.ts @@ -6,6 +6,7 @@ import * as iam from '../../aws-iam'; import * as logs from '../../aws-logs'; import * as sns from '../../aws-sns'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a new Slack channel configuration @@ -290,6 +291,7 @@ export class SlackChannelConfiguration extends SlackChannelConfigurationBase { super(scope, id, { physicalName: props.slackChannelConfigurationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.role = props.role || new iam.Role(this, 'ConfigurationRole', { assumedBy: new iam.ServicePrincipal('chatbot.amazonaws.com'), diff --git a/packages/aws-cdk-lib/aws-cloudformation/lib/custom-resource.ts b/packages/aws-cdk-lib/aws-cloudformation/lib/custom-resource.ts index 51c2424d1c602..5e6145ab5b951 100644 --- a/packages/aws-cdk-lib/aws-cloudformation/lib/custom-resource.ts +++ b/packages/aws-cdk-lib/aws-cloudformation/lib/custom-resource.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import * as lambda from '../../aws-lambda'; import * as sns from '../../aws-sns'; import * as core from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Collection of arbitrary properties @@ -180,5 +181,6 @@ export class CustomResource extends core.CustomResource { resourceType: props.resourceType, serviceToken: core.Lazy.string({ produce: () => props.provider.bind(this).serviceToken }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/cache-policy.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/cache-policy.ts index c9e1e94af0a00..1fca522c86097 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/cache-policy.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/cache-policy.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnCachePolicy } from './cloudfront.generated'; import { Duration, Names, Resource, Stack, Token, withResolved } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Cache Policy @@ -141,6 +142,7 @@ export class CachePolicy extends Resource implements ICachePolicy { super(scope, id, { physicalName: props.cachePolicyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const cachePolicyName = props.cachePolicyName ?? `${Names.uniqueId(this).slice(0, 110)}-${Stack.of(this).region}`; diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts index 9bed65f41f48e..08a3105c3cb27 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts @@ -16,6 +16,7 @@ import * as iam from '../../aws-iam'; import * as lambda from '../../aws-lambda'; import * as s3 from '../../aws-s3'; import { ArnFormat, IResource, Lazy, Resource, Stack, Token, Duration, Names, FeatureFlags, Annotations } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { CLOUDFRONT_DEFAULT_SECURITY_POLICY_TLS_V1_2_2021 } from '../../cx-api'; /** @@ -326,6 +327,7 @@ export class Distribution extends Resource implements IDistribution { constructor(scope: Construct, id: string, props: DistributionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.certificate) { const certificateRegion = Stack.of(this).splitArn(props.certificate.certificateArn, ArnFormat.SLASH_RESOURCE_NAME).region; diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/experimental/edge-function.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/experimental/edge-function.ts index 86861e8a1ca10..e020160418667 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/experimental/edge-function.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/experimental/edge-function.ts @@ -13,6 +13,7 @@ import { Stage, Token, } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CrossRegionStringParamReaderProvider } from '../../../custom-resource-handlers/dist/aws-cloudfront/cross-region-string-param-reader-provider.generated'; /** @@ -57,6 +58,7 @@ export class EdgeFunction extends Resource implements lambda.IVersion { constructor(scope: Construct, id: string, props: EdgeFunctionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Create a simple Function if we're already in us-east-1; otherwise create a cross-region stack. const regionIsUsEast1 = !Token.isUnresolved(this.env.region) && this.env.region === 'us-east-1'; diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts index 666802dd8e232..378157cad9c95 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts @@ -3,6 +3,7 @@ import { Construct } from 'constructs'; import { CfnFunction } from './cloudfront.generated'; import { IKeyValueStore } from './key-value-store'; import { IResource, Lazy, Names, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents the function's source code @@ -194,6 +195,7 @@ export class Function extends Resource implements IFunction { constructor(scope: Construct, id: string, props: FunctionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.functionName = props.functionName ?? this.generateName(); diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/key-group.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/key-group.ts index c78cf3cde2e5f..45970e41de1a7 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/key-group.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/key-group.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnKeyGroup } from './cloudfront.generated'; import { IPublicKey } from './public-key'; import { IResource, Names, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Key Group @@ -53,6 +54,7 @@ export class KeyGroup extends Resource implements IKeyGroup { constructor(scope: Construct, id: string, props: KeyGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnKeyGroup(this, 'Resource', { keyGroupConfig: { diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/key-value-store.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/key-value-store.ts index ab83f24602174..38cdf019e5df3 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/key-value-store.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/key-value-store.ts @@ -6,6 +6,7 @@ import { CfnKeyValueStore } from './cloudfront.generated'; import * as s3 from '../../aws-s3'; import * as s3_assets from '../../aws-s3-assets'; import { Resource, IResource, Lazy, Names, Stack, Arn, ArnFormat, FileSystem } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The data to be imported to the key value store. @@ -250,6 +251,7 @@ export class KeyValueStore extends Resource implements IKeyValueStore { produce: () => Names.uniqueResourceName(this, { maxLength: 64 }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnKeyValueStore(this, 'Resource', { name: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-control.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-control.ts index a467afd0a56bf..ae1ef01c46fa0 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-control.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-control.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnOriginAccessControl } from './cloudfront.generated'; import { IResource, Resource, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a CloudFront Origin Access Control @@ -195,6 +196,7 @@ export class S3OriginAccessControl extends OriginAccessControlBase { constructor(scope: Construct, id: string, props: S3OriginAccessControlProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnOriginAccessControl(this, 'Resource', { originAccessControlConfig: { diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-identity.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-identity.ts index 172f65d51dbe4..31997ef313b1e 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-identity.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-access-identity.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnCloudFrontOriginAccessIdentity } from './cloudfront.generated'; import * as iam from '../../aws-iam'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties of CloudFront OriginAccessIdentity @@ -151,6 +152,7 @@ export class OriginAccessIdentity extends OriginAccessIdentityBase implements IO constructor(scope: Construct, id: string, props?: OriginAccessIdentityProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Comment has a max length of 128. const comment = (props?.comment ?? 'Allows CloudFront to reach the bucket').slice(0, 128); diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts index 93878d28a368b..561a53fcd44d4 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/origin-request-policy.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnOriginRequestPolicy } from './cloudfront.generated'; import { Names, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Origin Request Policy @@ -91,6 +92,7 @@ export class OriginRequestPolicy extends Resource implements IOriginRequestPolic super(scope, id, { physicalName: props.originRequestPolicyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const originRequestPolicyName = props.originRequestPolicyName ?? Names.uniqueId(this); if (!Token.isUnresolved(originRequestPolicyName) && !originRequestPolicyName.match(/^[\w-]+$/i)) { diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/public-key.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/public-key.ts index ad1281653ed2c..c85416eda840b 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/public-key.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/public-key.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnPublicKey } from './cloudfront.generated'; import { IResource, Names, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Public Key @@ -56,6 +57,7 @@ export class PublicKey extends Resource implements IPublicKey { constructor(scope: Construct, id: string, props: PublicKeyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!Token.isUnresolved(props.encodedKey) && !/^-----BEGIN PUBLIC KEY-----/.test(props.encodedKey)) { throw new Error(`Public key must be in PEM format (with the BEGIN/END PUBLIC KEY lines); got ${props.encodedKey}`); diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/realtime-log-config.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/realtime-log-config.ts index d30f3668c8891..40e2a46b7bcc6 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/realtime-log-config.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/realtime-log-config.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnRealtimeLogConfig } from './cloudfront.generated'; import { Endpoint } from '../'; import { IResource, Lazy, Names, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents Realtime Log Configuration @@ -58,6 +59,7 @@ export class RealtimeLogConfig extends Resource implements IRealtimeLogConfig { super(scope, id, { physicalName: props.realtimeLogConfigName ?? Lazy.string({ produce: () => Names.uniqueResourceName(this, {}) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if ((props.samplingRate < 1 || props.samplingRate > 100)) { throw new Error(`Sampling rate must be between 1 and 100 (inclusive), received ${props.samplingRate}`); diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/response-headers-policy.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/response-headers-policy.ts index 3c4e561fd463c..30eedb24dc158 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/response-headers-policy.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/response-headers-policy.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnResponseHeadersPolicy } from './cloudfront.generated'; import { Duration, Names, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a response headers policy. @@ -109,6 +110,7 @@ export class ResponseHeadersPolicy extends Resource implements IResponseHeadersP super(scope, id, { physicalName: props.responseHeadersPolicyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const responseHeadersPolicyName = props.responseHeadersPolicyName ?? Names.uniqueResourceName(this, { maxLength: 128, diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/web-distribution.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/web-distribution.ts index fccd2fa9e6020..b093ac78edc01 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/web-distribution.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/web-distribution.ts @@ -11,6 +11,7 @@ import * as iam from '../../aws-iam'; import * as lambda from '../../aws-lambda'; import * as s3 from '../../aws-s3'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * HTTP status code to failover to second origin @@ -823,6 +824,7 @@ export class CloudFrontWebDistribution extends cdk.Resource implements IDistribu constructor(scope: Construct, id: string, props: CloudFrontWebDistributionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Comments have an undocumented limit of 128 characters const trimmedComment = diff --git a/packages/aws-cdk-lib/aws-cloudtrail/lib/cloudtrail.ts b/packages/aws-cdk-lib/aws-cloudtrail/lib/cloudtrail.ts index 24703069788f0..07746f1965634 100644 --- a/packages/aws-cdk-lib/aws-cloudtrail/lib/cloudtrail.ts +++ b/packages/aws-cdk-lib/aws-cloudtrail/lib/cloudtrail.ts @@ -8,6 +8,7 @@ import * as logs from '../../aws-logs'; import * as s3 from '../../aws-s3'; import * as sns from '../../aws-sns'; import { Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for an AWS CloudTrail trail @@ -248,6 +249,7 @@ export class Trail extends Resource { super(scope, id, { physicalName: props.trailName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const cloudTrailPrincipal = new iam.ServicePrincipal('cloudtrail.amazonaws.com'); diff --git a/packages/aws-cdk-lib/aws-cloudwatch/lib/alarm.ts b/packages/aws-cdk-lib/aws-cloudwatch/lib/alarm.ts index d00d5eb13ccdf..c5e9ce3c74c48 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch/lib/alarm.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch/lib/alarm.ts @@ -10,6 +10,7 @@ import { dropUndefined } from './private/object'; import { MetricSet } from './private/rendering'; import { normalizeStatistic, parseStatistic } from './private/statistic'; import { ArnFormat, Lazy, Stack, Token, Annotations } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for Alarms @@ -165,6 +166,7 @@ export class Alarm extends AlarmBase { super(scope, id, { physicalName: props.alarmName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const comparisonOperator = props.comparisonOperator || ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD; diff --git a/packages/aws-cdk-lib/aws-cloudwatch/lib/composite-alarm.ts b/packages/aws-cdk-lib/aws-cloudwatch/lib/composite-alarm.ts index 3343cdcdecdff..dbbeaa5ead215 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch/lib/composite-alarm.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch/lib/composite-alarm.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { AlarmBase, IAlarm, IAlarmRule } from './alarm-base'; import { CfnCompositeAlarm } from './cloudwatch.generated'; import { ArnFormat, Lazy, Names, Stack, Duration } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for creating a Composite Alarm @@ -116,6 +117,7 @@ export class CompositeAlarm extends AlarmBase { super(scope, id, { physicalName: props.compositeAlarmName ?? Lazy.string({ produce: () => this.generateUniqueId() }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.alarmRule.renderAlarmRule().length > 10240) { throw new Error('Alarm Rule expression cannot be greater than 10240 characters, please reduce the conditions in the Alarm Rule'); diff --git a/packages/aws-cdk-lib/aws-cloudwatch/lib/dashboard.ts b/packages/aws-cdk-lib/aws-cloudwatch/lib/dashboard.ts index 384b819b898c9..ca703f5647e78 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch/lib/dashboard.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch/lib/dashboard.ts @@ -4,6 +4,7 @@ import { Column, Row } from './layout'; import { IVariable } from './variable'; import { IWidget } from './widget'; import { Lazy, Resource, Stack, Token, Annotations, Duration } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Specify the period for graphs when the CloudWatch dashboard loads @@ -121,6 +122,7 @@ export class Dashboard extends Resource { super(scope, id, { physicalName: props.dashboardName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); { const { dashboardName } = props; diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/fleet.ts b/packages/aws-cdk-lib/aws-codebuild/lib/fleet.ts index 8020a86988c6b..6709f97881a0f 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/fleet.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/fleet.ts @@ -3,6 +3,7 @@ import { CfnFleet } from './codebuild.generated'; import { ComputeType } from './compute-type'; import { EnvironmentType } from './environment-type'; import { Arn, ArnFormat, IResource, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties of a CodeBuild {@link Fleet}. @@ -139,6 +140,7 @@ export class Fleet extends Resource implements IFleet { } super(scope, id, { physicalName: props.fleetName }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnFleet(this, 'Resource', { name: props.fleetName, diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/pipeline-project.ts b/packages/aws-cdk-lib/aws-codebuild/lib/pipeline-project.ts index 7ab7c900b6a4e..da69ebf59237a 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/pipeline-project.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/pipeline-project.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CodePipelineArtifacts } from './codepipeline-artifacts'; import { CodePipelineSource } from './codepipeline-source'; import { CommonProjectProps, Project } from './project'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface PipelineProjectProps extends CommonProjectProps { } @@ -16,5 +17,6 @@ export class PipelineProject extends Project { artifacts: new CodePipelineArtifacts(), ...props, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/project.ts b/packages/aws-cdk-lib/aws-codebuild/lib/project.ts index ff6246f98b192..926b693b4f103 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/project.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/project.ts @@ -1061,6 +1061,7 @@ export class Project extends ProjectBase { super(scope, id, { physicalName: props.projectName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.role = props.role || new iam.Role(this, 'Role', { roleName: PhysicalName.GENERATE_IF_NEEDED, @@ -1793,6 +1794,7 @@ interface LinuxBuildImageProps { // Keep around to resolve a circular dependency until removing deprecated ARM image constants from LinuxBuildImage // eslint-disable-next-line import/order import { LinuxArmBuildImage } from './linux-arm-build-image'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A CodeBuild image running x86-64 Linux. diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/report-group.ts b/packages/aws-cdk-lib/aws-codebuild/lib/report-group.ts index 234cf8e5d6c22..9bf4181ca1ed1 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/report-group.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/report-group.ts @@ -4,6 +4,7 @@ import { renderReportGroupArn, reportGroupArnComponents } from './report-group-u import * as iam from '../../aws-iam'; import * as s3 from '../../aws-s3'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The interface representing the ReportGroup resource - @@ -157,6 +158,7 @@ export class ReportGroup extends ReportGroupBase { super(scope, id, { physicalName: props.reportGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.type = props.type ? props.type : ReportGroupType.TEST; const resource = new CfnReportGroup(this, 'Resource', { type: this.type, diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/source-credentials.ts b/packages/aws-cdk-lib/aws-codebuild/lib/source-credentials.ts index 80cea1f0f18e1..5c0f9b37f30b0 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/source-credentials.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/source-credentials.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnSourceCredential } from './codebuild.generated'; import { Resource, SecretValue } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Creation properties for `GitHubSourceCredentials`. @@ -24,6 +25,7 @@ export interface GitHubSourceCredentialsProps { export class GitHubSourceCredentials extends Resource { constructor(scope: Construct, id: string, props: GitHubSourceCredentialsProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnSourceCredential(this, 'Resource', { serverType: 'GITHUB', diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/untrusted-code-boundary-policy.ts b/packages/aws-cdk-lib/aws-codebuild/lib/untrusted-code-boundary-policy.ts index 64ced16123214..deab645a33e47 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/untrusted-code-boundary-policy.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/untrusted-code-boundary-policy.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import * as iam from '../../aws-iam'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for UntrustedCodeBoundaryPolicy @@ -91,5 +92,6 @@ export class UntrustedCodeBoundaryPolicy extends iam.ManagedPolicy { ...props.additionalStatements ?? [], ], }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts b/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts index a8518c2662e6d..08696395f6f5e 100644 --- a/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts +++ b/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts @@ -6,6 +6,7 @@ import * as events from '../../aws-events'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { ArnFormat, IResource, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Additional options to pass to the notification rule. @@ -563,6 +564,7 @@ export class Repository extends RepositoryBase { super(scope, id, { physicalName: props.repositoryName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const repository = new CfnRepository(this, 'Resource', { repositoryName: props.repositoryName, diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/application.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/application.ts index 9bd670cea8444..bcec2f277c1f4 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/application.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/application.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import { ArnFormat, IResource, Resource, Stack, Arn } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,7 @@ export class EcsApplication extends Resource implements IEcsApplication { super(scope, id, { physicalName: props.applicationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnApplication(this, 'Resource', { applicationName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-config.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-config.ts index c77fa5731bc02..9d3ad5802dd8b 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-config.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-config.ts @@ -1,4 +1,5 @@ import { Construct } from 'constructs'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseDeploymentConfig, BaseDeploymentConfigOptions, ComputePlatform, IBaseDeploymentConfig } from '../base-deployment-config'; import { deploymentConfig } from '../private/utils'; import { TrafficRouting } from '../traffic-routing-config'; @@ -70,5 +71,6 @@ export class EcsDeploymentConfig extends BaseDeploymentConfig implements IEcsDep computePlatform: ComputePlatform.ECS, trafficRouting: props?.trafficRouting ?? TrafficRouting.allAtOnce(), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-group.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-group.ts index 1acee55f5889b..4986946bab106 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-group.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/ecs/deployment-group.ts @@ -6,6 +6,7 @@ import * as ecs from '../../../aws-ecs'; import * as elbv2 from '../../../aws-elasticloadbalancingv2'; import * as iam from '../../../aws-iam'; import * as cdk from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CODEDEPLOY_REMOVE_ALARMS_FROM_DEPLOYMENT_GROUP } from '../../../cx-api'; import { CfnDeploymentGroup } from '../codedeploy.generated'; import { ImportedDeploymentGroupBase, DeploymentGroupBase } from '../private/base-deployment-group'; @@ -224,6 +225,7 @@ export class EcsDeploymentGroup extends DeploymentGroupBase implements IEcsDeplo role: props.role, roleConstructId: 'ServiceRole', }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.role = this._role; this.application = props.application || new EcsApplication(this, 'Application'); diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/application.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/application.ts index 8b2e39077efd1..5019a5f721097 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/application.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/application.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import { ArnFormat, IResource, Resource, Stack, Arn } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,7 @@ export class LambdaApplication extends Resource implements ILambdaApplication { super(scope, id, { physicalName: props.applicationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnApplication(this, 'Resource', { applicationName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/custom-deployment-config.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/custom-deployment-config.ts index 5e695c4a70ec7..8d5910724ff0e 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/custom-deployment-config.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/custom-deployment-config.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { ILambdaDeploymentConfig } from './deployment-config'; import { Duration, Names, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../../custom-resources'; import { arnForDeploymentConfig, validateName } from '../private/utils'; @@ -82,6 +83,7 @@ export class CustomLambdaDeploymentConfig extends Resource implements ILambdaDep public constructor(scope: Construct, id: string, props: CustomLambdaDeploymentConfigProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateParameters(props); // In this section we make the argument for the AWS API call diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-config.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-config.ts index f0b2c20654eda..c456c5f657f19 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-config.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-config.ts @@ -1,4 +1,5 @@ import { Construct } from 'constructs'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseDeploymentConfig, BaseDeploymentConfigOptions, ComputePlatform, IBaseDeploymentConfig } from '../base-deployment-config'; import { deploymentConfig } from '../private/utils'; import { TrafficRouting } from '../traffic-routing-config'; @@ -103,5 +104,6 @@ export class LambdaDeploymentConfig extends BaseDeploymentConfig implements ILam computePlatform: ComputePlatform.LAMBDA, trafficRouting: props?.trafficRouting ?? TrafficRouting.allAtOnce(), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-group.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-group.ts index 86f6134e62151..3e4718e6bcf8b 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-group.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/lambda/deployment-group.ts @@ -5,6 +5,7 @@ import * as cloudwatch from '../../../aws-cloudwatch'; import * as iam from '../../../aws-iam'; import * as lambda from '../../../aws-lambda'; import * as cdk from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CODEDEPLOY_REMOVE_ALARMS_FROM_DEPLOYMENT_GROUP } from '../../../cx-api'; import { CfnDeploymentGroup } from '../codedeploy.generated'; import { ImportedDeploymentGroupBase, DeploymentGroupBase } from '../private/base-deployment-group'; @@ -164,6 +165,7 @@ export class LambdaDeploymentGroup extends DeploymentGroupBase implements ILambd role: props.role, roleConstructId: 'ServiceRole', }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.role = this._role; this.application = props.application || new LambdaApplication(this, 'Application'); diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/private/base-deployment-group.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/private/base-deployment-group.ts index c9d39741e8a65..52748dfb8f095 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/private/base-deployment-group.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/private/base-deployment-group.ts @@ -3,6 +3,7 @@ import { isPredefinedDeploymentConfig } from './predefined-deployment-config'; import { validateName } from './utils'; import * as iam from '../../../aws-iam'; import { Resource, IResource, ArnFormat, Arn, Aws } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IBaseDeploymentConfig } from '../base-deployment-config'; import { CfnDeploymentGroup } from '../codedeploy.generated'; @@ -51,6 +52,7 @@ export class ImportedDeploymentGroupBase extends Resource { }); super(scope, id, { environmentFromArn: deploymentGroupArn }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.deploymentGroupName = deploymentGroupName; this.deploymentGroupArn = deploymentGroupArn; } diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/server/application.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/server/application.ts index 725cb2521a235..0d2795c56b60b 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/server/application.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/server/application.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import { ArnFormat, IResource, Resource, Stack, Arn } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,7 @@ export class ServerApplication extends Resource implements IServerApplication { super(scope, id, { physicalName: props.applicationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnApplication(this, 'Resource', { applicationName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-config.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-config.ts index 95fd694f324b9..3963f29e971c5 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-config.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-config.ts @@ -1,4 +1,5 @@ import { Construct } from 'constructs'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseDeploymentConfig, BaseDeploymentConfigOptions, IBaseDeploymentConfig, ZonalConfig } from '../base-deployment-config'; import { MinimumHealthyHosts } from '../host-health-config'; import { deploymentConfig } from '../private/utils'; @@ -77,5 +78,6 @@ export class ServerDeploymentConfig extends BaseDeploymentConfig implements ISer constructor(scope: Construct, id: string, props: ServerDeploymentConfigProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-group.ts b/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-group.ts index de6d24a04f4a8..0971a5611bbc8 100644 --- a/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-group.ts +++ b/packages/aws-cdk-lib/aws-codedeploy/lib/server/deployment-group.ts @@ -8,6 +8,7 @@ import * as ec2 from '../../../aws-ec2'; import * as iam from '../../../aws-iam'; import * as s3 from '../../../aws-s3'; import * as cdk from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CODEDEPLOY_REMOVE_ALARMS_FROM_DEPLOYMENT_GROUP } from '../../../cx-api'; import { CfnDeploymentGroup } from '../codedeploy.generated'; import { ImportedDeploymentGroupBase, DeploymentGroupBase } from '../private/base-deployment-group'; @@ -67,6 +68,7 @@ class ImportedServerDeploymentGroup extends ImportedDeploymentGroupBase implemen application: props.application, deploymentGroupName: props.deploymentGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.application = props.application; this.deploymentConfig = this._bindDeploymentConfig(props.deploymentConfig || ServerDeploymentConfig.ONE_AT_A_TIME); diff --git a/packages/aws-cdk-lib/aws-codeguruprofiler/lib/profiling-group.ts b/packages/aws-cdk-lib/aws-codeguruprofiler/lib/profiling-group.ts index 6e412ac9be6b9..ab8f24008947b 100644 --- a/packages/aws-cdk-lib/aws-codeguruprofiler/lib/profiling-group.ts +++ b/packages/aws-cdk-lib/aws-codeguruprofiler/lib/profiling-group.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnProfilingGroup } from './codeguruprofiler.generated'; import { Grant, IGrantable } from '../../aws-iam'; import { ArnFormat, IResource, Lazy, Names, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The compute platform of the profiling group. @@ -188,6 +189,7 @@ export class ProfilingGroup extends ProfilingGroupBase { super(scope, id, { physicalName: props.profilingGroupName ?? Lazy.string({ produce: () => this.generateUniqueId() }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const profilingGroup = new CfnProfilingGroup(this, 'ProfilingGroup', { profilingGroupName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-codepipeline/lib/pipeline.ts b/packages/aws-cdk-lib/aws-codepipeline/lib/pipeline.ts index 3a94a026a7f41..86ccd986d8a5a 100644 --- a/packages/aws-cdk-lib/aws-codepipeline/lib/pipeline.ts +++ b/packages/aws-cdk-lib/aws-codepipeline/lib/pipeline.ts @@ -36,6 +36,7 @@ import { Stage as CdkStage, Token, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -472,6 +473,7 @@ export class Pipeline extends PipelineBase { super(scope, id, { physicalName: props.pipelineName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); validateName('Pipeline', this.physicalName); diff --git a/packages/aws-cdk-lib/aws-codestarnotifications/lib/notification-rule.ts b/packages/aws-cdk-lib/aws-codestarnotifications/lib/notification-rule.ts index 32adb3b0d9fa2..116468d39d211 100644 --- a/packages/aws-cdk-lib/aws-codestarnotifications/lib/notification-rule.ts +++ b/packages/aws-cdk-lib/aws-codestarnotifications/lib/notification-rule.ts @@ -3,6 +3,7 @@ import { CfnNotificationRule } from './codestarnotifications.generated'; import { INotificationRuleSource } from './notification-rule-source'; import { INotificationRuleTarget, NotificationRuleTargetConfig } from './notification-rule-target'; import { IResource, Resource, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The level of detail to include in the notifications for this resource. @@ -141,6 +142,7 @@ export class NotificationRule extends Resource implements INotificationRule { constructor(scope: constructs.Construct, id: string, props: NotificationRuleProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const source = props.source.bindAsNotificationRuleSource(this); diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts index d92109c73b7a8..1bd54957b8705 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-client.ts @@ -4,6 +4,7 @@ import { IUserPool } from './user-pool'; import { ClientAttributes } from './user-pool-attr'; import { IUserPoolResourceServer, ResourceServerScope } from './user-pool-resource-server'; import { IResource, Resource, Duration, Stack, SecretValue, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../custom-resources'; /** @@ -413,6 +414,7 @@ export class UserPoolClient extends Resource implements IUserPoolClient { constructor(scope: Construct, id: string, props: UserPoolClientProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.disableOAuth && props.oAuth) { throw new Error('OAuth settings cannot be specified when disableOAuth is set.'); diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-domain.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-domain.ts index 889ee5782b258..40444964c811e 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-domain.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-domain.ts @@ -4,6 +4,7 @@ import { IUserPool } from './user-pool'; import { UserPoolClient } from './user-pool-client'; import { ICertificate } from '../../aws-certificatemanager'; import { IResource, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, AwsSdkCall, PhysicalResourceId } from '../../custom-resources'; /** @@ -100,6 +101,7 @@ export class UserPoolDomain extends Resource implements IUserPoolDomain { constructor(scope: Construct, id: string, props: UserPoolDomainProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!!props.customDomain === !!props.cognitoDomain) { throw new Error('One of, and only one of, cognitoDomain or customDomain must be specified'); diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-group.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-group.ts index 52b55a12e83e5..835b17d5e61f2 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-group.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-group.ts @@ -3,6 +3,7 @@ import { CfnUserPoolGroup } from './cognito.generated'; import { IUserPool } from './user-pool'; import { IRole } from '../../aws-iam'; import { IResource, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a user pool group. @@ -86,6 +87,7 @@ export class UserPoolGroup extends Resource implements IUserPoolGroup { constructor(scope: Construct, id: string, props: UserPoolGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.description !== undefined && !Token.isUnresolved(props.description) && diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/amazon.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/amazon.ts index bca2dfb6758cf..81b4a2dbbc3d0 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/amazon.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/amazon.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { UserPoolIdentityProviderProps } from './base'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolAmazonIdentityProvider @@ -34,6 +35,7 @@ export class UserPoolIdentityProviderAmazon extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAmazonProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const scopes = props.scopes ?? ['profile']; diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/apple.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/apple.ts index 1b3c23c54e04b..4ee45cf8a8eb3 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/apple.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/apple.ts @@ -3,6 +3,7 @@ import { UserPoolIdentityProviderProps } from './base'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { SecretValue } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolAppleIdentityProvider @@ -50,6 +51,7 @@ export class UserPoolIdentityProviderApple extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAppleProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const scopes = props.scopes ?? ['name']; diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/facebook.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/facebook.ts index 1331c4145f874..ebbe786470dc7 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/facebook.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/facebook.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { UserPoolIdentityProviderProps } from './base'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolFacebookIdentityProvider @@ -38,6 +39,7 @@ export class UserPoolIdentityProviderFacebook extends UserPoolIdentityProviderBa constructor(scope: Construct, id: string, props: UserPoolIdentityProviderFacebookProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const scopes = props.scopes ?? ['public_profile']; diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/google.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/google.ts index 391573acfcf93..c413e3d368e57 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/google.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/google.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { SecretValue } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -43,6 +44,7 @@ export class UserPoolIdentityProviderGoogle extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderGoogleProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const scopes = props.scopes ?? ['profile']; diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/oidc.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/oidc.ts index 72e6e92c5ed4e..6894123515339 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/oidc.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/oidc.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { Names, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -106,6 +107,7 @@ export class UserPoolIdentityProviderOidc extends UserPoolIdentityProviderBase { constructor(scope: Construct, id: string, props: UserPoolIdentityProviderOidcProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const scopes = props.scopes ?? ['openid']; diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/saml.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/saml.ts index bb0e1d938eb38..3b8dc8c9288ef 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/saml.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-idps/saml.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { Names, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -121,6 +122,7 @@ export class UserPoolIdentityProviderSaml extends UserPoolIdentityProviderBase { constructor(scope: Construct, id: string, props: UserPoolIdentityProviderSamlProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateName(props.name); diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-resource-server.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-resource-server.ts index 8ec01eb4a6597..0ab4748962614 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool-resource-server.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool-resource-server.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnUserPoolResourceServer } from './cognito.generated'; import { IUserPool } from './user-pool'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents a Cognito user pool resource server @@ -102,6 +103,7 @@ export class UserPoolResourceServer extends Resource implements IUserPoolResourc super(scope, id, { physicalName: props.identifier, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnUserPoolResourceServer(this, 'Resource', { identifier: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts b/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts index 03f3c3ff15f10..3ded9b2476e7d 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts @@ -13,6 +13,7 @@ import { Grant, IGrantable, IRole, PolicyDocument, PolicyStatement, Role, Servic import { IKey } from '../../aws-kms'; import * as lambda from '../../aws-lambda'; import { ArnFormat, Duration, IResource, Lazy, Names, RemovalPolicy, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The different ways in which users of this pool can sign up or sign in. @@ -972,6 +973,7 @@ export class UserPool extends UserPoolBase { constructor(scope: Construct, id: string, props: UserPoolProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const signIn = this.signInConfiguration(props); diff --git a/packages/aws-cdk-lib/aws-config/lib/managed-rules.ts b/packages/aws-cdk-lib/aws-config/lib/managed-rules.ts index d937ef37017bd..e567c7cc8845c 100644 --- a/packages/aws-cdk-lib/aws-config/lib/managed-rules.ts +++ b/packages/aws-cdk-lib/aws-config/lib/managed-rules.ts @@ -3,6 +3,7 @@ import { ManagedRule, ManagedRuleIdentifiers, ResourceType, RuleProps, RuleScope import * as iam from '../../aws-iam'; import * as sns from '../../aws-sns'; import { Duration, Lazy, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for a AccessKeysRotated @@ -37,6 +38,7 @@ export class AccessKeysRotated extends ManagedRule { : {}, }, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-config/lib/rule.ts b/packages/aws-cdk-lib/aws-config/lib/rule.ts index 9cf824a809138..2b8ed4d113ea8 100644 --- a/packages/aws-cdk-lib/aws-config/lib/rule.ts +++ b/packages/aws-cdk-lib/aws-config/lib/rule.ts @@ -5,6 +5,7 @@ import * as events from '../../aws-events'; import * as iam from '../../aws-iam'; import * as lambda from '../../aws-lambda'; import { IResource, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface representing an AWS Config rule @@ -288,6 +289,7 @@ export class ManagedRule extends RuleNew { super(scope, id, { physicalName: props.configRuleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.ruleScope = props.ruleScope; diff --git a/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts b/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts index 91e99ec8eeef5..cb0e6ecefc8b4 100644 --- a/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts @@ -12,6 +12,7 @@ import * as logs from '../../aws-logs'; import { CaCertificate } from '../../aws-rds'; import * as secretsmanager from '../../aws-secretsmanager'; import { CfnResource, Duration, RemovalPolicy, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; const MIN_ENGINE_VERSION_FOR_IO_OPTIMIZED_STORAGE = 5; @@ -466,6 +467,7 @@ export class DatabaseCluster extends DatabaseClusterBase { constructor(scope: Construct, id: string, props: DatabaseClusterProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; this.vpcSubnets = props.vpcSubnets; diff --git a/packages/aws-cdk-lib/aws-docdb/lib/database-secret.ts b/packages/aws-cdk-lib/aws-docdb/lib/database-secret.ts index 7da183748e90a..52110104a32c0 100644 --- a/packages/aws-cdk-lib/aws-docdb/lib/database-secret.ts +++ b/packages/aws-cdk-lib/aws-docdb/lib/database-secret.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IKey } from '../../aws-kms'; import { ISecret, Secret } from '../../aws-secretsmanager'; import { Aws } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -80,6 +81,7 @@ export class DatabaseSecret extends Secret { excludeCharacters: excludedCharacters, }, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this._excludedCharacters = excludedCharacters; } diff --git a/packages/aws-cdk-lib/aws-docdb/lib/instance.ts b/packages/aws-cdk-lib/aws-docdb/lib/instance.ts index d81d7a574863e..7fc298b8b2254 100644 --- a/packages/aws-cdk-lib/aws-docdb/lib/instance.ts +++ b/packages/aws-cdk-lib/aws-docdb/lib/instance.ts @@ -6,6 +6,7 @@ import * as ec2 from '../../aws-ec2'; import { CaCertificate } from '../../aws-rds'; import { ArnFormat } from '../../core'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A database instance @@ -219,6 +220,7 @@ export class DatabaseInstance extends DatabaseInstanceBase implements IDatabaseI constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const instance = new CfnDBInstance(this, 'Resource', { dbClusterIdentifier: props.cluster.clusterIdentifier, diff --git a/packages/aws-cdk-lib/aws-docdb/lib/parameter-group.ts b/packages/aws-cdk-lib/aws-docdb/lib/parameter-group.ts index 346214a6dc187..a8c2afa57a47a 100644 --- a/packages/aws-cdk-lib/aws-docdb/lib/parameter-group.ts +++ b/packages/aws-cdk-lib/aws-docdb/lib/parameter-group.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnDBClusterParameterGroup } from './docdb.generated'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A parameter group @@ -74,6 +75,7 @@ export class ClusterParameterGroup extends ClusterParameterGroupBase implements constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnDBClusterParameterGroup(this, 'Resource', { name: props.dbClusterParameterGroupName, diff --git a/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts b/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts index 1dd55b0ba23f6..0b3c10b33c671 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts @@ -29,6 +29,7 @@ import { TagType, Token, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const HASH_KEY_TYPE = 'HASH'; @@ -543,6 +544,7 @@ export class TableV2 extends TableBaseV2 { public constructor(scope: Construct, id: string, props: TablePropsV2) { super(scope, id, { physicalName: props.tableName ?? PhysicalName.GENERATE_IF_NEEDED }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.tableOptions = props; this.partitionKey = props.partitionKey; diff --git a/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts b/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts index 55ed1082a717a..193b8a738193d 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts @@ -21,6 +21,7 @@ import { Aws, CfnCondition, CfnCustomResource, CfnResource, Duration, Fn, Lazy, Names, RemovalPolicy, Stack, Token, CustomResource, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; const HASH_KEY_TYPE = 'HASH'; const RANGE_KEY_TYPE = 'RANGE'; @@ -1177,6 +1178,7 @@ export class Table extends TableBase { super(scope, id, { physicalName: props.tableName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const { sseSpecification, encryptionKey } = this.parseEncryption(props); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/bastion-host.ts b/packages/aws-cdk-lib/aws-ec2/lib/bastion-host.ts index 40136feb88c95..d60ed5042bae2 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/bastion-host.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/bastion-host.ts @@ -11,6 +11,7 @@ import { BlockDevice } from './volume'; import { IVpc, SubnetSelection } from './vpc'; import { IPrincipal, IRole, PolicyStatement } from '../../aws-iam'; import { CfnOutput, FeatureFlags, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { BASTION_HOST_USE_AMAZON_LINUX_2023_BY_DEFAULT } from '../../cx-api'; /** @@ -192,6 +193,7 @@ export class BastionHostLinux extends Resource implements IInstance { constructor(scope: Construct, id: string, props: BastionHostLinuxProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.stack = Stack.of(scope); const instanceType = props.instanceType ?? InstanceType.of(InstanceClass.T3, InstanceSize.NANO); this.instance = new Instance(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-authorization-rule.ts b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-authorization-rule.ts index 1eca7b1aa9b9b..411afe7f88161 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-authorization-rule.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-authorization-rule.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IClientVpnEndpoint } from './client-vpn-endpoint-types'; import { CfnClientVpnAuthorizationRule } from './ec2.generated'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for a ClientVpnAuthorizationRule @@ -65,6 +66,7 @@ export class ClientVpnAuthorizationRule extends Resource { } const clientVpnEndpoint = props.clientVpnEndoint || props.clientVpnEndpoint; super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnClientVpnAuthorizationRule(this, 'Resource', { clientVpnEndpointId: clientVpnEndpoint!.endpointId, targetNetworkCidr: props.cidr, diff --git a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts index a64e3ed68b61b..5e4b9c681b478 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts @@ -10,6 +10,7 @@ import { IVpc, SubnetSelection } from './vpc'; import { ISamlProvider } from '../../aws-iam'; import * as logs from '../../aws-logs'; import { CfnOutput, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for a client VPN endpoint @@ -292,6 +293,7 @@ export class ClientVpnEndpoint extends Resource implements IClientVpnEndpoint { constructor(scope: Construct, id: string, props: ClientVpnEndpointProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (!Token.isUnresolved(props.vpc.vpcCidrBlock)) { const clientCidr = new CidrBlock(props.cidr); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts index c5d3b960720ec..1dbc7c215e01d 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts @@ -3,6 +3,7 @@ import { IClientVpnEndpoint } from './client-vpn-endpoint-types'; import { CfnClientVpnRoute } from './ec2.generated'; import { ISubnet } from './vpc'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for a ClientVpnRoute @@ -95,6 +96,7 @@ export class ClientVpnRoute extends Resource { } const clientVpnEndpoint = props.clientVpnEndoint || props.clientVpnEndpoint; super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const route = new CfnClientVpnRoute(this, 'Resource', { clientVpnEndpointId: clientVpnEndpoint!.endpointId, description: props.description, diff --git a/packages/aws-cdk-lib/aws-ec2/lib/instance.ts b/packages/aws-cdk-lib/aws-ec2/lib/instance.ts index 6e5c7258dac4e..4f423f61d1724 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/instance.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/instance.ts @@ -17,6 +17,7 @@ import { IVpc, Subnet, SubnetSelection } from './vpc'; import * as iam from '../../aws-iam'; import { Annotations, AspectPriority, Aspects, Duration, FeatureFlags, Fn, IResource, Lazy, Resource, Stack, Tags, Token } from '../../core'; import { md5hash } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -462,6 +463,7 @@ export class Instance extends Resource implements IInstance { constructor(scope: Construct, id: string, props: InstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.initOptions && !props.init) { throw new Error('Setting \'initOptions\' requires that \'init\' is also set'); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/key-pair.ts b/packages/aws-cdk-lib/aws-ec2/lib/key-pair.ts index e597a53dfb7a6..9dea988eed6e9 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/key-pair.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/key-pair.ts @@ -3,6 +3,7 @@ import { CfnKeyPair } from './ec2.generated'; import { OperatingSystemType } from './machine-image'; import { StringParameter, IStringParameter } from '../../aws-ssm'; import { Resource, ResourceProps, Names, Lazy, IResource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The format of the Key Pair @@ -202,6 +203,7 @@ export class KeyPair extends Resource implements IKeyPair { produce: () => Names.uniqueResourceName(this, { maxLength: 255 }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props?.publicKeyMaterial && props?.type) { throw new Error('Cannot specify \'type\' for keys with imported material'); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts b/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts index eea0bfe06dd65..4fa5e4ea50081 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts @@ -23,6 +23,7 @@ import { Token, FeatureFlags, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -597,6 +598,7 @@ export class LaunchTemplate extends Resource implements ILaunchTemplate, iam.IGr constructor(scope: Construct, id: string, props: LaunchTemplateProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Basic validation of the provided spot block duration const spotDuration = props?.spotOptions?.blockDuration?.toHours({ integral: true }); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/network-acl.ts b/packages/aws-cdk-lib/aws-ec2/lib/network-acl.ts index d243ddcbb8d9d..2dcc85c8f9da3 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/network-acl.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/network-acl.ts @@ -3,6 +3,7 @@ import { CfnNetworkAcl, CfnNetworkAclEntry, CfnSubnetNetworkAclAssociation } fro import { AclCidr, AclTraffic } from './network-acl-types'; import { ISubnet, IVpc, SubnetSelection } from './vpc'; import { IResource, Resource, Tags } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Name tag constant @@ -117,6 +118,7 @@ export class NetworkAcl extends NetworkAclBase { constructor(scope: Construct, id: string, props: NetworkAclProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; diff --git a/packages/aws-cdk-lib/aws-ec2/lib/placement-group.ts b/packages/aws-cdk-lib/aws-ec2/lib/placement-group.ts index 8500ec609e9b6..115e97fcee44c 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/placement-group.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/placement-group.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnPlacementGroup } from './ec2.generated'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Determines where your instances are placed on the underlying hardware according to the specified PlacementGroupStrategy @@ -169,6 +170,7 @@ export class PlacementGroup extends Resource implements IPlacementGroup { super(scope, id, { physicalName: undefined, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.partitions = props?.partitions; this.spreadLevel = props?.spreadLevel; diff --git a/packages/aws-cdk-lib/aws-ec2/lib/prefix-list.ts b/packages/aws-cdk-lib/aws-ec2/lib/prefix-list.ts index 1f0ae1efbd77a..03d9eb44ac73a 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/prefix-list.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/prefix-list.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnPrefixList } from './ec2.generated'; import { IResource, Lazy, Resource, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A prefix list @@ -135,6 +136,7 @@ export class PrefixList extends PrefixListBase { produce: () => Names.uniqueResourceName(this, { maxLength: 255, allowedSpecialCharacters: '.-_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props?.prefixListName) { if ( props.prefixListName.startsWith('com.amazonaws')) { diff --git a/packages/aws-cdk-lib/aws-ec2/lib/security-group.ts b/packages/aws-cdk-lib/aws-ec2/lib/security-group.ts index e774c1f9de3af..838e3ed64e4e2 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/security-group.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/security-group.ts @@ -6,6 +6,7 @@ import { Port } from './port'; import { IVpc } from './vpc'; import * as cxschema from '../../cloud-assembly-schema'; import { Annotations, ContextProvider, IResource, Lazy, Names, Resource, ResourceProps, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const SECURITY_GROUP_SYMBOL = Symbol.for('@aws-cdk/iam.SecurityGroup'); @@ -502,6 +503,7 @@ export class SecurityGroup extends SecurityGroupBase { super(scope, id, { physicalName: props.securityGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const groupDescription = props.description || this.node.path; diff --git a/packages/aws-cdk-lib/aws-ec2/lib/volume.ts b/packages/aws-cdk-lib/aws-ec2/lib/volume.ts index d284e8ef81dbb..5af9979cd8ae5 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/volume.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/volume.ts @@ -5,6 +5,7 @@ import { AccountRootPrincipal, Grant, IGrantable } from '../../aws-iam'; import { IKey, ViaServicePrincipal } from '../../aws-kms'; import { IResource, Resource, Size, SizeRoundingBehavior, Stack, Token, Tags, Names, RemovalPolicy, FeatureFlags } from '../../core'; import { md5hash } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -624,6 +625,7 @@ export class Volume extends VolumeBase { super(scope, id, { physicalName: props.volumeName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateProps(props); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts index 0e611adc996cc..673dde1f54a50 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint-service.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnVPCEndpointService, CfnVPCEndpointServicePermissions } from './ec2.generated'; import { ArnPrincipal } from '../../aws-iam'; import { Aws, Fn, IResource, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { RegionInfo } from '../../region-info'; /** @@ -101,6 +102,7 @@ export class VpcEndpointService extends Resource implements IVpcEndpointService constructor(scope: Construct, id: string, props: VpcEndpointServiceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.vpcEndpointServiceLoadBalancers === undefined || props.vpcEndpointServiceLoadBalancers.length === 0) { throw new Error('VPC Endpoint Service must have at least one load balancer specified.'); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts index 8f6c0b3666671..5e1ea76ea8765 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts @@ -9,6 +9,7 @@ import { ISubnet, IVpc, SubnetSelection } from './vpc'; import * as iam from '../../aws-iam'; import * as cxschema from '../../cloud-assembly-schema'; import { Aws, ContextProvider, IResource, Lazy, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A VPC endpoint. @@ -184,6 +185,7 @@ export class GatewayVpcEndpoint extends VpcEndpoint implements IGatewayVpcEndpoi constructor(scope: Construct, id: string, props: GatewayVpcEndpointProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const subnets: ISubnet[] = props.subnets ? flatten(props.subnets.map(s => props.vpc.selectSubnets(s).subnets)) diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpc-flow-logs.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpc-flow-logs.ts index 351b9832c7dd9..6c81fa07fbb1a 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpc-flow-logs.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpc-flow-logs.ts @@ -5,6 +5,7 @@ import * as iam from '../../aws-iam'; import * as logs from '../../aws-logs'; import * as s3 from '../../aws-s3'; import { IResource, PhysicalName, RemovalPolicy, Resource, FeatureFlags, Stack, Tags, CfnResource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { S3_CREATE_DEFAULT_LOGGING_POLICY } from '../../cx-api'; /** @@ -854,6 +855,7 @@ export class FlowLog extends FlowLogBase { constructor(scope: Construct, id: string, props: FlowLogProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const destination = props.destination || FlowLogDestination.toCloudWatchLogs(); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts index f466af74ce9d0..c60b38b9c10ea 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpc.ts @@ -18,6 +18,7 @@ import { Arn, Annotations, ContextProvider, IResource, Fn, Lazy, Resource, Stack, Token, Tags, Names, CustomResource, FeatureFlags, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { RestrictDefaultSgProvider } from '../../custom-resource-handlers/dist/aws-ec2/restrict-default-sg-provider.generated'; import * as cxapi from '../../cx-api'; import { EC2_RESTRICT_DEFAULT_SECURITY_GROUP } from '../../cx-api'; @@ -1498,6 +1499,7 @@ export class Vpc extends VpcBase { */ constructor(scope: Construct, id: string, props: VpcProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const stack = Stack.of(this); diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts index b9df1e2176af0..f17c12b7d7517 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts @@ -9,6 +9,7 @@ import { import { IVpc, SubnetSelection } from './vpc'; import * as cloudwatch from '../../aws-cloudwatch'; import { IResource, Resource, SecretValue, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IVpnConnection extends IResource { /** @@ -170,6 +171,7 @@ export class VpnGateway extends Resource implements IVpnGateway { constructor(scope: Construct, id: string, props: VpnGatewayProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // This is 'Default' instead of 'Resource', because using 'Default' will generate // a logical ID for a VpnGateway which is exactly the same as the logical ID that used diff --git a/packages/aws-cdk-lib/aws-ecr/lib/repository.ts b/packages/aws-cdk-lib/aws-ecr/lib/repository.ts index 9416905ef17bc..c5f886d3f8e0d 100644 --- a/packages/aws-cdk-lib/aws-ecr/lib/repository.ts +++ b/packages/aws-cdk-lib/aws-ecr/lib/repository.ts @@ -19,6 +19,7 @@ import { CustomResource, Aws, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AutoDeleteImagesProvider } from '../../custom-resource-handlers/dist/aws-ecr/auto-delete-images-provider.generated'; const AUTO_DELETE_IMAGES_RESOURCE_TYPE = 'Custom::ECRAutoDeleteImages'; @@ -723,6 +724,7 @@ export class Repository extends RepositoryBase { super(scope, id, { physicalName: props.repositoryName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); Repository.validateRepositoryName(this.physicalName); diff --git a/packages/aws-cdk-lib/aws-ecs/lib/base/_imported-task-definition.ts b/packages/aws-cdk-lib/aws-ecs/lib/base/_imported-task-definition.ts index 03ad4e47ce7bb..8cabd37b62106 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/base/_imported-task-definition.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/base/_imported-task-definition.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { Compatibility, NetworkMode, isEc2Compatible, isFargateCompatible, isExternalCompatible } from './task-definition'; import { IRole } from '../../../aws-iam'; import { Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IEc2TaskDefinition } from '../ec2/ec2-task-definition'; import { IFargateTaskDefinition } from '../fargate/fargate-task-definition'; @@ -76,6 +77,7 @@ export class ImportedTaskDefinition extends Resource implements IEc2TaskDefiniti constructor(scope: Construct, id: string, props: ImportedTaskDefinitionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.compatibility = props.compatibility ?? Compatibility.EC2_AND_FARGATE; this.taskDefinitionArn = props.taskDefinitionArn; diff --git a/packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts b/packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts index c15e9ebdce9d5..1bc73042eac39 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/base/task-definition.ts @@ -3,6 +3,7 @@ import { ImportedTaskDefinition } from './_imported-task-definition'; import * as ec2 from '../../../aws-ec2'; import * as iam from '../../../aws-iam'; import { IResource, Lazy, Names, PhysicalName, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { ContainerDefinition, ContainerDefinitionOptions, PortMapping, Protocol } from '../container-definition'; import { CfnTaskDefinition } from '../ecs.generated'; import { FirelensLogRouter, FirelensLogRouterDefinitionOptions, FirelensLogRouterType, obtainDefaultFluentBitECRImage } from '../firelens-log-router'; @@ -432,6 +433,7 @@ export class TaskDefinition extends TaskDefinitionBase { */ constructor(scope: Construct, id: string, props: TaskDefinitionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.family = props.family || Names.uniqueId(this); this.compatibility = props.compatibility; diff --git a/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts b/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts index a4d15dee57855..5ae89f951ebcb 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts @@ -28,6 +28,7 @@ import { FeatureFlags, Annotations, } from '../../core'; import { Disable_ECS_IMDS_Blocking, Enable_IMDS_Blocking_Deprecated_Feature } from '../../cx-api'; +import { MetadataType } from '../../core/lib/metadata-resource'; const CLUSTER_SYMBOL = Symbol.for('@aws-cdk/aws-ecs/lib/cluster.Cluster'); @@ -254,6 +255,7 @@ export class Cluster extends Resource implements ICluster { super(scope, id, { physicalName: props.clusterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); /** * clusterSettings needs to be undefined if containerInsights is not explicitly set in order to allow any diff --git a/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-service.ts b/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-service.ts index 0b5eeae081948..82141ffdf41a0 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-service.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-service.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import * as ec2 from '../../../aws-ec2'; import { Lazy, Resource, Stack, Annotations } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseService, BaseServiceOptions, DeploymentControllerType, IBaseService, IService, LaunchType } from '../base/base-service'; import { fromServiceAttributes, extractServiceNameFromArn } from '../base/from-service-attributes'; import { NetworkMode, TaskDefinition } from '../base/task-definition'; @@ -183,6 +184,7 @@ export class Ec2Service extends BaseService implements IEc2Service { placementStrategies: Lazy.any({ produce: () => this.strategies }, { omitEmptyArray: true }), schedulingStrategy: props.daemon ? 'DAEMON' : 'REPLICA', }, props.taskDefinition); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.constraints = undefined; this.strategies = []; diff --git a/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-task-definition.ts b/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-task-definition.ts index a75284934598b..cc2eff221661f 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-task-definition.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/ec2/ec2-task-definition.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import { Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -143,6 +144,7 @@ export class Ec2TaskDefinition extends TaskDefinition implements IEc2TaskDefinit pidMode: props.pidMode, inferenceAccelerators: props.inferenceAccelerators, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Validate the placement constraints Ec2TaskDefinition.validatePlacementConstraints(props.placementConstraints ?? []); diff --git a/packages/aws-cdk-lib/aws-ecs/lib/external/external-service.ts b/packages/aws-cdk-lib/aws-ecs/lib/external/external-service.ts index 4c79f5b917e03..5c2d462a3a694 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/external/external-service.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/external/external-service.ts @@ -4,11 +4,13 @@ import * as ec2 from '../../../aws-ec2'; import * as elbv2 from '../../../aws-elasticloadbalancingv2'; import * as cloudmap from '../../../aws-servicediscovery'; import { ArnFormat, Resource, Stack, Annotations } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { AssociateCloudMapServiceOptions, BaseService, BaseServiceOptions, CloudMapOptions, DeploymentControllerType, EcsTarget, IBaseService, IEcsLoadBalancerTarget, IService, LaunchType, PropagatedTagSource } from '../base/base-service'; import { fromServiceAttributes } from '../base/from-service-attributes'; import { ScalableTaskCount } from '../base/scalable-task-count'; import { Compatibility, LoadBalancerTargetOptions, TaskDefinition } from '../base/task-definition'; import { ICluster } from '../cluster'; + /** * The properties for defining a service using the External launch type. */ @@ -124,6 +126,7 @@ export class ExternalService extends BaseService implements IExternalService { cluster: props.cluster.clusterName, taskDefinition: props.deploymentController?.type === DeploymentControllerType.EXTERNAL ? undefined : props.taskDefinition.taskDefinitionArn, }, props.taskDefinition); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.node.addValidation({ validate: () => !this.taskDefinition.defaultContainer ? ['A TaskDefinition must have at least one essential container'] : [], diff --git a/packages/aws-cdk-lib/aws-ecs/lib/external/external-task-definition.ts b/packages/aws-cdk-lib/aws-ecs/lib/external/external-task-definition.ts index 16af3a90b94b3..d286fcae15c72 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/external/external-task-definition.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/external/external-task-definition.ts @@ -1,4 +1,5 @@ import { Construct } from 'constructs'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../../lib/base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -79,6 +80,7 @@ export class ExternalTaskDefinition extends TaskDefinition implements IExternalT compatibility: Compatibility.EXTERNAL, networkMode: props.networkMode ?? NetworkMode.BRIDGE, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } /** diff --git a/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-service.ts b/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-service.ts index b4d1324e18947..55cae79acd58f 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-service.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-service.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import * as ec2 from '../../../aws-ec2'; import * as cdk from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseService, BaseServiceOptions, DeploymentControllerType, IBaseService, IService, LaunchType } from '../base/base-service'; import { fromServiceAttributes, extractServiceNameFromArn } from '../base/from-service-attributes'; import { TaskDefinition } from '../base/task-definition'; @@ -156,6 +157,7 @@ export class FargateService extends BaseService implements IFargateService { taskDefinition: props.deploymentController?.type === DeploymentControllerType.EXTERNAL ? undefined : props.taskDefinition.taskDefinitionArn, platformVersion: props.platformVersion, }, props.taskDefinition); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let securityGroups; if (props.securityGroup !== undefined) { diff --git a/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-task-definition.ts b/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-task-definition.ts index e6bc7876daa04..e77b7b863b128 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-task-definition.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/fargate/fargate-task-definition.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import { Tokenization, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -164,6 +165,7 @@ export class FargateTaskDefinition extends TaskDefinition implements IFargateTas networkMode: NetworkMode.AWS_VPC, pidMode: props.pidMode, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // eslint-disable-next-line max-len if (props.ephemeralStorageGiB && !Token.isUnresolved(props.ephemeralStorageGiB) && (props.ephemeralStorageGiB < 21 || props.ephemeralStorageGiB > 200)) { diff --git a/packages/aws-cdk-lib/aws-efs/lib/access-point.ts b/packages/aws-cdk-lib/aws-efs/lib/access-point.ts index d6bb8a59d5f5a..d4b757714f7a1 100644 --- a/packages/aws-cdk-lib/aws-efs/lib/access-point.ts +++ b/packages/aws-cdk-lib/aws-efs/lib/access-point.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IFileSystem } from './efs-file-system'; import { CfnAccessPoint } from './efs.generated'; import { ArnFormat, IResource, Resource, Stack, Tags, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an EFS AccessPoint @@ -209,6 +210,7 @@ export class AccessPoint extends AccessPointBase { constructor(scope: Construct, id: string, props: AccessPointProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const clientToken = props.clientToken; if ((clientToken?.length === 0 || (clientToken && clientToken.length > 64)) && !Token.isUnresolved(clientToken)) { diff --git a/packages/aws-cdk-lib/aws-efs/lib/efs-file-system.ts b/packages/aws-cdk-lib/aws-efs/lib/efs-file-system.ts index 4a14ee5870df0..f0a521353cba7 100644 --- a/packages/aws-cdk-lib/aws-efs/lib/efs-file-system.ts +++ b/packages/aws-cdk-lib/aws-efs/lib/efs-file-system.ts @@ -5,6 +5,7 @@ import * as ec2 from '../../aws-ec2'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { ArnFormat, FeatureFlags, Lazy, RemovalPolicy, Resource, Size, Stack, Tags, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -728,6 +729,7 @@ export class FileSystem extends FileSystemBase { */ constructor(scope: Construct, id: string, props: FileSystemProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.props = props; diff --git a/packages/aws-cdk-lib/aws-eks/lib/access-entry.ts b/packages/aws-cdk-lib/aws-eks/lib/access-entry.ts index 30f20ed0dee00..2fcdf267b932e 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/access-entry.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/access-entry.ts @@ -4,6 +4,7 @@ import { CfnAccessEntry } from './eks.generated'; import { Resource, IResource, Aws, Lazy, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an access entry in an Amazon EKS cluster. @@ -326,6 +327,7 @@ export class AccessEntry extends Resource implements IAccessEntry { constructor(scope: Construct, id: string, props: AccessEntryProps ) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.cluster = props.cluster; this.principal = props.principal; diff --git a/packages/aws-cdk-lib/aws-eks/lib/addon.ts b/packages/aws-cdk-lib/aws-eks/lib/addon.ts index 755c098289be8..75143b93cece6 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/addon.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/addon.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { ICluster } from './cluster'; import { CfnAddon } from './eks.generated'; import { ArnFormat, IResource, Resource, Stack, Fn } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an Amazon EKS Add-On. @@ -126,6 +127,7 @@ export class Addon extends Resource implements IAddon { super(scope, id, { physicalName: props.addonName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.clusterName = props.cluster.clusterName; this.addonName = props.addonName; diff --git a/packages/aws-cdk-lib/aws-eks/lib/cluster.ts b/packages/aws-cdk-lib/aws-eks/lib/cluster.ts index 8f66f4efa8b3a..8f54f0775743e 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/cluster.ts @@ -26,6 +26,7 @@ import * as kms from '../../aws-kms'; import * as lambda from '../../aws-lambda'; import * as ssm from '../../aws-ssm'; import { Annotations, CfnOutput, CfnResource, IResource, Resource, Stack, Tags, Token, Duration, Size } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; // defaults are based on https://eksctl.io const DEFAULT_CAPACITY_COUNT = 2; @@ -1572,6 +1573,7 @@ export class Cluster extends ClusterBase { super(scope, id, { physicalName: props.clusterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const stack = Stack.of(this); diff --git a/packages/aws-cdk-lib/aws-eks/lib/fargate-cluster.ts b/packages/aws-cdk-lib/aws-eks/lib/fargate-cluster.ts index 022d6bc6ecdbf..921955335cbdd 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/fargate-cluster.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/fargate-cluster.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { Cluster, ClusterOptions, CoreDnsComputeType } from './cluster'; import { FargateProfile, FargateProfileOptions } from './fargate-profile'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Configuration props for EKS Fargate. @@ -35,6 +36,7 @@ export class FargateCluster extends Cluster { coreDnsComputeType: props.coreDnsComputeType ?? CoreDnsComputeType.FARGATE, version: props.version, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.defaultProfile = this.addFargateProfile( props.defaultProfile?.fargateProfileName ?? (props.defaultProfile ? 'custom' : 'default'), diff --git a/packages/aws-cdk-lib/aws-eks/lib/managed-nodegroup.ts b/packages/aws-cdk-lib/aws-eks/lib/managed-nodegroup.ts index 9b5b7b489b3e4..834b63d1ae3d5 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/managed-nodegroup.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/managed-nodegroup.ts @@ -6,6 +6,7 @@ import { IRole, ManagedPolicy, PolicyStatement, Role, ServicePrincipal } from '. import { IResource, Resource, Annotations, withResolved, FeatureFlags } from '../../core'; import * as cxapi from '../../cx-api'; import { isGpuInstanceType } from './private/nodegroup'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * NodeGroup interface @@ -390,6 +391,7 @@ export class Nodegroup extends Resource implements INodegroup { super(scope, id, { physicalName: props.nodegroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.cluster = props.cluster; diff --git a/packages/aws-cdk-lib/aws-eks/lib/oidc-provider.ts b/packages/aws-cdk-lib/aws-eks/lib/oidc-provider.ts index d11b7fdff1eb8..1187a99849a79 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/oidc-provider.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/oidc-provider.ts @@ -1,5 +1,6 @@ import { Construct } from 'constructs'; import * as iam from '../../aws-iam'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Initialization properties for `OpenIdConnectProvider`. @@ -48,5 +49,6 @@ export class OpenIdConnectProvider extends iam.OpenIdConnectProvider { url: props.url, clientIds, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts b/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts index cf9ee681a7ffd..4ebb163c2b962 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts @@ -5,6 +5,7 @@ import { SecurityGroup, SelectedSubnets, SubnetSelection, SubnetType, } from '../../aws-ec2'; import { Duration, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for a LoadBalancer @@ -255,6 +256,7 @@ export class LoadBalancer extends Resource implements IConnectable { constructor(scope: Construct, id: string, props: LoadBalancerProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.securityGroup = new SecurityGroup(this, 'SecurityGroup', { vpc: props.vpc, allowAllOutbound: false }); this.connections = new Connections({ securityGroups: [this.securityGroup] }); diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-listener.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-listener.ts index d55466374bdd5..3e4b33c6df2b8 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-listener.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-listener.ts @@ -9,6 +9,7 @@ import { ITrustStore } from './trust-store'; import * as ec2 from '../../../aws-ec2'; import * as cxschema from '../../../cloud-assembly-schema'; import { Duration, FeatureFlags, Lazy, Resource, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import * as cxapi from '../../../cx-api'; import { BaseListener, BaseListenerLookupOptions, IListener } from '../shared/base-listener'; import { HealthCheck } from '../shared/base-target-group'; @@ -268,6 +269,7 @@ export class ApplicationListener extends BaseListener implements IApplicationLis trustStoreArn: props.mutualAuthentication?.trustStore?.trustStoreArn, } : undefined, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.loadBalancer = props.loadBalancer; this.protocol = protocol; diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-load-balancer.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-load-balancer.ts index 89594b0654250..a5e504aadc3de 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-load-balancer.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/application-load-balancer.ts @@ -8,6 +8,7 @@ import { ServicePrincipal } from '../../../aws-iam/lib/principals'; import * as s3 from '../../../aws-s3'; import * as cxschema from '../../../cloud-assembly-schema'; import { CfnResource, Duration, Lazy, Names, Resource, Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import * as cxapi from '../../../cx-api'; import { ApplicationELBMetrics } from '../elasticloadbalancingv2-canned-metrics.generated'; import { BaseLoadBalancer, BaseLoadBalancerLookupOptions, BaseLoadBalancerProps, ILoadBalancerV2 } from '../shared/base-load-balancer'; @@ -184,6 +185,7 @@ export class ApplicationLoadBalancer extends BaseLoadBalancer implements IApplic securityGroups: Lazy.list({ produce: () => this.connections.securityGroups.map(sg => sg.securityGroupId) }), ipAddressType: props.ipAddressType, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.ipAddressType = props.ipAddressType ?? IpAddressType.IPV4; diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store-revocation.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store-revocation.ts index 67cd5f7eda79d..29666dfb65a5b 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store-revocation.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store-revocation.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { ITrustStore } from './trust-store'; import { IBucket } from '../../../aws-s3'; import { Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnTrustStoreRevocation } from '../elasticloadbalancingv2.generated'; /** @@ -66,6 +67,7 @@ export class TrustStoreRevocation extends Resource { constructor(scope: Construct, id: string, props: TrustStoreRevocationProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnTrustStoreRevocation(this, 'Resource', { trustStoreArn: props.trustStore.trustStoreArn, diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store.ts index 75a0841f1b45e..77b861d51d30e 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/alb/trust-store.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { IBucket } from '../../../aws-s3'; import { IResource, Resource, Fn, Names, Lazy, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { CfnTrustStore } from '../elasticloadbalancingv2.generated'; /** @@ -104,6 +105,7 @@ export class TrustStore extends Resource implements ITrustStore { produce: () => Names.uniqueResourceName(this, { maxLength: 32 }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.trustStoreName !== undefined && !Token.isUnresolved(props.trustStoreName)) { diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-listener.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-listener.ts index 6b97718474c21..4acf78ea48cc6 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-listener.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-listener.ts @@ -5,6 +5,7 @@ import { INetworkLoadBalancer } from './network-load-balancer'; import { INetworkLoadBalancerTarget, INetworkTargetGroup, NetworkTargetGroup } from './network-target-group'; import * as cxschema from '../../../cloud-assembly-schema'; import { Duration, Resource, Lazy, Token } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { BaseListener, BaseListenerLookupOptions, IListener } from '../shared/base-listener'; import { HealthCheck } from '../shared/base-target-group'; import { AlpnPolicy, Protocol, SslPolicy } from '../shared/enums'; @@ -203,6 +204,7 @@ export class NetworkListener extends BaseListener implements INetworkListener { certificates: Lazy.any({ produce: () => this.certificateArns.map(certificateArn => ({ certificateArn })) }, { omitEmptyArray: true }), alpnPolicy: props.alpnPolicy ? [props.alpnPolicy] : undefined, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.certificateArns = []; this.loadBalancer = props.loadBalancer; diff --git a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-load-balancer.ts b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-load-balancer.ts index 7a485b102155e..0844f937d1445 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-load-balancer.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/nlb/network-load-balancer.ts @@ -4,6 +4,7 @@ import * as cloudwatch from '../../../aws-cloudwatch'; import * as ec2 from '../../../aws-ec2'; import * as cxschema from '../../../cloud-assembly-schema'; import { Lazy, Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import * as cxapi from '../../../cx-api'; import { NetworkELBMetrics } from '../elasticloadbalancingv2-canned-metrics.generated'; import { BaseLoadBalancer, BaseLoadBalancerLookupOptions, BaseLoadBalancerProps, ILoadBalancerV2 } from '../shared/base-load-balancer'; @@ -274,6 +275,7 @@ export class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoa }), enablePrefixForIpv6SourceNat: props.enablePrefixForIpv6SourceNat === true ? 'on': props.enablePrefixForIpv6SourceNat === false ? 'off' : undefined, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.enablePrefixForIpv6SourceNat = props.enablePrefixForIpv6SourceNat; this.metrics = new NetworkLoadBalancerMetrics(this, this.loadBalancerFullName); diff --git a/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts b/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts index 50d411a8f7463..5e236d2b2f36c 100644 --- a/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts +++ b/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts @@ -14,6 +14,7 @@ import * as logs from '../../aws-logs'; import * as route53 from '../../aws-route53'; import * as secretsmanager from '../../aws-secretsmanager'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Elasticsearch version @@ -1466,6 +1467,7 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { super(scope, id, { physicalName: props.domainName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const defaultInstanceType = 'r5.large.elasticsearch'; const warmDefaultInstanceType = 'ultrawarm1.medium.elasticsearch'; diff --git a/packages/aws-cdk-lib/aws-events/lib/api-destination.ts b/packages/aws-cdk-lib/aws-events/lib/api-destination.ts index 3824c70762bbe..6e09edb97ff28 100644 --- a/packages/aws-cdk-lib/aws-events/lib/api-destination.ts +++ b/packages/aws-cdk-lib/aws-events/lib/api-destination.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { HttpMethod, IConnection } from './connection'; import { CfnApiDestination } from './events.generated'; import { ArnFormat, IResource, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The event API Destination properties @@ -131,6 +132,7 @@ export class ApiDestination extends Resource implements IApiDestination { super(scope, id, { physicalName: props.apiDestinationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.connection = props.connection; diff --git a/packages/aws-cdk-lib/aws-events/lib/archive.ts b/packages/aws-cdk-lib/aws-events/lib/archive.ts index bbdababa38f87..d9d4a1e72cdaf 100644 --- a/packages/aws-cdk-lib/aws-events/lib/archive.ts +++ b/packages/aws-cdk-lib/aws-events/lib/archive.ts @@ -4,6 +4,7 @@ import { EventPattern } from './event-pattern'; import { CfnArchive } from './events.generated'; import { renderEventPattern } from './util'; import { Duration, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The event archive base properties @@ -62,6 +63,7 @@ export class Archive extends Resource { constructor(scope: Construct, id: string, props: ArchiveProps) { super(scope, id, { physicalName: props.archiveName }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let archive = new CfnArchive(this, 'Archive', { sourceArn: props.sourceEventBus.eventBusArn, diff --git a/packages/aws-cdk-lib/aws-events/lib/connection.ts b/packages/aws-cdk-lib/aws-events/lib/connection.ts index 08f4a2e21d950..3bd22d0d0fbe4 100644 --- a/packages/aws-cdk-lib/aws-events/lib/connection.ts +++ b/packages/aws-cdk-lib/aws-events/lib/connection.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnConnection } from './events.generated'; import { IResource, Resource, Stack, SecretValue } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * An API Destination Connection @@ -342,6 +343,7 @@ export class Connection extends Resource implements IConnection { super(scope, id, { physicalName: props.connectionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const authBind = props.authorization._bind(); diff --git a/packages/aws-cdk-lib/aws-events/lib/event-bus.ts b/packages/aws-cdk-lib/aws-events/lib/event-bus.ts index 9af6134018d18..3f26ff9c5e360 100644 --- a/packages/aws-cdk-lib/aws-events/lib/event-bus.ts +++ b/packages/aws-cdk-lib/aws-events/lib/event-bus.ts @@ -5,6 +5,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as sqs from '../../aws-sqs'; import { ArnFormat, IResource, Lazy, Names, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface which all EventBus based classes MUST implement @@ -345,6 +346,7 @@ export class EventBus extends EventBusBase { ); super(scope, id, { physicalName: eventBusName }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props?.description && !Token.isUnresolved(props.description) && props.description.length > 512) { throw new Error(`description must be less than or equal to 512 characters, got ${props.description.length}`); diff --git a/packages/aws-cdk-lib/aws-events/lib/rule.ts b/packages/aws-cdk-lib/aws-events/lib/rule.ts index 67b26279e0322..17f8756d8b7dd 100644 --- a/packages/aws-cdk-lib/aws-events/lib/rule.ts +++ b/packages/aws-cdk-lib/aws-events/lib/rule.ts @@ -9,6 +9,7 @@ import { IRuleTarget } from './target'; import { mergeEventPattern, renderEventPattern } from './util'; import { IRole, PolicyStatement, Role, ServicePrincipal } from '../../aws-iam'; import { App, IResource, Lazy, Names, Resource, Stack, Token, TokenComparison, PhysicalName, ArnFormat, Annotations } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for defining an EventBridge Rule @@ -95,6 +96,7 @@ export class Rule extends Resource implements IRule { super(determineRuleScope(scope, props), id, { physicalName: props.ruleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.eventBus && props.schedule) { throw new Error('Cannot associate rule with \'eventBus\' when using \'schedule\''); diff --git a/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts b/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts index 98aea5cde3d56..d16882941cde4 100644 --- a/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts +++ b/packages/aws-cdk-lib/aws-fsx/lib/lustre-file-system.ts @@ -5,6 +5,7 @@ import { CfnFileSystem } from './fsx.generated'; import { LustreMaintenanceTime } from './maintenance-time'; import { Connections, ISecurityGroup, ISubnet, Port, SecurityGroup } from '../../aws-ec2'; import { Aws, Duration, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The Lustre version for the file system. @@ -316,6 +317,7 @@ export class LustreFileSystem extends FileSystemBase { constructor(scope: Construct, id: string, props: LustreFileSystemProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateProps(props); diff --git a/packages/aws-cdk-lib/aws-globalaccelerator/lib/accelerator.ts b/packages/aws-cdk-lib/aws-globalaccelerator/lib/accelerator.ts index ecf2c587bfed1..2ea188949ac74 100644 --- a/packages/aws-cdk-lib/aws-globalaccelerator/lib/accelerator.ts +++ b/packages/aws-cdk-lib/aws-globalaccelerator/lib/accelerator.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import * as ga from './globalaccelerator.generated'; import { Listener, ListenerOptions } from './listener'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The interface of the Accelerator @@ -188,6 +189,7 @@ export class Accelerator extends cdk.Resource implements IAccelerator { constructor(scope: Construct, id: string, props: AcceleratorProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateAcceleratorName(props.acceleratorName); this.validateIpAddresses(props.ipAddresses); diff --git a/packages/aws-cdk-lib/aws-globalaccelerator/lib/endpoint-group.ts b/packages/aws-cdk-lib/aws-globalaccelerator/lib/endpoint-group.ts index 4ac721b035ce5..57fe1f6a28cc2 100644 --- a/packages/aws-cdk-lib/aws-globalaccelerator/lib/endpoint-group.ts +++ b/packages/aws-cdk-lib/aws-globalaccelerator/lib/endpoint-group.ts @@ -5,6 +5,7 @@ import * as ga from './globalaccelerator.generated'; import { IListener } from './listener'; import * as ec2 from '../../aws-ec2'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The interface of the EndpointGroup @@ -178,6 +179,7 @@ export class EndpointGroup extends cdk.Resource implements IEndpointGroup { constructor(scope: Construct, id: string, props: EndpointGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new ga.CfnEndpointGroup(this, 'Resource', { listenerArn: props.listener.listenerArn, diff --git a/packages/aws-cdk-lib/aws-globalaccelerator/lib/listener.ts b/packages/aws-cdk-lib/aws-globalaccelerator/lib/listener.ts index fd8be5d28bc0a..183239fa1d291 100644 --- a/packages/aws-cdk-lib/aws-globalaccelerator/lib/listener.ts +++ b/packages/aws-cdk-lib/aws-globalaccelerator/lib/listener.ts @@ -3,6 +3,7 @@ import { IAccelerator } from './accelerator'; import { EndpointGroup, EndpointGroupOptions } from './endpoint-group'; import * as ga from './globalaccelerator.generated'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface of the Listener @@ -138,6 +139,7 @@ export class Listener extends cdk.Resource implements IListener { constructor(scope: Construct, id: string, props: ListenerProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new ga.CfnListener(this, 'Resource', { acceleratorArn: props.accelerator.acceleratorArn, diff --git a/packages/aws-cdk-lib/aws-iam/lib/access-key.ts b/packages/aws-cdk-lib/aws-iam/lib/access-key.ts index a02237b947d97..4964d9c9e3aad 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/access-key.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/access-key.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnAccessKey } from './iam.generated'; import { IUser } from './user'; import { IResource, Resource, SecretValue } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Valid statuses for an IAM Access Key. @@ -79,6 +80,7 @@ export class AccessKey extends Resource implements IAccessKey { constructor(scope: Construct, id: string, props: AccessKeyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const accessKey = new CfnAccessKey(this, 'Resource', { userName: props.user.userName, serial: props.serial, diff --git a/packages/aws-cdk-lib/aws-iam/lib/group.ts b/packages/aws-cdk-lib/aws-iam/lib/group.ts index 985746176b252..279cd30d4027a 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/group.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/group.ts @@ -8,6 +8,7 @@ import { AddToPrincipalPolicyResult, ArnPrincipal, IPrincipal, PrincipalPolicyFr import { AttachedPolicies } from './private/util'; import { IUser } from './user'; import { Annotations, ArnFormat, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an IAM Group. @@ -183,6 +184,7 @@ export class Group extends GroupBase { super(scope, id, { physicalName: props.groupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.managedPolicies.push(...props.managedPolicies || []); diff --git a/packages/aws-cdk-lib/aws-iam/lib/instance-profile.ts b/packages/aws-cdk-lib/aws-iam/lib/instance-profile.ts index 6a4d979c7241c..5d42f777fcba4 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/instance-profile.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/instance-profile.ts @@ -3,6 +3,7 @@ import { CfnInstanceProfile } from './iam.generated'; import { ServicePrincipal } from './principals'; import { IRole, Role } from './role'; import { Resource, Arn, Stack, IResource, PhysicalName } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an IAM Instance Profile @@ -169,6 +170,7 @@ export class InstanceProfile extends InstanceProfileBase { constructor(scope: Construct, id: string, props: InstanceProfileProps = {}) { super(scope, id, { physicalName: props.instanceProfileName }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this._role = props.role || new Role(this, 'InstanceRole', { roleName: PhysicalName.GENERATE_IF_NEEDED, diff --git a/packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts b/packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts index 771bc0a41e92a..ce8edbba43bec 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts @@ -6,6 +6,7 @@ import { PolicyStatement } from './policy-statement'; import { AddToPrincipalPolicyResult, IPrincipal, PrincipalPolicyFragment } from './principals'; import { IRole, Role, RoleProps } from './role'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for defining a LazyRole @@ -37,6 +38,7 @@ export class LazyRole extends cdk.Resource implements IRole { constructor(scope: Construct, id: string, private readonly props: LazyRoleProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } /** diff --git a/packages/aws-cdk-lib/aws-iam/lib/managed-policy.ts b/packages/aws-cdk-lib/aws-iam/lib/managed-policy.ts index 4c335cf38b489..80349673a1a74 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/managed-policy.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/managed-policy.ts @@ -9,6 +9,7 @@ import { IRole } from './role'; import { IUser } from './user'; import { ArnFormat, Resource, Stack, Arn, Aws } from '../../core'; import { getCustomizeRolesConfig, PolicySynthesizer } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A managed policy @@ -214,6 +215,7 @@ export class ManagedPolicy extends Resource implements IManagedPolicy, IGrantabl super(scope, id, { physicalName: props.managedPolicyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.description = props.description || ''; this.path = props.path || '/'; diff --git a/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts b/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts index b8c5494038a24..3a85f892b6457 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts @@ -6,6 +6,7 @@ import { Resource, Token, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { OidcProvider } from '../../custom-resource-handlers/dist/aws-iam/oidc-provider.generated'; const RESOURCE_TYPE = 'Custom::AWSCDKOpenIdConnectProvider'; @@ -137,6 +138,7 @@ export class OpenIdConnectProvider extends Resource implements IOpenIdConnectPro */ public constructor(scope: Construct, id: string, props: OpenIdConnectProviderProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const provider = this.getOrCreateProvider(); const resource = new CustomResource(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-iam/lib/policy.ts b/packages/aws-cdk-lib/aws-iam/lib/policy.ts index a8dd67f5fecbf..8337f7ecf693d 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/policy.ts @@ -8,6 +8,7 @@ import { generatePolicyName, undefinedIfEmpty } from './private/util'; import { IRole } from './role'; import { IUser } from './user'; import { IResource, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an IAM Policy @@ -137,6 +138,7 @@ export class Policy extends Resource implements IPolicy, IGrantable { // that shouod be sufficient to ensure uniqueness within a principal. Lazy.string({ produce: () => generatePolicyName(scope, resource.logicalId) }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const self = this; diff --git a/packages/aws-cdk-lib/aws-iam/lib/private/immutable-role.ts b/packages/aws-cdk-lib/aws-iam/lib/private/immutable-role.ts index 1528e83485c0c..0a20db98a22a0 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/private/immutable-role.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/private/immutable-role.ts @@ -1,5 +1,6 @@ import { Construct, Dependable, DependencyGroup } from 'constructs'; import { Resource } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { Grant } from '../grant'; import { IManagedPolicy } from '../managed-policy'; import { Policy } from '../policy'; @@ -34,6 +35,7 @@ export class ImmutableRole extends Resource implements IRole { account: role.env.account, region: role.env.region, }); + this.node.addMetadata(MetadataType.CONSTRUCT, role); // implement IDependable privately Dependable.implement(this, { diff --git a/packages/aws-cdk-lib/aws-iam/lib/private/imported-role.ts b/packages/aws-cdk-lib/aws-iam/lib/private/imported-role.ts index 52cd4d332a140..20e857e2bcd5d 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/private/imported-role.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/private/imported-role.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { MAX_POLICY_NAME_LEN } from './util'; import { FeatureFlags, Names, Resource, Token, TokenComparison, Annotations } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { IAM_IMPORTED_ROLE_STACK_SAFE_DEFAULT_POLICY_NAME } from '../../../cx-api'; import { Grant } from '../grant'; import { IManagedPolicy, ManagedPolicy } from '../managed-policy'; @@ -31,6 +32,7 @@ export class ImportedRole extends Resource implements IRole, IComparablePrincipa super(scope, id, { account: props.account, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.roleArn = props.roleArn; this.roleName = props.roleName; diff --git a/packages/aws-cdk-lib/aws-iam/lib/private/precreated-role.ts b/packages/aws-cdk-lib/aws-iam/lib/private/precreated-role.ts index 3fa24cffbf1d7..28055beb09505 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/private/precreated-role.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/private/precreated-role.ts @@ -1,6 +1,7 @@ import { Construct, Dependable, DependencyGroup } from 'constructs'; import { Resource, Stack } from '../../../core'; import { PolicySynthesizer } from '../../../core/lib/helpers-internal'; +import { MetadataType } from '../../../core/lib/metadata-resource'; import { Grant } from '../grant'; import { IManagedPolicy } from '../managed-policy'; import { Policy } from '../policy'; @@ -74,6 +75,7 @@ export class PrecreatedRole extends Resource implements IRole { account: props.role.env.account, region: props.role.env.region, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.role = props.role; this.assumeRoleAction = this.role.assumeRoleAction; this.policyFragment = this.role.policyFragment; diff --git a/packages/aws-cdk-lib/aws-iam/lib/role.ts b/packages/aws-cdk-lib/aws-iam/lib/role.ts index 94a0f8af47723..52e5438514839 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/role.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/role.ts @@ -15,6 +15,7 @@ import { PrecreatedRole } from './private/precreated-role'; import { AttachedPolicies, UniqueStringSet } from './private/util'; import { ArnFormat, Duration, Resource, Stack, Token, TokenComparison, Aspects, Annotations, RemovalPolicy, AspectPriority } from '../../core'; import { getCustomizeRolesConfig, getPrecreatedRoleConfig, CUSTOMIZE_ROLES_CONTEXT_KEY, CustomizeRoleConfig } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; const MAX_INLINE_SIZE = 10000; const MAX_MANAGEDPOL_SIZE = 6000; @@ -412,6 +413,7 @@ export class Role extends Resource implements IRole { super(scope, id, { physicalName: props.roleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.roleName && !Token.isUnresolved(props.roleName) && !/^[\w+=,.@-]{1,64}$/.test(props.roleName)) { throw new Error('Invalid roleName. The name must be a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. Length must be between 1 and 64 characters.'); diff --git a/packages/aws-cdk-lib/aws-iam/lib/saml-provider.ts b/packages/aws-cdk-lib/aws-iam/lib/saml-provider.ts index a3826b7ed7087..dcc8a4a8f43df 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/saml-provider.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/saml-provider.ts @@ -2,6 +2,7 @@ import * as fs from 'fs'; import { Construct } from 'constructs'; import { CfnSAMLProvider } from './iam.generated'; import { IResource, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A SAML provider @@ -85,6 +86,7 @@ export class SamlProvider extends Resource implements ISamlProvider { constructor(scope: Construct, id: string, props: SamlProviderProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.name && !Token.isUnresolved(props.name) && !/^[\w+=,.@-]{1,128}$/.test(props.name)) { throw new Error('Invalid SAML provider name. The name must be a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. Length must be between 1 and 128 characters.'); diff --git a/packages/aws-cdk-lib/aws-iam/lib/user.ts b/packages/aws-cdk-lib/aws-iam/lib/user.ts index edbd0f59a4f25..3d06bae8697b2 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/user.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/user.ts @@ -8,6 +8,7 @@ import { PolicyStatement } from './policy-statement'; import { AddToPrincipalPolicyResult, ArnPrincipal, IPrincipal, PrincipalPolicyFragment } from './principals'; import { AttachedPolicies, undefinedIfEmpty } from './private/util'; import { Arn, ArnFormat, Lazy, Resource, SecretValue, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Represents an IAM user @@ -258,6 +259,7 @@ export class User extends Resource implements IIdentity, IUser { super(scope, id, { physicalName: props.userName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.managedPolicies.push(...props.managedPolicies || []); this.permissionsBoundary = props.permissionsBoundary; diff --git a/packages/aws-cdk-lib/aws-kinesis/lib/resource-policy.ts b/packages/aws-cdk-lib/aws-kinesis/lib/resource-policy.ts index 3987268f52bfe..d291855ffd517 100644 --- a/packages/aws-cdk-lib/aws-kinesis/lib/resource-policy.ts +++ b/packages/aws-cdk-lib/aws-kinesis/lib/resource-policy.ts @@ -3,6 +3,7 @@ import { CfnResourcePolicy } from './kinesis.generated'; import { IStream } from './stream'; import { PolicyDocument } from '../../aws-iam'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties to associate a data stream with a policy @@ -43,6 +44,7 @@ export class ResourcePolicy extends Resource { constructor(scope: Construct, id: string, props: ResourcePolicyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.document = props.policyDocument ?? this.document; diff --git a/packages/aws-cdk-lib/aws-kinesis/lib/stream.ts b/packages/aws-cdk-lib/aws-kinesis/lib/stream.ts index 0fb74df769f50..2fce1d7aa6ed9 100644 --- a/packages/aws-cdk-lib/aws-kinesis/lib/stream.ts +++ b/packages/aws-cdk-lib/aws-kinesis/lib/stream.ts @@ -6,6 +6,7 @@ import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { ArnFormat, Aws, CfnCondition, Duration, Fn, IResolvable, IResource, RemovalPolicy, Resource, ResourceProps, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; const READ_OPERATIONS = [ 'kinesis:DescribeStreamSummary', @@ -813,6 +814,7 @@ export class Stream extends StreamBase { super(scope, id, { physicalName: props.streamName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let shardCount = props.shardCount; const streamMode = props.streamMode; diff --git a/packages/aws-cdk-lib/aws-kms/lib/alias.ts b/packages/aws-cdk-lib/aws-kms/lib/alias.ts index 1c98b4ebfadd0..36624c492a14c 100644 --- a/packages/aws-cdk-lib/aws-kms/lib/alias.ts +++ b/packages/aws-cdk-lib/aws-kms/lib/alias.ts @@ -3,6 +3,7 @@ import { IKey } from './key'; import { CfnAlias } from './kms.generated'; import * as iam from '../../aws-iam'; import { FeatureFlags, RemovalPolicy, Resource, Stack, Token, Tokenization } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { KMS_ALIAS_NAME_REF } from '../../cx-api'; const REQUIRED_ALIAS_PREFIX = 'alias/'; @@ -251,6 +252,7 @@ export class Alias extends AliasBase { super(scope, id, { physicalName: aliasName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.aliasTargetKey = props.targetKey; diff --git a/packages/aws-cdk-lib/aws-kms/lib/key.ts b/packages/aws-cdk-lib/aws-kms/lib/key.ts index 68c5a102f0e47..6c4cb0769dea9 100644 --- a/packages/aws-cdk-lib/aws-kms/lib/key.ts +++ b/packages/aws-cdk-lib/aws-kms/lib/key.ts @@ -19,6 +19,7 @@ import { Stack, Token, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -766,6 +767,7 @@ export class Key extends KeyBase { constructor(scope: Construct, id: string, props: KeyProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const denyLists = { [KeyUsage.ENCRYPT_DECRYPT]: [ diff --git a/packages/aws-cdk-lib/aws-lambda-nodejs/lib/function.ts b/packages/aws-cdk-lib/aws-lambda-nodejs/lib/function.ts index 8faf919bd2d3e..c209388aab248 100644 --- a/packages/aws-cdk-lib/aws-lambda-nodejs/lib/function.ts +++ b/packages/aws-cdk-lib/aws-lambda-nodejs/lib/function.ts @@ -8,6 +8,7 @@ import { callsites, findUpMultiple, isSdkV2Runtime } from './util'; import { Architecture } from '../../aws-lambda'; import * as lambda from '../../aws-lambda'; import { Annotations, FeatureFlags } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { LAMBDA_NODEJS_USE_LATEST_RUNTIME } from '../../cx-api'; /** @@ -154,6 +155,7 @@ export class NodejsFunction extends lambda.Function { handler: handler.indexOf('.') !== -1 ? `${handler}` : `index.${handler}`, }); } + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Enable connection reuse for aws-sdk v2, do not set for sdk v3 if (isSdkV2Runtime(runtime)) { diff --git a/packages/aws-cdk-lib/aws-lambda/lib/alias.ts b/packages/aws-cdk-lib/aws-lambda/lib/alias.ts index fbfa249286c99..e8b93dc908085 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/alias.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/alias.ts @@ -10,6 +10,7 @@ import * as appscaling from '../../aws-applicationautoscaling'; import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { ArnFormat } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IAlias extends IFunction { /** @@ -145,6 +146,7 @@ export class Alias extends QualifiedFunctionBase implements IAlias { super(scope, id, { physicalName: props.aliasName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.lambda = props.version.lambda; this.aliasName = this.physicalName; diff --git a/packages/aws-cdk-lib/aws-lambda/lib/code-signing-config.ts b/packages/aws-cdk-lib/aws-lambda/lib/code-signing-config.ts index 573a198f16955..0cf66f327bbae 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/code-signing-config.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/code-signing-config.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnCodeSigningConfig } from './lambda.generated'; import { ISigningProfile } from '../../aws-signer'; import { ArnFormat, IResource, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Code signing configuration policy for deployment validation failure. @@ -100,6 +101,7 @@ export class CodeSigningConfig extends Resource implements ICodeSigningConfig { constructor(scope: Construct, id: string, props: CodeSigningConfigProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const signingProfileVersionArns = props.signingProfiles.map(signingProfile => { return signingProfile.signingProfileVersionArn; diff --git a/packages/aws-cdk-lib/aws-lambda/lib/event-invoke-config.ts b/packages/aws-cdk-lib/aws-lambda/lib/event-invoke-config.ts index 1393ce6328b1e..b8955d334735f 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/event-invoke-config.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/event-invoke-config.ts @@ -3,6 +3,7 @@ import { DestinationType, IDestination } from './destination'; import { IFunction } from './function-base'; import { CfnEventInvokeConfig } from './lambda.generated'; import { Duration, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options to add an EventInvokeConfig to a function. @@ -72,6 +73,7 @@ export interface EventInvokeConfigProps extends EventInvokeConfigOptions { export class EventInvokeConfig extends Resource { constructor(scope: Construct, id: string, props: EventInvokeConfigProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.maxEventAge && (props.maxEventAge.toSeconds() < 60 || props.maxEventAge.toSeconds() > 21600)) { throw new Error('`maximumEventAge` must represent a `Duration` that is between 60 and 21600 seconds.'); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts b/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts index a673d6282dc1a..b8b7603407fbc 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/event-source-mapping.ts @@ -5,6 +5,7 @@ import { CfnEventSourceMapping } from './lambda.generated'; import * as iam from '../../aws-iam'; import { IKey } from '../../aws-kms'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The type of authentication protocol or the VPC components for your event source's SourceAccessConfiguration @@ -400,6 +401,7 @@ export class EventSourceMapping extends cdk.Resource implements IEventSourceMapp constructor(scope: Construct, id: string, props: EventSourceMappingProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.eventSourceArn == undefined && props.kafkaBootstrapServers == undefined) { throw new Error('Either eventSourceArn or kafkaBootstrapServers must be set'); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts b/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts index 288c425232003..8b2ab3e69e031 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts @@ -5,6 +5,7 @@ import { IVersion } from './lambda-version'; import { CfnUrl } from './lambda.generated'; import * as iam from '../../aws-iam'; import { Duration, IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The auth types for a function url @@ -218,6 +219,7 @@ export class FunctionUrl extends Resource implements IFunctionUrl { constructor(scope: Construct, id: string, props: FunctionUrlProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (this.instanceOfVersion(props.function)) { throw new Error('FunctionUrl cannot be used with a Version'); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function.ts b/packages/aws-cdk-lib/aws-lambda/lib/function.ts index 68dc147ac5d3b..305ab24c073c9 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function.ts @@ -31,6 +31,7 @@ import * as sns from '../../aws-sns'; import * as sqs from '../../aws-sqs'; import { Annotations, ArnFormat, CfnResource, Duration, FeatureFlags, Fn, IAspect, Lazy, Names, Size, Stack, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { LAMBDA_RECOGNIZE_LAYER_VERSION } from '../../cx-api'; /** @@ -915,6 +916,7 @@ export class Function extends FunctionBase { super(scope, id, { physicalName: props.functionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.functionName && !Token.isUnresolved(props.functionName)) { if (props.functionName.length > 64) { diff --git a/packages/aws-cdk-lib/aws-lambda/lib/image-function.ts b/packages/aws-cdk-lib/aws-lambda/lib/image-function.ts index f20496fc71a6e..6c6b297a345bb 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/image-function.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/image-function.ts @@ -6,6 +6,7 @@ import { Handler } from './handler'; import { Runtime } from './runtime'; import * as ecr from '../../aws-ecr'; import { Platform } from '../../aws-ecr-assets'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties to configure a new DockerImageFunction construct. @@ -71,5 +72,6 @@ export class DockerImageFunction extends Function { runtime: Runtime.FROM_IMAGE, code: props.code._bind(props.architecture), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); } } diff --git a/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts b/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts index f0ad496b72017..8af759da1b87d 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts @@ -8,6 +8,7 @@ import { CfnVersion } from './lambda.generated'; import { addAlias } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import { Fn, Lazy, RemovalPolicy, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IVersion extends IFunction { /** @@ -189,6 +190,7 @@ export class Version extends QualifiedFunctionBase implements IVersion { constructor(scope: Construct, id: string, props: VersionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.lambda = props.lambda; this.architecture = props.lambda.architecture; diff --git a/packages/aws-cdk-lib/aws-lambda/lib/layers.ts b/packages/aws-cdk-lib/aws-lambda/lib/layers.ts index 8fa00ec929949..381cbbc32f864 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/layers.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/layers.ts @@ -4,6 +4,7 @@ import { Code } from './code'; import { CfnLayerVersion, CfnLayerVersionPermission } from './lambda.generated'; import { Runtime } from './runtime'; import { IResource, RemovalPolicy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Non runtime options @@ -185,6 +186,7 @@ export class LayerVersion extends LayerVersionBase { super(scope, id, { physicalName: props.layerVersionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.compatibleRuntimes && props.compatibleRuntimes.length === 0) { throw new Error('Attempted to define a Lambda layer that supports no runtime!'); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/singleton-lambda.ts b/packages/aws-cdk-lib/aws-lambda/lib/singleton-lambda.ts index 058a734f9385e..cce7141654c49 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/singleton-lambda.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/singleton-lambda.ts @@ -10,6 +10,7 @@ import * as ec2 from '../../aws-ec2'; import * as iam from '../../aws-iam'; import * as logs from '../../aws-logs'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a newly created singleton Lambda @@ -68,6 +69,7 @@ export class SingletonFunction extends FunctionBase { constructor(scope: Construct, id: string, props: SingletonFunctionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.constructName = (props.lambdaPurpose || 'SingletonLambda') + slugify(props.uuid); this.lambdaFunction = this.ensureLambda(props); diff --git a/packages/aws-cdk-lib/aws-logs/lib/cross-account-destination.ts b/packages/aws-cdk-lib/aws-logs/lib/cross-account-destination.ts index a525de583b043..7aafaa44b5c57 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/cross-account-destination.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/cross-account-destination.ts @@ -5,6 +5,7 @@ import { ILogSubscriptionDestination, LogSubscriptionDestinationConfig } from '. import * as iam from '../../aws-iam'; import { ArnFormat } from '../../core'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a CrossAccountDestination @@ -72,6 +73,7 @@ export class CrossAccountDestination extends cdk.Resource implements ILogSubscri // In the underlying model, the name is not optional, but we make it so anyway. cdk.Lazy.string({ produce: () => this.generateUniqueName() }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.resource = new CfnDestination(this, 'Resource', { destinationName: this.physicalName!, diff --git a/packages/aws-cdk-lib/aws-logs/lib/log-group.ts b/packages/aws-cdk-lib/aws-logs/lib/log-group.ts index b04c6e2f426ee..622443e440828 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/log-group.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/log-group.ts @@ -10,6 +10,7 @@ import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { Annotations, Arn, ArnFormat, RemovalPolicy, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface ILogGroup extends iam.IResourceWithPolicy { /** @@ -606,6 +607,7 @@ export class LogGroup extends LogGroupBase { super(scope, id, { physicalName: props.logGroupName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); let retentionInDays = props.retention; if (retentionInDays === undefined) { retentionInDays = RetentionDays.TWO_YEARS; } diff --git a/packages/aws-cdk-lib/aws-logs/lib/log-stream.ts b/packages/aws-cdk-lib/aws-logs/lib/log-stream.ts index 7696826d14b85..92aadbb8814a2 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/log-stream.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/log-stream.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { ILogGroup } from './log-group'; import { CfnLogStream } from './logs.generated'; import { IResource, RemovalPolicy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface ILogStream extends IResource { /** @@ -68,6 +69,7 @@ export class LogStream extends Resource implements ILogStream { super(scope, id, { physicalName: props.logStreamName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnLogStream(this, 'Resource', { logGroupName: props.logGroup.logGroupName, diff --git a/packages/aws-cdk-lib/aws-logs/lib/metric-filter.ts b/packages/aws-cdk-lib/aws-logs/lib/metric-filter.ts index ba9f0dfe9171f..c46d34e860f63 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/metric-filter.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/metric-filter.ts @@ -3,6 +3,7 @@ import { ILogGroup, MetricFilterOptions } from './log-group'; import { CfnMetricFilter } from './logs.generated'; import { Metric, MetricOptions } from '../../aws-cloudwatch'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a MetricFilter @@ -26,6 +27,7 @@ export class MetricFilter extends Resource { super(scope, id, { physicalName: props.filterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.metricName = props.metricName; this.metricNamespace = props.metricNamespace; diff --git a/packages/aws-cdk-lib/aws-logs/lib/policy.ts b/packages/aws-cdk-lib/aws-logs/lib/policy.ts index 0e9515470d54e..1b9ff0106b6db 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/policy.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnResourcePolicy } from './logs.generated'; import { PolicyDocument, PolicyStatement } from '../../aws-iam'; import { Resource, Lazy, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties to define Cloudwatch log group resource policy @@ -45,6 +46,7 @@ export class ResourcePolicy extends Resource { super(scope, id, { physicalName: props?.resourcePolicyName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const l1 = new CfnResourcePolicy(this, 'ResourcePolicy', { policyName: Lazy.string({ diff --git a/packages/aws-cdk-lib/aws-logs/lib/query-definition.ts b/packages/aws-cdk-lib/aws-logs/lib/query-definition.ts index 502e2950c19a7..031fe60d3bfc9 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/query-definition.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/query-definition.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnQueryDefinition } from '.'; import { ILogGroup } from './log-group'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a QueryString @@ -202,6 +203,7 @@ export class QueryDefinition extends Resource { super(scope, id, { physicalName: props.queryDefinitionName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const queryDefinition = new CfnQueryDefinition(this, 'Resource', { name: props.queryDefinitionName, diff --git a/packages/aws-cdk-lib/aws-logs/lib/subscription-filter.ts b/packages/aws-cdk-lib/aws-logs/lib/subscription-filter.ts index 68ca728c858f4..21530e95bcce8 100644 --- a/packages/aws-cdk-lib/aws-logs/lib/subscription-filter.ts +++ b/packages/aws-cdk-lib/aws-logs/lib/subscription-filter.ts @@ -4,6 +4,7 @@ import { CfnSubscriptionFilter } from './logs.generated'; import * as iam from '../../aws-iam'; import { KinesisDestination } from '../../aws-logs-destinations'; import { Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface for classes that can be the destination of a log Subscription @@ -57,6 +58,7 @@ export class SubscriptionFilter extends Resource { super(scope, id, { physicalName: props.filterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if ( props.distribution && diff --git a/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts b/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts index fe00ce2a39f6e..346c2c2be7379 100644 --- a/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts +++ b/packages/aws-cdk-lib/aws-opensearchservice/lib/domain.ts @@ -15,6 +15,7 @@ import * as logs from '../../aws-logs'; import * as route53 from '../../aws-route53'; import * as secretsmanager from '../../aws-secretsmanager'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1390,6 +1391,7 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { super(scope, id, { physicalName: props.domainName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const defaultInstanceType = 'r5.large.search'; const warmDefaultInstanceType = 'ultrawarm1.medium.search'; diff --git a/packages/aws-cdk-lib/aws-rds/lib/aurora-cluster-instance.ts b/packages/aws-cdk-lib/aws-rds/lib/aurora-cluster-instance.ts index 184a3530acb5d..291b85f65e698 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/aurora-cluster-instance.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/aurora-cluster-instance.ts @@ -11,6 +11,7 @@ import * as ec2 from '../../aws-ec2'; import { IRole } from '../../aws-iam'; import * as kms from '../../aws-kms'; import { IResource, Resource, Duration, RemovalPolicy, ArnFormat, FeatureFlags } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AURORA_CLUSTER_CHANGE_SCOPE_OF_INSTANCE_PARAMETER_GROUP_WITH_EACH_PARAMETERS } from '../../cx-api'; /** @@ -474,6 +475,7 @@ class AuroraClusterInstance extends Resource implements IAuroraClusterInstance { { physicalName: props.instanceIdentifier, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.tier = props.promotionTier ?? 2; if (this.tier > 15) { throw new Error('promotionTier must be between 0-15'); diff --git a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts index 48521aedd2a1b..6768efb94ce53 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts @@ -20,6 +20,7 @@ import * as logs from '../../aws-logs'; import * as s3 from '../../aws-s3'; import * as secretsmanager from '../../aws-secretsmanager'; import { Annotations, ArnFormat, Duration, FeatureFlags, Lazy, RemovalPolicy, Resource, Stack, Token, TokenComparison } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1157,6 +1158,7 @@ class ImportedDatabaseCluster extends DatabaseClusterBase implements IDatabaseCl constructor(scope: Construct, id: string, attrs: DatabaseClusterAttributes) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, attrs); this.clusterIdentifier = attrs.clusterIdentifier; this._clusterResourceIdentifier = attrs.clusterResourceIdentifier; diff --git a/packages/aws-cdk-lib/aws-rds/lib/database-secret.ts b/packages/aws-cdk-lib/aws-rds/lib/database-secret.ts index d19c458f490ad..b43e7018c695f 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/database-secret.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/database-secret.ts @@ -4,6 +4,7 @@ import * as kms from '../../aws-kms'; import * as secretsmanager from '../../aws-secretsmanager'; import { Aws, Names } from '../../core'; import { md5hash } from '../../core/lib/helpers-internal'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -94,6 +95,7 @@ export class DatabaseSecret extends secretsmanager.Secret { }, replicaRegions: props.replicaRegions, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.replaceOnPasswordCriteriaChanges) { const hash = md5hash(JSON.stringify({ diff --git a/packages/aws-cdk-lib/aws-rds/lib/instance.ts b/packages/aws-cdk-lib/aws-rds/lib/instance.ts index cfd41de9e680c..e1f99d1e4d51f 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/instance.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/instance.ts @@ -18,6 +18,7 @@ import * as logs from '../../aws-logs'; import * as s3 from '../../aws-s3'; import * as secretsmanager from '../../aws-secretsmanager'; import { ArnComponents, ArnFormat, Duration, FeatureFlags, IResource, Lazy, RemovalPolicy, Resource, Stack, Token, Tokenization } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1174,6 +1175,7 @@ export class DatabaseInstance extends DatabaseInstanceSource implements IDatabas constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const credentials = renderCredentials(this, props.engine, props.credentials); const secret = credentials.secret; diff --git a/packages/aws-cdk-lib/aws-rds/lib/option-group.ts b/packages/aws-cdk-lib/aws-rds/lib/option-group.ts index 8b4ca531e804a..bf2cd5aed632d 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/option-group.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/option-group.ts @@ -3,6 +3,7 @@ import { IInstanceEngine } from './instance-engine'; import { CfnOptionGroup } from './rds.generated'; import * as ec2 from '../../aws-ec2'; import { IResource, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * An option group @@ -123,6 +124,7 @@ export class OptionGroup extends Resource implements IOptionGroup { constructor(scope: Construct, id: string, props: OptionGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const majorEngineVersion = props.engine.engineVersion?.majorVersion; if (!majorEngineVersion) { diff --git a/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts b/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts index ef1f43aac56b1..3367c1be445a3 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IEngine } from './engine'; import { CfnDBClusterParameterGroup, CfnDBParameterGroup } from './rds.generated'; import { IResource, Lazy, RemovalPolicy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for `IParameterGroup.bindToCluster`. @@ -140,6 +141,7 @@ export class ParameterGroup extends Resource implements IParameterGroup { constructor(scope: Construct, id: string, props: ParameterGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const family = props.engine.parameterGroupFamily; if (!family) { diff --git a/packages/aws-cdk-lib/aws-rds/lib/proxy.ts b/packages/aws-cdk-lib/aws-rds/lib/proxy.ts index 6c8ffe2fb1695..d220aab810e4b 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/proxy.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/proxy.ts @@ -8,6 +8,7 @@ import * as ec2 from '../../aws-ec2'; import * as iam from '../../aws-iam'; import * as secretsmanager from '../../aws-secretsmanager'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -446,6 +447,7 @@ export class DatabaseProxy extends DatabaseProxyBase constructor(scope: Construct, id: string, props: DatabaseProxyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const physicalName = props.dbProxyName || ( cdk.FeatureFlags.of(this).isEnabled(cxapi.DATABASE_PROXY_UNIQUE_RESOURCE_NAME) ? diff --git a/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts b/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts index 572b0bb2fc3c2..ae7823e91a768 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts @@ -13,6 +13,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as secretsmanager from '../../aws-secretsmanager'; import { Resource, Duration, Token, Annotations, RemovalPolicy, IResource, Stack, Lazy, FeatureFlags, ArnFormat } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -557,6 +558,7 @@ export class ServerlessCluster extends ServerlessClusterNew { constructor(scope: Construct, id: string, props: ServerlessClusterProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.vpc = props.vpc; this.vpcSubnets = props.vpcSubnets; diff --git a/packages/aws-cdk-lib/aws-rds/lib/subnet-group.ts b/packages/aws-cdk-lib/aws-rds/lib/subnet-group.ts index d0bf8c7e9928b..ec00a84588ee2 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/subnet-group.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/subnet-group.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { CfnDBSubnetGroup } from './rds.generated'; import * as ec2 from '../../aws-ec2'; import { IResource, RemovalPolicy, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Interface for a subnet group. @@ -71,6 +72,7 @@ export class SubnetGroup extends Resource implements ISubnetGroup { constructor(scope: Construct, id: string, props: SubnetGroupProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const { subnetIds } = props.vpc.selectSubnets(props.vpcSubnets ?? { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }); diff --git a/packages/aws-cdk-lib/aws-route53/lib/health-check.ts b/packages/aws-cdk-lib/aws-route53/lib/health-check.ts index 6c6caab8d43d8..423a499892574 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/health-check.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/health-check.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnHealthCheck } from './route53.generated'; import { Duration, IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Imported or created health check @@ -260,6 +261,7 @@ export class HealthCheck extends Resource implements IHealthCheck { */ constructor(scope: Construct, id: string, props: HealthCheckProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnHealthCheck(this, 'Resource', { healthCheckConfig: { diff --git a/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts b/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts index 76c0e9caa3b25..e63702b65e687 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts @@ -10,6 +10,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as cxschema from '../../cloud-assembly-schema'; import { ContextProvider, Duration, Lazy, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Common properties to create a Route 53 hosted zone @@ -199,6 +200,7 @@ export class HostedZone extends Resource implements IHostedZone { constructor(scope: Construct, id: string, props: HostedZoneProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); validateZoneName(props.zoneName); diff --git a/packages/aws-cdk-lib/aws-route53/lib/key-signing-key.ts b/packages/aws-cdk-lib/aws-route53/lib/key-signing-key.ts index 0f9ad36b3ead1..61a28dc98a132 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/key-signing-key.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/key-signing-key.ts @@ -4,6 +4,7 @@ import { CfnKeySigningKey } from './route53.generated'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { Resource, IResource, Lazy, Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for constructing a Key Signing Key. @@ -135,6 +136,7 @@ export class KeySigningKey extends Resource implements IKeySigningKey { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.grantKeyPermissionsForZone(props.kmsKey, props.hostedZone); diff --git a/packages/aws-cdk-lib/aws-route53/lib/record-set.ts b/packages/aws-cdk-lib/aws-route53/lib/record-set.ts index a421917f1151b..e5ab3dcc0e188 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/record-set.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/record-set.ts @@ -7,6 +7,7 @@ import { CfnRecordSet } from './route53.generated'; import { determineFullyQualifiedDomainName } from './util'; import * as iam from '../../aws-iam'; import { CustomResource, Duration, IResource, Names, RemovalPolicy, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { CrossAccountZoneDelegationProvider } from '../../custom-resource-handlers/dist/aws-route53/cross-account-zone-delegation-provider.generated'; import { DeleteExistingRecordSetProvider } from '../../custom-resource-handlers/dist/aws-route53/delete-existing-record-set-provider.generated'; @@ -338,6 +339,7 @@ export class RecordSet extends Resource implements IRecordSet { constructor(scope: Construct, id: string, props: RecordSetProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.weight && !Token.isUnresolved(props.weight) && (props.weight < 0 || props.weight > 255)) { throw new Error(`weight must be between 0 and 255 inclusive, got: ${props.weight}`); diff --git a/packages/aws-cdk-lib/aws-s3/lib/bucket-policy.ts b/packages/aws-cdk-lib/aws-s3/lib/bucket-policy.ts index 72aaaedf9191f..f352b154351c4 100644 --- a/packages/aws-cdk-lib/aws-s3/lib/bucket-policy.ts +++ b/packages/aws-cdk-lib/aws-s3/lib/bucket-policy.ts @@ -3,6 +3,7 @@ import { Bucket, IBucket } from './bucket'; import { CfnBucket, CfnBucketPolicy } from './s3.generated'; import { PolicyDocument } from '../../aws-iam'; import { RemovalPolicy, Resource, Token, Tokenization } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { CfnReference } from '../../core/lib/private/cfn-reference'; export interface BucketPolicyProps { @@ -101,6 +102,7 @@ export class BucketPolicy extends Resource { constructor(scope: Construct, id: string, props: BucketPolicyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.bucket = props.bucket; diff --git a/packages/aws-cdk-lib/aws-s3/lib/bucket.ts b/packages/aws-cdk-lib/aws-s3/lib/bucket.ts index f93920382d72b..64c73d686c17c 100644 --- a/packages/aws-cdk-lib/aws-s3/lib/bucket.ts +++ b/packages/aws-cdk-lib/aws-s3/lib/bucket.ts @@ -26,6 +26,7 @@ import { Tokenization, Annotations, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { CfnReference } from '../../core/lib/private/cfn-reference'; import { AutoDeleteObjectsProvider } from '../../custom-resource-handlers/dist/aws-s3/auto-delete-objects-provider.generated'; import * as cxapi from '../../cx-api'; @@ -1964,6 +1965,7 @@ export class Bucket extends BucketBase { super(scope, id, { physicalName: props.bucketName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.notificationsHandlerRole = props.notificationsHandlerRole; this.notificationsSkipDestinationValidation = props.notificationsSkipDestinationValidation; diff --git a/packages/aws-cdk-lib/aws-secretsmanager/lib/policy.ts b/packages/aws-cdk-lib/aws-secretsmanager/lib/policy.ts index 3c372466f9ad6..259b57644d88b 100644 --- a/packages/aws-cdk-lib/aws-secretsmanager/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-secretsmanager/lib/policy.ts @@ -3,6 +3,7 @@ import { ISecret } from './secret'; import { CfnResourcePolicy } from './secretsmanager.generated'; import * as iam from '../../aws-iam'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Construction properties for a ResourcePolicy @@ -36,6 +37,7 @@ export class ResourcePolicy extends Resource { constructor(scope: Construct, id: string, props: ResourcePolicyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnResourcePolicy(this, 'Resource', { resourcePolicy: this.document, diff --git a/packages/aws-cdk-lib/aws-secretsmanager/lib/rotation-schedule.ts b/packages/aws-cdk-lib/aws-secretsmanager/lib/rotation-schedule.ts index d28d077cd6aa3..df5d7e9dc6ed6 100644 --- a/packages/aws-cdk-lib/aws-secretsmanager/lib/rotation-schedule.ts +++ b/packages/aws-cdk-lib/aws-secretsmanager/lib/rotation-schedule.ts @@ -7,6 +7,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as lambda from '../../aws-lambda'; import { Duration, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The default set of characters we exclude from generated passwords for database users. @@ -89,6 +90,7 @@ export interface RotationScheduleProps extends RotationScheduleOptions { export class RotationSchedule extends Resource { constructor(scope: Construct, id: string, props: RotationScheduleProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if ((!props.rotationLambda && !props.hostedRotation) || (props.rotationLambda && props.hostedRotation)) { throw new Error('One of `rotationLambda` or `hostedRotation` must be specified.'); diff --git a/packages/aws-cdk-lib/aws-secretsmanager/lib/secret.ts b/packages/aws-cdk-lib/aws-secretsmanager/lib/secret.ts index 2749327c68259..5448c70850858 100644 --- a/packages/aws-cdk-lib/aws-secretsmanager/lib/secret.ts +++ b/packages/aws-cdk-lib/aws-secretsmanager/lib/secret.ts @@ -5,6 +5,7 @@ import * as secretsmanager from './secretsmanager.generated'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { ArnFormat, FeatureFlags, Fn, IResolveContext, IResource, Lazy, RemovalPolicy, Resource, ResourceProps, SecretValue, Stack, Token, TokenComparison } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const SECRET_SYMBOL = Symbol.for('@aws-cdk/secretsmanager.Secret'); @@ -624,6 +625,7 @@ export class Secret extends SecretBase { super(scope, id, { physicalName: props.secretName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.generateSecretString && (props.generateSecretString.secretStringTemplate || props.generateSecretString.generateStringKey) && diff --git a/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts b/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts index 9810f280db900..53f936a79e830 100644 --- a/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts +++ b/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts @@ -14,6 +14,7 @@ import * as iam from '../../aws-iam'; import { IBucket } from '../../aws-s3'; import * as sns from '../../aws-sns'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for portfolio share. @@ -340,6 +341,7 @@ export class Portfolio extends PortfolioBase { constructor(scope: Construct, id: string, props: PortfolioProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validatePortfolioProps(props); diff --git a/packages/aws-cdk-lib/aws-servicecatalog/lib/product.ts b/packages/aws-cdk-lib/aws-servicecatalog/lib/product.ts index 4ceaab07975fc..923485fb50a1e 100644 --- a/packages/aws-cdk-lib/aws-servicecatalog/lib/product.ts +++ b/packages/aws-cdk-lib/aws-servicecatalog/lib/product.ts @@ -7,6 +7,7 @@ import { CfnCloudFormationProduct } from './servicecatalog.generated'; import { TagOptions } from './tag-options'; import { IBucket } from '../../aws-s3'; import { ArnFormat, IResource, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A Service Catalog product, currently only supports type CloudFormationProduct @@ -188,6 +189,7 @@ export class CloudFormationProduct extends Product { constructor(scope: Construct, id: string, props: CloudFormationProductProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.validateProductProps(props); diff --git a/packages/aws-cdk-lib/aws-servicecatalog/lib/tag-options.ts b/packages/aws-cdk-lib/aws-servicecatalog/lib/tag-options.ts index 456dbc3a42a8e..06801bdfbc7a5 100644 --- a/packages/aws-cdk-lib/aws-servicecatalog/lib/tag-options.ts +++ b/packages/aws-cdk-lib/aws-servicecatalog/lib/tag-options.ts @@ -3,6 +3,7 @@ import { hashValues } from './private/util'; import { InputValidator } from './private/validation'; import { CfnTagOption } from './servicecatalog.generated'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for TagOptions. @@ -33,6 +34,7 @@ export class TagOptions extends cdk.Resource { constructor(scope: Construct, id: string, props: TagOptionsProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this._cfnTagOptions = this.createUnderlyingTagOptions(props.allowedValuesForTags); } diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/alias-target-instance.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/alias-target-instance.ts index 018d6740db923..34bea3fc25ba6 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/alias-target-instance.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/alias-target-instance.ts @@ -4,6 +4,7 @@ import { NamespaceType } from './namespace'; import { DnsRecordType, IService, RoutingPolicy } from './service'; import { CfnInstance } from './servicediscovery.generated'; import { Names } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /* * Properties for an AliasTargetInstance @@ -44,6 +45,7 @@ export class AliasTargetInstance extends InstanceBase { constructor(scope: Construct, id: string, props: AliasTargetInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.service.namespace.type === NamespaceType.HTTP) { throw new Error('Namespace associated with Service must be a DNS Namespace.'); diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/cname-instance.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/cname-instance.ts index 6d948119a4e73..2440fedcacdcf 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/cname-instance.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/cname-instance.ts @@ -3,6 +3,7 @@ import { BaseInstanceProps, InstanceBase } from './instance'; import { NamespaceType } from './namespace'; import { DnsRecordType, IService } from './service'; import { CfnInstance } from './servicediscovery.generated'; +import { MetadataType } from '../../core/lib/metadata-resource'; /* * Properties for a CnameInstance used for service#registerCnameInstance @@ -48,6 +49,7 @@ export class CnameInstance extends InstanceBase { constructor(scope: Construct, id: string, props: CnameInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.service.namespace.type === NamespaceType.HTTP) { throw new Error('Namespace associated with Service must be a DNS Namespace.'); diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/http-namespace.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/http-namespace.ts index bbda008139095..fe018b3b64321 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/http-namespace.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/http-namespace.ts @@ -3,6 +3,7 @@ import { BaseNamespaceProps, INamespace, NamespaceType } from './namespace'; import { BaseServiceProps, Service } from './service'; import { CfnHttpNamespace } from './servicediscovery.generated'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface HttpNamespaceProps extends BaseNamespaceProps {} export interface IHttpNamespace extends INamespace { } @@ -60,6 +61,7 @@ export class HttpNamespace extends Resource implements IHttpNamespace { constructor(scope: Construct, id: string, props: HttpNamespaceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const ns = new CfnHttpNamespace(this, 'Resource', { name: props.name, diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/ip-instance.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/ip-instance.ts index e635fca07cee4..9e7dce6825d63 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/ip-instance.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/ip-instance.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { BaseInstanceProps, InstanceBase } from './instance'; import { DnsRecordType, IService } from './service'; import { CfnInstance } from './servicediscovery.generated'; +import { MetadataType } from '../../core/lib/metadata-resource'; /* * Properties for a IpInstance used for service#registerIpInstance @@ -76,6 +77,7 @@ export class IpInstance extends InstanceBase { constructor(scope: Construct, id: string, props: IpInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const dnsRecordType = props.service.dnsRecordType; if (dnsRecordType === DnsRecordType.CNAME) { diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/non-ip-instance.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/non-ip-instance.ts index d75c5d011444b..c8761adb7f27a 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/non-ip-instance.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/non-ip-instance.ts @@ -3,6 +3,7 @@ import { BaseInstanceProps, InstanceBase } from './instance'; import { defaultDiscoveryType } from './private/utils'; import { IService, DiscoveryType } from './service'; import { CfnInstance } from './servicediscovery.generated'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface NonIpInstanceBaseProps extends BaseInstanceProps { } @@ -36,6 +37,7 @@ export class NonIpInstance extends InstanceBase { constructor(scope: Construct, id: string, props: NonIpInstanceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const discoveryType = props.service.discoveryType || defaultDiscoveryType(props.service.namespace); if (discoveryType !== DiscoveryType.API) { diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/private-dns-namespace.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/private-dns-namespace.ts index 72c3ac2e75c97..9a440b2bae5ab 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/private-dns-namespace.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/private-dns-namespace.ts @@ -4,6 +4,7 @@ import { DnsServiceProps, Service } from './service'; import { CfnPrivateDnsNamespace } from './servicediscovery.generated'; import * as ec2 from '../../aws-ec2'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface PrivateDnsNamespaceProps extends BaseNamespaceProps { /** @@ -73,6 +74,7 @@ export class PrivateDnsNamespace extends Resource implements IPrivateDnsNamespac constructor(scope: Construct, id: string, props: PrivateDnsNamespaceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.vpc === undefined) { throw new Error('VPC must be specified for PrivateDNSNamespaces'); } diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/public-dns-namespace.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/public-dns-namespace.ts index d58848fc4320d..858e1af0f3ca3 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/public-dns-namespace.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/public-dns-namespace.ts @@ -3,6 +3,7 @@ import { BaseNamespaceProps, INamespace, NamespaceType } from './namespace'; import { DnsServiceProps, Service } from './service'; import { CfnPublicDnsNamespace } from './servicediscovery.generated'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface PublicDnsNamespaceProps extends BaseNamespaceProps {} export interface IPublicDnsNamespace extends INamespace { } @@ -65,6 +66,7 @@ export class PublicDnsNamespace extends Resource implements IPublicDnsNamespace constructor(scope: Construct, id: string, props: PublicDnsNamespaceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const ns = new CfnPublicDnsNamespace(this, 'Resource', { name: props.name, diff --git a/packages/aws-cdk-lib/aws-servicediscovery/lib/service.ts b/packages/aws-cdk-lib/aws-servicediscovery/lib/service.ts index 75ec3f7015373..25cb36742fc28 100644 --- a/packages/aws-cdk-lib/aws-servicediscovery/lib/service.ts +++ b/packages/aws-cdk-lib/aws-servicediscovery/lib/service.ts @@ -9,6 +9,7 @@ import { defaultDiscoveryType } from './private/utils'; import { CfnService } from './servicediscovery.generated'; import * as elbv2 from '../../aws-elasticloadbalancingv2'; import { Duration, IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; export interface IService extends IResource { /** @@ -218,6 +219,7 @@ export class Service extends ServiceBase { constructor(scope: Construct, id: string, props: ServiceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const namespaceType = props.namespace.type; const discoveryType = props.discoveryType || defaultDiscoveryType(props.namespace); diff --git a/packages/aws-cdk-lib/aws-ses/lib/configuration-set-event-destination.ts b/packages/aws-cdk-lib/aws-ses/lib/configuration-set-event-destination.ts index 52672e3229e06..d1e56290ad163 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/configuration-set-event-destination.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/configuration-set-event-destination.ts @@ -4,6 +4,7 @@ import { CfnConfigurationSetEventDestination } from './ses.generated'; import * as iam from '../../aws-iam'; import * as sns from '../../aws-sns'; import { Aws, IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A configuration set event destination @@ -237,6 +238,7 @@ export class ConfigurationSetEventDestination extends Resource implements IConfi super(scope, id, { physicalName: props.configurationSetEventDestinationName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const configurationSet = new CfnConfigurationSetEventDestination(this, 'Resource', { configurationSetName: props.configurationSet.configurationSetName, diff --git a/packages/aws-cdk-lib/aws-ses/lib/configuration-set.ts b/packages/aws-cdk-lib/aws-ses/lib/configuration-set.ts index cb45d79b3d887..30b89388de29c 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/configuration-set.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/configuration-set.ts @@ -4,6 +4,7 @@ import { IDedicatedIpPool } from './dedicated-ip-pool'; import { undefinedIfNoKeys } from './private/utils'; import { CfnConfigurationSet } from './ses.generated'; import { Duration, IResource, Resource, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A configuration set @@ -174,6 +175,7 @@ export class ConfigurationSet extends Resource implements IConfigurationSet { super(scope, id, { physicalName: props.configurationSetName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.disableSuppressionList && props.suppressionReasons) { throw new Error('When disableSuppressionList is true, suppressionReasons must not be specified.'); diff --git a/packages/aws-cdk-lib/aws-ses/lib/dedicated-ip-pool.ts b/packages/aws-cdk-lib/aws-ses/lib/dedicated-ip-pool.ts index a085e330f9481..4e6bc8d0601c9 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/dedicated-ip-pool.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/dedicated-ip-pool.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnDedicatedIpPool } from './ses.generated'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Scaling mode to use for this IP pool. @@ -77,6 +78,7 @@ export class DedicatedIpPool extends Resource implements IDedicatedIpPool { super(scope, id, { physicalName: props.dedicatedIpPoolName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.dedicatedIpPoolName && !/^[a-z0-9_-]{0,64}$/.test(props.dedicatedIpPoolName)) { throw new Error(`Invalid dedicatedIpPoolName "${props.dedicatedIpPoolName}". The name must only include lowercase letters, numbers, underscores, hyphens, and must not exceed 64 characters.`); diff --git a/packages/aws-cdk-lib/aws-ses/lib/email-identity.ts b/packages/aws-cdk-lib/aws-ses/lib/email-identity.ts index 82d8e5d6b0ff5..008283bf8564c 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/email-identity.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/email-identity.ts @@ -6,6 +6,7 @@ import { Grant, IGrantable } from '../../aws-iam'; import { IPublicHostedZone } from '../../aws-route53'; import * as route53 from '../../aws-route53'; import { IResource, Lazy, Resource, SecretValue, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * An email identity @@ -457,6 +458,7 @@ export class EmailIdentity extends EmailIdentityBase { constructor(scope: Construct, id: string, props: EmailIdentityProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const dkimIdentity = props.dkimIdentity ?? DkimIdentity.easyDkim(); diff --git a/packages/aws-cdk-lib/aws-ses/lib/receipt-filter.ts b/packages/aws-cdk-lib/aws-ses/lib/receipt-filter.ts index b503400cf5b53..dd3b425dd2c95 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/receipt-filter.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/receipt-filter.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnReceiptFilter } from './ses.generated'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * The policy for the receipt filter. @@ -52,6 +53,7 @@ export class ReceiptFilter extends Resource { super(scope, id, { physicalName: props.receiptFilterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnReceiptFilter(this, 'Resource', { filter: { diff --git a/packages/aws-cdk-lib/aws-ses/lib/receipt-rule-set.ts b/packages/aws-cdk-lib/aws-ses/lib/receipt-rule-set.ts index 75cf18b239e9c..3a9fd0617854c 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/receipt-rule-set.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/receipt-rule-set.ts @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { DropSpamReceiptRule, ReceiptRule, ReceiptRuleOptions } from './receipt-rule'; import { CfnReceiptRuleSet } from './ses.generated'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * A receipt rule set. @@ -101,6 +102,7 @@ export class ReceiptRuleSet extends ReceiptRuleSetBase { super(scope, id, { physicalName: props.receiptRuleSetName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnReceiptRuleSet(this, 'Resource', { ruleSetName: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-ses/lib/receipt-rule.ts b/packages/aws-cdk-lib/aws-ses/lib/receipt-rule.ts index ae662eb3f18d4..15ba93659f84c 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/receipt-rule.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/receipt-rule.ts @@ -4,6 +4,7 @@ import { IReceiptRuleSet } from './receipt-rule-set'; import { CfnReceiptRule } from './ses.generated'; import * as iam from '../../aws-iam'; import { Aws, IResource, Lazy, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { DropSpamSingletonFunction } from '../../custom-resource-handlers/dist/aws-ses/drop-spam-provider.generated'; /** @@ -118,6 +119,7 @@ export class ReceiptRule extends Resource implements IReceiptRule { super(scope, id, { physicalName: props.receiptRuleName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnReceiptRule(this, 'Resource', { after: props.after?.receiptRuleName, diff --git a/packages/aws-cdk-lib/aws-ses/lib/vdm-attributes.ts b/packages/aws-cdk-lib/aws-ses/lib/vdm-attributes.ts index 891f606cb97a6..045ead27f4667 100644 --- a/packages/aws-cdk-lib/aws-ses/lib/vdm-attributes.ts +++ b/packages/aws-cdk-lib/aws-ses/lib/vdm-attributes.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnVdmAttributes } from './ses.generated'; import { IResource, Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Virtual Deliverability Manager (VDM) attributes @@ -58,6 +59,7 @@ export class VdmAttributes extends Resource implements IVdmAttributes { constructor(scope: Construct, id: string, props: VdmAttributesProps = {}) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnVdmAttributes(this, 'Resource', { dashboardAttributes: { diff --git a/packages/aws-cdk-lib/aws-signer/lib/signing-profile.ts b/packages/aws-cdk-lib/aws-signer/lib/signing-profile.ts index d562dfa566393..906fc5d6ce6a0 100644 --- a/packages/aws-cdk-lib/aws-signer/lib/signing-profile.ts +++ b/packages/aws-cdk-lib/aws-signer/lib/signing-profile.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnSigningProfile } from './signer.generated'; import { Duration, IResource, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Platforms that are allowed with signing config. @@ -173,6 +174,7 @@ export class SigningProfile extends Resource implements ISigningProfile { super(scope, id, { physicalName: props.signingProfileName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const resource = new CfnSigningProfile( this, 'Resource', { platformId: props.platform.platformId, diff --git a/packages/aws-cdk-lib/aws-sns/lib/policy.ts b/packages/aws-cdk-lib/aws-sns/lib/policy.ts index 2d663b733fa90..f83d1a85720c4 100644 --- a/packages/aws-cdk-lib/aws-sns/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-sns/lib/policy.ts @@ -3,6 +3,7 @@ import { CfnTopicPolicy } from './sns.generated'; import { ITopic } from './topic-base'; import { Effect, PolicyDocument, PolicyStatement, StarPrincipal } from '../../aws-iam'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties to associate SNS topics with a policy @@ -57,6 +58,7 @@ export class TopicPolicy extends Resource { constructor(scope: Construct, id: string, props: TopicPolicyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.document = props.policyDocument ?? this.document; diff --git a/packages/aws-cdk-lib/aws-sns/lib/subscription.ts b/packages/aws-cdk-lib/aws-sns/lib/subscription.ts index 2b6cc1c073bc7..5949a2c388b49 100644 --- a/packages/aws-cdk-lib/aws-sns/lib/subscription.ts +++ b/packages/aws-cdk-lib/aws-sns/lib/subscription.ts @@ -6,6 +6,7 @@ import { ITopic } from './topic-base'; import { PolicyStatement, ServicePrincipal } from '../../aws-iam'; import { IQueue } from '../../aws-sqs'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Options for creating a new subscription @@ -105,6 +106,7 @@ export class Subscription extends Resource { constructor(scope: Construct, id: string, props: SubscriptionProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.rawMessageDelivery && [ diff --git a/packages/aws-cdk-lib/aws-sns/lib/topic.ts b/packages/aws-cdk-lib/aws-sns/lib/topic.ts index f78b32bf8cfe3..7621d9711d33f 100644 --- a/packages/aws-cdk-lib/aws-sns/lib/topic.ts +++ b/packages/aws-cdk-lib/aws-sns/lib/topic.ts @@ -4,6 +4,7 @@ import { ITopic, TopicBase } from './topic-base'; import { IRole } from '../../aws-iam'; import { IKey } from '../../aws-kms'; import { ArnFormat, Lazy, Names, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for a new SNS topic @@ -255,6 +256,7 @@ export class Topic extends TopicBase { super(scope, id, { physicalName: props.topicName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.enforceSSL = props.enforceSSL; diff --git a/packages/aws-cdk-lib/aws-sqs/lib/policy.ts b/packages/aws-cdk-lib/aws-sqs/lib/policy.ts index 2a427c0522c19..ad42a49f6ab2b 100644 --- a/packages/aws-cdk-lib/aws-sqs/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-sqs/lib/policy.ts @@ -3,6 +3,7 @@ import { IQueue } from './queue-base'; import { CfnQueuePolicy } from './sqs.generated'; import { PolicyDocument } from '../../aws-iam'; import { Resource } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties to associate SQS queues with a policy @@ -36,6 +37,7 @@ export class QueuePolicy extends Resource { constructor(scope: Construct, id: string, props: QueuePolicyProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); new CfnQueuePolicy(this, 'Resource', { policyDocument: this.document, diff --git a/packages/aws-cdk-lib/aws-sqs/lib/queue.ts b/packages/aws-cdk-lib/aws-sqs/lib/queue.ts index d05f886cc22a8..76179b1f65306 100644 --- a/packages/aws-cdk-lib/aws-sqs/lib/queue.ts +++ b/packages/aws-cdk-lib/aws-sqs/lib/queue.ts @@ -5,6 +5,7 @@ import { validateProps } from './validate-props'; import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { Duration, RemovalPolicy, Stack, Token, ArnFormat, Annotations } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Properties for creating a new Queue @@ -382,6 +383,7 @@ export class Queue extends QueueBase { super(scope, id, { physicalName: props.queueName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); validateProps(props); diff --git a/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts b/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts index eff6d92766815..756bc27cf6efb 100644 --- a/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts +++ b/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts @@ -10,6 +10,7 @@ import { ContextProvider, Fn, IResource, Resource, Stack, Token, Tokenization, } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * An SSM Parameter reference. @@ -664,6 +665,7 @@ export class StringParameter extends ParameterBase implements IStringParameter { super(scope, id, { physicalName: props.parameterName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.allowedPattern) { _assertValidValue(props.stringValue, props.allowedPattern); diff --git a/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts b/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts index 32ddf07f3a65f..a7ff8183851e9 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts +++ b/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts @@ -7,6 +7,8 @@ import { CfnActivity } from './stepfunctions.generated'; import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { ArnFormat, IResource, Lazy, Names, Resource, Stack } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; + /** * Properties for defining a new Step Functions Activity */ @@ -76,6 +78,7 @@ export class Activity extends Resource implements IActivity { physicalName: props.activityName || Lazy.string({ produce: () => this.generateName() }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.encryptionConfiguration = props.encryptionConfiguration; diff --git a/packages/aws-cdk-lib/aws-stepfunctions/lib/state-machine.ts b/packages/aws-cdk-lib/aws-stepfunctions/lib/state-machine.ts index 5fea9d8ab09e4..cb453f507c209 100644 --- a/packages/aws-cdk-lib/aws-stepfunctions/lib/state-machine.ts +++ b/packages/aws-cdk-lib/aws-stepfunctions/lib/state-machine.ts @@ -11,6 +11,7 @@ import * as iam from '../../aws-iam'; import * as logs from '../../aws-logs'; import * as s3_assets from '../../aws-s3-assets'; import { Arn, ArnFormat, Duration, IResource, RemovalPolicy, Resource, Stack, Token } from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Two types of state machines are available in AWS Step Functions: EXPRESS AND STANDARD. @@ -433,6 +434,7 @@ export class StateMachine extends StateMachineBase { super(scope, id, { physicalName: props.stateMachineName, }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); if (props.definition && props.definitionBody) { throw new Error('Cannot specify definition and definitionBody at the same time'); diff --git a/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts b/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts index 385a13dcda254..61b2630b18c20 100644 --- a/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts +++ b/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts @@ -11,6 +11,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import * as s3 from '../../aws-s3'; import * as cdk from '../../core'; +import { MetadataType } from '../../core/lib/metadata-resource'; import { AutoDeleteUnderlyingResourcesProvider } from '../../custom-resource-handlers/dist/aws-synthetics/auto-delete-underlying-resources-provider.generated'; const AUTO_DELETE_UNDERLYING_RESOURCES_RESOURCE_TYPE = 'Custom::SyntheticsAutoDeleteUnderlyingResources'; @@ -349,6 +350,7 @@ export class Canary extends cdk.Resource implements ec2.IConnectable { produce: () => this.generateUniqueName(), }), }); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.artifactsBucket = props.artifactsBucketLocation?.bucket ?? new s3.Bucket(this, 'ArtifactsBucket', { encryption: s3.BucketEncryption.KMS_MANAGED, diff --git a/packages/aws-cdk-lib/core/lib/custom-resource.ts b/packages/aws-cdk-lib/core/lib/custom-resource.ts index 134cefab3c505..65f231dcfc30d 100644 --- a/packages/aws-cdk-lib/core/lib/custom-resource.ts +++ b/packages/aws-cdk-lib/core/lib/custom-resource.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { CfnResource } from './cfn-resource'; import { Duration } from './duration'; +import { MetadataType } from './metadata-resource'; import { RemovalPolicy } from './removal-policy'; import { Resource } from './resource'; import { Token } from './token'; @@ -137,6 +138,7 @@ export class CustomResource extends Resource { constructor(scope: Construct, id: string, props: CustomResourceProps) { super(scope, id); + this.node.addMetadata(MetadataType.CONSTRUCT, props); const type = renderResourceType(props.resourceType); const pascalCaseProperties = props.pascalCaseProperties ?? false; diff --git a/packages/aws-cdk-lib/core/lib/resource.ts b/packages/aws-cdk-lib/core/lib/resource.ts index ee79dc233fdb8..a89df88b377cb 100644 --- a/packages/aws-cdk-lib/core/lib/resource.ts +++ b/packages/aws-cdk-lib/core/lib/resource.ts @@ -38,6 +38,48 @@ export interface ResourceEnvironment { readonly region: string; } +/** + * Enumeration of metadata types used for tracking analytics in AWS CDK. + */ +export enum MetadataType { + /** + * Metadata type for construct properties. + * This is used to represent properties of CDK constructs. + */ + CONSTRUCT = 'aws:cdk:analytics:construct', + + /** + * Metadata type for method properties. + * This is used to track parameters and details of CDK method calls. + */ + METHOD = 'aws:cdk:analytics:method', + + /** + * Metadata type for feature flags. + * This is used to track analytics related to feature flags in the CDK. + */ + FEATURE_FLAGS = 'aws:cdk:analytics:featureflag', +} + +// /** +// * +// * @param _target +// * @param propertyKey +// * @param descriptor +// */ +// export function metadata(_target: any, propertyKey: string, descriptor: PropertyDescriptor): void { +// const originalMethod = descriptor.value; + +// descriptor.value = function (...args: any[]) { +// if (this instanceof Resource) { +// this.node.addMetadata(); +// } + +// // Call the original method +// return originalMethod.apply(this, args); +// }; +// } + /** * Interface for the Resource construct. */ diff --git a/packages/aws-cdk-lib/pipelines/lib/private/asset-singleton-role.ts b/packages/aws-cdk-lib/pipelines/lib/private/asset-singleton-role.ts index 49a45e1804b68..db96cea34fa32 100644 --- a/packages/aws-cdk-lib/pipelines/lib/private/asset-singleton-role.ts +++ b/packages/aws-cdk-lib/pipelines/lib/private/asset-singleton-role.ts @@ -2,6 +2,7 @@ import { Construct, IDependable } from 'constructs'; import * as iam from '../../../aws-iam'; import { PolicyStatement } from '../../../aws-iam'; import { ArnFormat, Stack } from '../../../core'; +import { MetadataType } from '../../../core/lib/metadata-resource'; /** * Role which will be reused across asset jobs @@ -15,6 +16,7 @@ export class AssetSingletonRole extends iam.Role { constructor(scope: Construct, id: string, props: iam.RoleProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); // Logging permissions this.addToPolicy(new iam.PolicyStatement({ diff --git a/packages/aws-cdk-lib/triggers/lib/trigger-function.ts b/packages/aws-cdk-lib/triggers/lib/trigger-function.ts index c2c3fd61847e4..96987e4fb6b75 100644 --- a/packages/aws-cdk-lib/triggers/lib/trigger-function.ts +++ b/packages/aws-cdk-lib/triggers/lib/trigger-function.ts @@ -1,6 +1,7 @@ import { Construct } from 'constructs'; import { ITrigger, Trigger, TriggerOptions } from '.'; import * as lambda from '../../aws-lambda'; +import { MetadataType } from '../../core/lib/metadata-resource'; /** * Props for `InvokeFunction`. @@ -20,6 +21,7 @@ export class TriggerFunction extends lambda.Function implements ITrigger { constructor(scope: Construct, id: string, props: TriggerFunctionProps) { super(scope, id, props); + this.node.addMetadata(MetadataType.CONSTRUCT, props); this.trigger = new Trigger(this, 'Trigger', { ...props, diff --git a/tools/@aws-cdk/constuct-metadata-updater/.gitignore b/tools/@aws-cdk/constuct-metadata-updater/.gitignore new file mode 100644 index 0000000000000..bef31def37928 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/.gitignore @@ -0,0 +1,15 @@ +*.js +*.js.map +*.d.ts +dist + +.LAST_BUILD +*.snk +!jest.config.js + +.nyc_output +coverage +nyc.config.js +!.eslintrc.js +!test/test-fixture/jsii/node_modules/ +junit.xml diff --git a/tools/@aws-cdk/constuct-metadata-updater/LICENSE b/tools/@aws-cdk/constuct-metadata-updater/LICENSE new file mode 100644 index 0000000000000..d645695673349 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/LICENSE @@ -0,0 +1,202 @@ + + 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 [yyyy] [name of copyright owner] + + 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. diff --git a/tools/@aws-cdk/constuct-metadata-updater/README.md b/tools/@aws-cdk/constuct-metadata-updater/README.md new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata b/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata new file mode 100755 index 0000000000000..c3483bf973ee4 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('./update-construct-metadata.js'); diff --git a/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts b/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts new file mode 100755 index 0000000000000..f8fe4bd500948 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts @@ -0,0 +1,7 @@ +#!/usr/bin/env node +import {main} from '../lib'; + +main().catch(e => { + console.error(e); + process.exit(1); +}); \ No newline at end of file diff --git a/tools/@aws-cdk/constuct-metadata-updater/jest.config.js b/tools/@aws-cdk/constuct-metadata-updater/jest.config.js new file mode 100644 index 0000000000000..9a7e1a9cb0b61 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/jest.config.js @@ -0,0 +1,2 @@ +const baseConfig = require('@aws-cdk/cdk-build-tools/config/jest.config'); +module.exports = baseConfig; \ No newline at end of file diff --git a/tools/@aws-cdk/constuct-metadata-updater/lib/index.ts b/tools/@aws-cdk/constuct-metadata-updater/lib/index.ts new file mode 100644 index 0000000000000..a0a7cfda046db --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/lib/index.ts @@ -0,0 +1,6 @@ +import { ResourceMetadataUpdater } from './metadata-updater'; + +export async function main() { + const updater = new ResourceMetadataUpdater("../../../../packages/"); + await updater.execute(); +} \ No newline at end of file diff --git a/tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts b/tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts new file mode 100644 index 0000000000000..c2888aaa50b1f --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts @@ -0,0 +1,215 @@ +import { ClassDeclaration, Project, QuoteKind } from "ts-morph"; +import * as path from "path"; +import * as fs from "fs"; +// import SyntaxKind = ts.SyntaxKind; + +const DIRECTORIES_TO_SKIP = [ + "node_modules", + "dist", + "build", + "decdk", + "awslint", + "test", +]; + +export class ResourceMetadataUpdater { + private project: Project; + + constructor(dir: string) { + const projectDir = path.resolve(__dirname, dir); + + // Initialize a ts-morph Project + this.project = new Project({ + tsConfigFilePath: path.resolve(__dirname, "../tsconfig.json"), + manipulationSettings: { + quoteKind: QuoteKind.Single, + }, + }); + this.project.addSourceFilesAtPaths(this.readTypescriptFiles(projectDir)); + + console.log("Transformation complete."); + } + + public execute() { + // Process each file in the project + this.project.getSourceFiles().forEach((sourceFile) => { + console.log(`Processing file: ${sourceFile.getFilePath()}`); + this.transformFile(sourceFile.getFilePath()); + }); + } + + /** + * Recursively collect all .ts files from a given directory. + */ + private readTypescriptFiles(dir: string, filesList: string[] = []) { + const files = fs.readdirSync(dir); + + files.forEach((file) => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isDirectory()) { + // Check if this directory is in the list of directories to skip + if (!DIRECTORIES_TO_SKIP.includes(file)) { + this.readTypescriptFiles(filePath, filesList); + } + } else if ( + filePath.endsWith(".ts") && + !filePath.endsWith(".generated.ts") && + !filePath.endsWith(".d.ts") && + !file.includes("test") + ) { + filesList.push(filePath); + } + }); + + return filesList; + } + + /** + * Recursively checks if a given type is a descendant of 'Resource'. + */ + private isDescendantOfResource(type: any): boolean { + // Check if the current type is 'Resource' + if (type.getSymbol().getName() === 'Resource') { + return true; + } + + // Get the base types (parent types) + const baseTypes = type.getBaseTypes(); + for (const baseType of baseTypes) { + if (this.isDescendantOfResource(baseType)) { + return true; + } + } + + // If no base type is 'Resource', return false + return false; + } + + /** + * Parse and transform a file using ts-morph. + */ + private transformFile(filePath: string): void { + const sourceFile = this.project.getSourceFile(filePath); + if (!sourceFile) return; + + let importAdded = false; + + sourceFile.forEachChild((node) => { + if (node instanceof ClassDeclaration) { + const symbol = node.getSymbol(); + if (symbol) { + const className = symbol.getName(); // Correct way to get the name + + // Check if the class is abstract by inspecting modifiers + const isAbstract = node.getModifiers()?.some((mod) => mod.getText() === "abstract"); + if (isAbstract) { + console.log(`Skipping abstract class: ${className}`); + return; + } + + // Check if the class or its subclasses extends Resource + const type = node.getType(); + if (this.isDescendantOfResource(type)) { + console.log(`Relevant class found: ${className} extends Resource`); + + if (!importAdded) { + this.addImportAndMetadataStatement(sourceFile, filePath, node); + importAdded = true; + } + } + } + } + }); + } + + /** + * Add the import statement for MetadataType to the file. + */ + private addImportAndMetadataStatement(sourceFile: any, filePath: string, node: any) { + const ret = this.addLineInConstructor(sourceFile, node); + if (!ret) { + return; + } + + const absoluteFilePath = path.resolve(filePath); + const absoluteTargetPath = path.resolve(__dirname, '../../../../packages/aws-cdk-lib/core/lib/metadata-resource.ts'); + + let relativePath = path.relative(path.dirname(absoluteFilePath), absoluteTargetPath).replace(/\\/g, "/").replace(/.ts/, ""); + if (absoluteFilePath.includes('@aws-cdk')) { + relativePath = 'aws-cdk-lib/core/lib/metadata-resource' + } + + // Check if the import already exists + if (sourceFile.getImportDeclarations().some((stmt: any) => stmt.getModuleSpecifier().getText().includes('/metadata-resource'))) { + console.log("Import already exists, skipping addition."); + return; + } + + // Create the new import statement + sourceFile.addImportDeclaration({ + moduleSpecifier: relativePath, + namedImports: [{ name: "MetadataType" }], + }); + + console.log(`Added import for MetadataType in file: ${filePath} with relative path: ${relativePath}`); + + // Write the updated file back to disk + sourceFile.saveSync(); + } + + /** + * Add the line of code 'this.node.addMetadata(...)' inside the class constructor. + */ + private addLineInConstructor(sourceFile: any, classDeclaration: ClassDeclaration): boolean { + const constructor = classDeclaration.getConstructors()[0]; // Assuming there's only one constructor + + if (constructor) { + const parameters = constructor.getParameters(); + const parameterCount = parameters.length; + + // Only continue if there's at least 3 parameters. + if (parameterCount <= 2) { + return false; + } + + // Check if the statement already exists + const statements = constructor.getStatements(); + const hasMetadataCall = statements.some(statement => + statement.getText().includes('this.node.addMetadata(MetadataType.') + ); + + if (hasMetadataCall) { + console.log(`Metadata statement already exists in class: ${classDeclaration.getName()}`); + return true; + } + + // Find the super() call, if it exists + const superCall = constructor.getStatements().find(statement => + statement.getText().includes('super(') + ); + + // If a super() call exists, find its index and insert after it + if (superCall) { + const superCallIndex = constructor.getStatements().indexOf(superCall); + constructor.insertStatements(superCallIndex + 1, writer => { + writer.setIndentationLevel(0); + writer.write(' this.node.addMetadata(MetadataType.CONSTRUCT, props);'); + }); + console.log(`Added 'this.node.addMetadata();' after the 'super()' in the constructor of class: ${classDeclaration.getName()}`); + } else { + // If no super() call exists, just add the line at the top + constructor.insertStatements(0, writer => { + writer.setIndentationLevel(0); + writer.write(' this.node.addMetadata(MetadataType.CONSTRUCT, props);'); + }); + console.log(`No 'super()' found. Added 'this.node.addMetadata();' at the top of the constructor for class: ${classDeclaration.getName()}`); + } + } else { + console.log(`No constructor found for class: ${classDeclaration.getName()}`); + return false; + } + + sourceFile.saveSync(); + return true; + } +} diff --git a/tools/@aws-cdk/constuct-metadata-updater/package.json b/tools/@aws-cdk/constuct-metadata-updater/package.json new file mode 100644 index 0000000000000..3a711f2c0c43c --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/package.json @@ -0,0 +1,31 @@ +{ + "name": "@aws-cdk/metadata-updater", + "version": "0.0.0", + "private": true, + "bin": { + "metadata-updater": "bin/update-construct-metadata.ts" + }, + "scripts": { + "build": "tsc --build", + "build+test": "npm run build && npm run test", + "lint": "eslint --ext .ts,.tsx --fix --no-error-on-unmatched-pattern src test", + "package": "mkdir -p dist/js && mv $(npm pack) dist/js/", + "test": "jest --passWithNoTests --updateSnapshot", + "test:watch": "jest --watch", + "watch": "tsc --build -w tsconfig.json" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "@types/node": "^16", + "jest": "^29", + "ts-jest": "^29", + "typescript": "~5.5.2", + "cjs-module-lexer": "^1.4.1" + }, + "dependencies": { + "esbuild": "^0.24.0", + "ts-morph": "~24.0.0" + }, + "main": "lib/index.js", + "license": "Apache-2.0" +} diff --git a/tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts b/tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts new file mode 100644 index 0000000000000..9767914247611 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts @@ -0,0 +1,185 @@ +import { ResourceMetadataUpdater } from '../lib/metadata-updater'; +import { Project, ClassDeclaration, SourceFile, QuoteKind } from 'ts-morph'; +import * as path from 'path'; +import * as fs from 'fs'; + +// Mock ts-morph +jest.mock('ts-morph'); +// Mock fs +jest.mock('fs'); +// Mock path +jest.mock('path'); + +describe('ResourceMetadataUpdater', () => { + let updater: ResourceMetadataUpdater; + let mockSourceFile: jest.Mocked; + let mockClassDeclaration: jest.Mocked; + + beforeEach(() => { + // Reset all mocks + jest.clearAllMocks(); + + // Setup mock implementations + (Project as jest.Mock).mockImplementation(() => ({ + addSourceFilesAtPaths: jest.fn(), + getSourceFiles: jest.fn().mockReturnValue([]), + })); + + // Mock fs.readdirSync and fs.statSync + (fs.readdirSync as jest.Mock).mockReturnValue([]); + (fs.statSync as jest.Mock).mockReturnValue({ isDirectory: () => false }); + + // Mock path.resolve + (path.resolve as jest.Mock).mockImplementation((...args) => args.join('/')); + + // Create instance of updater + updater = new ResourceMetadataUpdater('./test-dir'); + }); + + describe('constructor', () => { + it('should initialize with correct project settings', () => { + expect(Project).toHaveBeenCalledWith({ + tsConfigFilePath: expect.stringMatching(/tsconfig\.json$/), + manipulationSettings: { + quoteKind: QuoteKind.Single + } + }); + }); + }); + + describe('readTypescriptFiles', () => { + it('should skip specified directories', () => { + const mockFiles = ['node_modules', 'dist', 'test', 'valid.ts']; + (fs.readdirSync as jest.Mock).mockReturnValue(mockFiles); + (path.join as jest.Mock).mockImplementation((...args) => args.join('/')); + (fs.statSync as jest.Mock).mockImplementation((path) => ({ + isDirectory: () => !path.endsWith('.ts') + })); + + const result = (updater as any).readTypescriptFiles('./test-dir'); + expect(result).toEqual(['./test-dir/valid.ts']); + }); + + it('should only include valid typescript files', () => { + const mockFiles = ['file.ts', 'file.generated.ts', 'file.d.ts', 'file.test.ts']; + (fs.readdirSync as jest.Mock).mockReturnValue(mockFiles); + (fs.statSync as jest.Mock).mockReturnValue({ isDirectory: () => false }); + + const result = (updater as any).readTypescriptFiles('./test-dir'); + expect(result).toEqual(['./test-dir/file.ts']); + }); + }); + + describe('isDescendantOfResource', () => { + it('should return true for direct Resource type', () => { + const mockType = { + getSymbol: () => ({ getName: () => 'Resource' }) + }; + + const result = (updater as any).isDescendantOfResource(mockType); + expect(result).toBe(true); + }); + + it('should return true for descendant of Resource', () => { + const mockType = { + getSymbol: () => ({ getName: () => 'NotResource' }), + getBaseTypes: () => [{ + getSymbol: () => ({ getName: () => 'Resource' }) + }] + }; + + const result = (updater as any).isDescendantOfResource(mockType); + expect(result).toBe(true); + }); + + it('should return false for non-Resource type', () => { + const mockType = { + getSymbol: () => ({ getName: () => 'NotResource' }), + getBaseTypes: () => [] + }; + + const result = (updater as any).isDescendantOfResource(mockType); + expect(result).toBe(false); + }); + }); + + describe('transformFile', () => { + beforeEach(() => { + mockClassDeclaration = { + getSymbol: jest.fn().mockReturnValue({ getName: () => 'TestClass' }), + getModifiers: jest.fn().mockReturnValue([]), + getType: jest.fn(), + getName: jest.fn().mockReturnValue('TestClass'), + getConstructors: jest.fn().mockReturnValue([]) + } as any; + + Object.setPrototypeOf(mockClassDeclaration, ClassDeclaration.prototype); + + mockSourceFile = { + forEachChild: jest.fn((callback) => callback(mockClassDeclaration)), + getImportDeclarations: jest.fn().mockReturnValue([]), + addImportDeclaration: jest.fn(), + saveSync: jest.fn() + } as any; + + (Project as jest.Mock).mockImplementation(() => ({ + addSourceFilesAtPaths: jest.fn(), + getSourceFile: jest.fn().mockReturnValue(mockSourceFile) + })); + + updater = new ResourceMetadataUpdater('./test-dir'); + (updater as any).addImportAndMetadataStatement = jest.fn(); + }); + + it('should skip abstract classes', () => { + mockClassDeclaration.getModifiers.mockReturnValue([{ getText: () => 'abstract' } as any]); + (updater as any).transformFile('test.ts'); + expect(mockClassDeclaration.getType).not.toHaveBeenCalled(); + }); + + it('should process non-abstract Resource classes', () => { + mockClassDeclaration.getType.mockReturnValue({ + getSymbol: () => ({ getName: () => 'Resource' }), + getBaseTypes: () => [] + } as any); + + (updater as any).transformFile('test.ts'); + expect((updater as any).addImportAndMetadataStatement).toHaveBeenCalled(); + }); + }); + + describe('addLineInConstructor', () => { + it('should not add metadata if constructor has less than 3 parameters', () => { + const mockConstructor = { + getParameters: jest.fn().mockReturnValue([1, 2]), + getStatements: jest.fn().mockReturnValue([]) + }; + + mockClassDeclaration = { + getName: jest.fn().mockReturnValue('TestClass'), + getConstructors: jest.fn().mockReturnValue([mockConstructor]) + } as any; + + const result = (updater as any).addLineInConstructor(mockSourceFile, mockClassDeclaration); + expect(result).toBe(false); + }); + + it('should add metadata statement after super() call', () => { + const mockStatements = [{ getText: () => 'super(scope, id);' }]; + const mockConstructor = { + getParameters: jest.fn().mockReturnValue([1, 2, 3]), + getStatements: jest.fn().mockReturnValue(mockStatements), + insertStatements: jest.fn() + }; + + mockClassDeclaration = { + getName: jest.fn().mockReturnValue('TestClass'), + getConstructors: jest.fn().mockReturnValue([mockConstructor]) + } as any; + + const result = (updater as any).addLineInConstructor(mockSourceFile, mockClassDeclaration); + expect(result).toBe(true); + expect(mockConstructor.insertStatements).toHaveBeenCalled(); + }); + }); +}); diff --git a/tools/@aws-cdk/constuct-metadata-updater/tsconfig.json b/tools/@aws-cdk/constuct-metadata-updater/tsconfig.json new file mode 100644 index 0000000000000..26a4b348983d4 --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["es2020", "dom"], + "strict": true, + "alwaysStrict": true, + "declaration": true, + "inlineSourceMap": true, + "inlineSources": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "resolveJsonModule": true, + "composite": true, + "incremental": true, + "moduleResolution": "node" + }, + "include": ["**/*.ts"], + "exclude": ["**/*.d.ts"] +} diff --git a/tools/@aws-cdk/constuct-metadata-updater/yarn.lock b/tools/@aws-cdk/constuct-metadata-updater/yarn.lock new file mode 100644 index 0000000000000..dfe1d87392c3a --- /dev/null +++ b/tools/@aws-cdk/constuct-metadata-updater/yarn.lock @@ -0,0 +1,2362 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3", "@babel/generator@^7.7.2": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/template@^7.25.9", "@babel/template@^7.3.3": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@ts-morph/common@~0.25.0": + version "0.25.0" + resolved "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz#b76cbd517118acc8eadaf12b2fc2d47f42923452" + integrity sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg== + dependencies: + minimatch "^9.0.4" + path-browserify "^1.0.1" + tinyglobby "^0.2.9" + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.14": + version "29.5.14" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/node@*": + version "22.10.5" + resolved "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b" + integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ== + dependencies: + undici-types "~6.20.0" + +"@types/node@^16": + version "16.18.123" + resolved "https://registry.npmjs.org/@types/node/-/node-16.18.123.tgz#9073e454ee52ce9e2de038e7e0cf90f65c9abd56" + integrity sha512-/n7I6V/4agSpJtFDKKFEa763Hc1z3hmvchobHS1TisCOTKD5nxq8NJ2iK7SRIMYL276Q9mgWOx2AWp5n2XI6eA== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0: + version "4.24.3" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + +bs-logger@^0.2.6: + version "0.2.6" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001688: + version "1.0.30001690" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== + +chalk@^4.0.0, chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" + integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-block-writer@^13.0.3: + version "13.0.3" + resolved "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz#90f8a84763a5012da7af61319dd638655ae90b5b" + integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.73: + version "1.5.79" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.79.tgz#4424f23f319db7a653cf9ee76102e4ac283e6b3e" + integrity sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +esbuild@^0.24.0: + version "0.24.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29: + version "29.7.0" + resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.3.6: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.4: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0, picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + +resolve@^1.20.0: + version "1.22.10" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +tinyglobby@^0.2.9: + version "0.2.10" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-jest@^29: + version "29.2.5" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== + dependencies: + bs-logger "^0.2.6" + ejs "^3.1.10" + fast-json-stable-stringify "^2.1.0" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" + +ts-morph@~24.0.0: + version "24.0.0" + resolved "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz#6249b526ade40cf99c8803e7abdae6c65882e58e" + integrity sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw== + dependencies: + "@ts-morph/common" "~0.25.0" + code-block-writer "^13.0.3" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typescript@~5.5.2: + version "5.5.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 39d1984f853a7fd68959dfab61712a7b5b207a00 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 14:11:10 -0800 Subject: [PATCH 08/10] chore: fix import order --- packages/aws-cdk-lib/aws-ecs/lib/cluster.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts b/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts index 5ae89f951ebcb..fb0b7b27752ff 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts @@ -27,8 +27,8 @@ import { AspectPriority, FeatureFlags, Annotations, } from '../../core'; -import { Disable_ECS_IMDS_Blocking, Enable_IMDS_Blocking_Deprecated_Feature } from '../../cx-api'; import { MetadataType } from '../../core/lib/metadata-resource'; +import { Disable_ECS_IMDS_Blocking, Enable_IMDS_Blocking_Deprecated_Feature } from '../../cx-api'; const CLUSTER_SYMBOL = Symbol.for('@aws-cdk/aws-ecs/lib/cluster.Cluster'); From b5c7a4fd55784a8f726710a7276bceb8129f7064 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 14:36:30 -0800 Subject: [PATCH 09/10] chore: fix import order --- .../.gitignore | 0 .../LICENSE | 0 .../README.md | 0 .../bin/update-construct-metadata | 0 .../bin/update-construct-metadata.ts | 0 .../lib/index.ts | 0 .../lib/metadata-updater.ts | 0 .../package.json | 0 .../test/metadata-updater.test.ts | 0 .../tsconfig.json | 0 .../yarn.lock | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/.gitignore (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/LICENSE (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/README.md (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/bin/update-construct-metadata (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/bin/update-construct-metadata.ts (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/lib/index.ts (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/lib/metadata-updater.ts (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/package.json (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/test/metadata-updater.test.ts (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/tsconfig.json (100%) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/yarn.lock (100%) diff --git a/tools/@aws-cdk/constuct-metadata-updater/.gitignore b/tools/@aws-cdk/construct-metadata-updater/.gitignore similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/.gitignore rename to tools/@aws-cdk/construct-metadata-updater/.gitignore diff --git a/tools/@aws-cdk/constuct-metadata-updater/LICENSE b/tools/@aws-cdk/construct-metadata-updater/LICENSE similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/LICENSE rename to tools/@aws-cdk/construct-metadata-updater/LICENSE diff --git a/tools/@aws-cdk/constuct-metadata-updater/README.md b/tools/@aws-cdk/construct-metadata-updater/README.md similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/README.md rename to tools/@aws-cdk/construct-metadata-updater/README.md diff --git a/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata b/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata rename to tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata diff --git a/tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts b/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata.ts similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/bin/update-construct-metadata.ts rename to tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata.ts diff --git a/tools/@aws-cdk/constuct-metadata-updater/lib/index.ts b/tools/@aws-cdk/construct-metadata-updater/lib/index.ts similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/lib/index.ts rename to tools/@aws-cdk/construct-metadata-updater/lib/index.ts diff --git a/tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts b/tools/@aws-cdk/construct-metadata-updater/lib/metadata-updater.ts similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/lib/metadata-updater.ts rename to tools/@aws-cdk/construct-metadata-updater/lib/metadata-updater.ts diff --git a/tools/@aws-cdk/constuct-metadata-updater/package.json b/tools/@aws-cdk/construct-metadata-updater/package.json similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/package.json rename to tools/@aws-cdk/construct-metadata-updater/package.json diff --git a/tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts b/tools/@aws-cdk/construct-metadata-updater/test/metadata-updater.test.ts similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/test/metadata-updater.test.ts rename to tools/@aws-cdk/construct-metadata-updater/test/metadata-updater.test.ts diff --git a/tools/@aws-cdk/constuct-metadata-updater/tsconfig.json b/tools/@aws-cdk/construct-metadata-updater/tsconfig.json similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/tsconfig.json rename to tools/@aws-cdk/construct-metadata-updater/tsconfig.json diff --git a/tools/@aws-cdk/constuct-metadata-updater/yarn.lock b/tools/@aws-cdk/construct-metadata-updater/yarn.lock similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/yarn.lock rename to tools/@aws-cdk/construct-metadata-updater/yarn.lock From b8aa484c4fa0c3ff2cbaae7cb75e6e79e405bad3 Mon Sep 17 00:00:00 2001 From: yuanhaoz Date: Fri, 10 Jan 2025 14:56:56 -0800 Subject: [PATCH 10/10] update jest config file --- .../jest.config.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tools/@aws-cdk/{constuct-metadata-updater => construct-metadata-updater}/jest.config.js (100%) diff --git a/tools/@aws-cdk/constuct-metadata-updater/jest.config.js b/tools/@aws-cdk/construct-metadata-updater/jest.config.js similarity index 100% rename from tools/@aws-cdk/constuct-metadata-updater/jest.config.js rename to tools/@aws-cdk/construct-metadata-updater/jest.config.js