diff --git a/lerna.json b/lerna.json index 05a0f3ac14fb5..df31157c2c7ae 100644 --- a/lerna.json +++ b/lerna.json @@ -20,6 +20,7 @@ "tools/@aws-cdk/yarn-cling", "tools/@aws-cdk/lazify", "tools/@aws-cdk/lambda-integration-test-updater", + "tools/@aws-cdk/construct-metadata-updater", "scripts/@aws-cdk/script-tests" ], "rejectCycles": true, diff --git a/package.json b/package.json index 80fe4609fe8e9..49ccdc7acccf4 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "tools/@aws-cdk/yarn-cling", "tools/@aws-cdk/lazify", "tools/@aws-cdk/lambda-integration-test-updater", + "tools/@aws-cdk/construct-metadata-updater", "scripts/@aws-cdk/script-tests" ], "nohoist": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/cdk.out b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-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.construct-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.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets.json new file mode 100644 index 0000000000000..0d19dfbe2b2fa --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets.json @@ -0,0 +1,19 @@ +{ + "version": "39.0.0", + "files": { + "598bd8fe13a00564f918969f53e8aeafc48e8928b3f3a1dc0b23c0f9e14641b7": { + "source": { + "path": "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "598bd8fe13a00564f918969f53e8aeafc48e8928b3f3a1dc0b23c0f9e14641b7.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.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.template.json new file mode 100644 index 0000000000000..3e62bd692b65d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.template.json @@ -0,0 +1,311 @@ +{ + "Resources": { + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/zPQM9AzUEwsL9ZNTsnWzclM0gsuSUzO1snLT0nVyyrWLzO00DMy0DNVzCrOzNQtKs0rycxN1QuC0AB0W+SaPQAAAA==" + }, + "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.construct-metadata.js.snapshot/integ.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/integ.json new file mode 100644 index 0000000000000..6435d9e6fb9f4 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/integ.json @@ -0,0 +1,12 @@ +{ + "version": "39.0.0", + "testCases": { + "cdk-metadata-testing-example1/DefaultTest": { + "stacks": [ + "metadata-testing-example" + ], + "assertionStack": "cdk-metadata-testing-example1/DefaultTest/DeployAssert", + "assertionStackName": "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62" + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/manifest.json new file mode 100644 index 0000000000000..4aa9305bf3858 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/manifest.json @@ -0,0 +1,218 @@ +{ + "version": "39.0.0", + "artifacts": { + "metadata-testing-example.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "metadata-testing-example.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "metadata-testing-example": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "metadata-testing-example.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}/106ae25718d85a96dc9c9409541a8394bf58df3a171098eaaa19fae3051b0cc5.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "metadata-testing-example.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": [ + "metadata-testing-example.assets" + ], + "metadata": { + "/metadata-testing-example/MyBucket": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "bucketName": "*", + "versioned": "*", + "removalPolicy": "destroy", + "lifecycleRules": [ + { + "expirationDate": "*", + "objectSizeLessThan": "*", + "objectSizeGreaterThan": "*" + } + ], + "websiteRedirect": { + "hostName": "*" + } + } + } + ], + "/metadata-testing-example/MyBucket/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyBucketF68F3FF0" + } + ], + "/metadata-testing-example/MyRestApi": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "description": "*", + "deployOptions": { + "stageName": "*" + }, + "apiDefinition": "*" + } + } + ], + "/metadata-testing-example/MyRestApi/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyRestApi2D1F47A9" + } + ], + "/metadata-testing-example/MyRestApi/Default": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/metadata-testing-example/MyRestApi/Deployment": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "description": "*", + "api": "*", + "retainDeployments": "*" + } + } + ], + "/metadata-testing-example/MyRestApi/Deployment/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyRestApiDeploymentB555B5828794f2113f3df855219df788729c8c3f" + } + ], + "/metadata-testing-example/MyRestApi/DeploymentStage.dev": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "deployment": "*", + "stageName": "*" + } + } + ], + "/metadata-testing-example/MyRestApi/DeploymentStage.dev/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "MyRestApiDeploymentStagedev8B390AA5" + } + ], + "/metadata-testing-example/MyRestApi/Endpoint": [ + { + "type": "aws:cdk:logicalId", + "data": "MyRestApiEndpoint4C55E4CB" + } + ], + "/metadata-testing-example/CDKMetadata/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadata" + } + ], + "/metadata-testing-example/CDKMetadata/Condition": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadataAvailable" + } + ], + "/metadata-testing-example/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/metadata-testing-example/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "metadata-testing-example" + }, + "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets": { + "type": "cdk:asset-manifest", + "properties": { + "file": "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version" + } + }, + "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62": { + "type": "aws:cloudformation:stack", + "environment": "aws://unknown-account/unknown-region", + "properties": { + "templateFile": "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.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}/598bd8fe13a00564f918969f53e8aeafc48e8928b3f3a1dc0b23c0f9e14641b7.json", + "requiresBootstrapStackVersion": 6, + "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", + "additionalDependencies": [ + "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.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": [ + "cdkmetadatatestingexample1DefaultTestDeployAssert8073CA62.assets" + ], + "metadata": { + "/cdk-metadata-testing-example1/DefaultTest/DeployAssert/CDKMetadata/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadata" + } + ], + "/cdk-metadata-testing-example1/DefaultTest/DeployAssert/CDKMetadata/Condition": [ + { + "type": "aws:cdk:logicalId", + "data": "CDKMetadataAvailable" + } + ], + "/cdk-metadata-testing-example1/DefaultTest/DeployAssert/BootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "BootstrapVersion" + } + ], + "/cdk-metadata-testing-example1/DefaultTest/DeployAssert/CheckBootstrapVersion": [ + { + "type": "aws:cdk:logicalId", + "data": "CheckBootstrapVersion" + } + ] + }, + "displayName": "cdk-metadata-testing-example1/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.construct-metadata.js.snapshot/metadata-testing-example.assets.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/metadata-testing-example.assets.json new file mode 100644 index 0000000000000..342f454195fea --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/metadata-testing-example.assets.json @@ -0,0 +1,19 @@ +{ + "version": "39.0.0", + "files": { + "106ae25718d85a96dc9c9409541a8394bf58df3a171098eaaa19fae3051b0cc5": { + "source": { + "path": "metadata-testing-example.template.json", + "packaging": "file" + }, + "destinations": { + "current_account-current_region": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "106ae25718d85a96dc9c9409541a8394bf58df3a171098eaaa19fae3051b0cc5.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.construct-metadata.js.snapshot/metadata-testing-example.template.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/metadata-testing-example.template.json new file mode 100644 index 0000000000000..e8a7223acd57d --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/metadata-testing-example.template.json @@ -0,0 +1,454 @@ +{ + "Resources": { + "MyBucketF68F3FF0": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": "my-cdk-example-bucket", + "LifecycleConfiguration": { + "Rules": [ + { + "ExpirationDate": "2019-10-01T00:00:00Z", + "ObjectSizeGreaterThan": 500, + "ObjectSizeLessThan": 600, + "Status": "Enabled" + } + ] + }, + "VersioningConfiguration": { + "Status": "Enabled" + }, + "WebsiteConfiguration": { + "RedirectAllRequestsTo": { + "HostName": "myHost" + } + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MyRestApi2D1F47A9": { + "Type": "AWS::ApiGateway::RestApi", + "Properties": { + "Body": { + "openapi": "3.0.2", + "info": { + "title": "My API", + "version": "1.0.0" + }, + "paths": { + "/pets": { + "get": { + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PetResponse" + } + } + } + } + }, + "x-amazon-apigateway-integration": { + "type": "MOCK", + "requestTemplates": { + "application/json": "{ \"statusCode\": 200 }" + }, + "responses": { + "default": { + "statusCode": "200", + "responseTemplates": { + "application/json": "{\"pets\": []}" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "PetResponse": { + "type": "object", + "properties": { + "pets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "Name": "MyRestApi" + } + }, + "MyRestApiDeploymentB555B5828794f2113f3df855219df788729c8c3f": { + "Type": "AWS::ApiGateway::Deployment", + "Properties": { + "Description": "My Rest API", + "RestApiId": { + "Ref": "MyRestApi2D1F47A9" + } + } + }, + "MyRestApiDeploymentStagedev8B390AA5": { + "Type": "AWS::ApiGateway::Stage", + "Properties": { + "DeploymentId": { + "Ref": "MyRestApiDeploymentB555B5828794f2113f3df855219df788729c8c3f" + }, + "RestApiId": { + "Ref": "MyRestApi2D1F47A9" + }, + "StageName": "dev" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/22QQU/DMAyFfws+oiwMEBLaDZjEBQHquE0T8lJv89YlUexulKr/HbUrGwJOcZ7t771kaId2eIZ7Gbh8Myh4buuJotsY3Mt7Lde2vi/dhnRaw7wrnnFLMIJzMLCjJBw85f090TbssHgNBbsKRpCTaAoVGCh4Qa5yBWVlQQKjaQ30ETmhcvBj1G9imK/J6YQ/6YlE3lbo/zQeE6FSOvaamYE9zYWVMso5kVMY1bAKcoraNDPzsPCHlzQGIy9RaY+VrSeRXEaid5GndZvYJY5tqt44p1iE6qWTpAWL4pJOZAMYeUwL9nzcOrj1VJORhDI5ukehKZzDzIw75pa8/muJkY8fqsj+NC4/8CfVTNpIHepb6vd/Ze32uuGmacuXUmOpjfEhJ7uWi93lrb0a2puztTAPUumVt2Szw/kFNrckBCkCAAA=" + }, + "Condition": "CDKMetadataAvailable" + } + }, + "Outputs": { + "MyRestApiEndpoint4C55E4CB": { + "Value": { + "Fn::Join": [ + "", + [ + "https://", + { + "Ref": "MyRestApi2D1F47A9" + }, + ".execute-api.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "MyRestApiDeploymentStagedev8B390AA5" + }, + "/" + ] + ] + } + } + }, + "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.construct-metadata.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/tree.json new file mode 100644 index 0000000000000..2e30842c04147 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.js.snapshot/tree.json @@ -0,0 +1,396 @@ +{ + "version": "tree-0.1", + "tree": { + "id": "App", + "path": "", + "children": { + "metadata-testing-example": { + "id": "metadata-testing-example", + "path": "metadata-testing-example", + "children": { + "MyBucket": { + "id": "MyBucket", + "path": "metadata-testing-example/MyBucket", + "children": { + "Resource": { + "id": "Resource", + "path": "metadata-testing-example/MyBucket/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::S3::Bucket", + "aws:cdk:cloudformation:props": { + "bucketName": "my-cdk-example-bucket", + "lifecycleConfiguration": { + "rules": [ + { + "expirationDate": "2019-10-01T00:00:00.000Z", + "status": "Enabled", + "objectSizeLessThan": 600, + "objectSizeGreaterThan": 500 + } + ] + }, + "versioningConfiguration": { + "status": "Enabled" + }, + "websiteConfiguration": { + "redirectAllRequestsTo": { + "hostName": "myHost" + } + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.CfnBucket", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_s3.Bucket", + "version": "0.0.0", + "metadata": [ + { + "bucketName": "*", + "versioned": "*", + "removalPolicy": "destroy", + "lifecycleRules": [ + { + "expirationDate": "*", + "objectSizeLessThan": "*", + "objectSizeGreaterThan": "*" + } + ], + "websiteRedirect": { + "hostName": "*" + } + } + ] + } + }, + "MyRestApi": { + "id": "MyRestApi", + "path": "metadata-testing-example/MyRestApi", + "children": { + "Resource": { + "id": "Resource", + "path": "metadata-testing-example/MyRestApi/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::ApiGateway::RestApi", + "aws:cdk:cloudformation:props": { + "body": { + "openapi": "3.0.2", + "info": { + "title": "My API", + "version": "1.0.0" + }, + "paths": { + "/pets": { + "get": { + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PetResponse" + } + } + } + } + }, + "x-amazon-apigateway-integration": { + "type": "MOCK", + "requestTemplates": { + "application/json": "{ \"statusCode\": 200 }" + }, + "responses": { + "default": { + "statusCode": "200", + "responseTemplates": { + "application/json": "{\"pets\": []}" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "PetResponse": { + "type": "object", + "properties": { + "pets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "name": "MyRestApi" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.CfnRestApi", + "version": "0.0.0" + } + }, + "Default": { + "id": "Default", + "path": "metadata-testing-example/MyRestApi/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.ResourceBase", + "version": "0.0.0", + "metadata": [ + "*" + ] + } + }, + "Deployment": { + "id": "Deployment", + "path": "metadata-testing-example/MyRestApi/Deployment", + "children": { + "Resource": { + "id": "Resource", + "path": "metadata-testing-example/MyRestApi/Deployment/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::ApiGateway::Deployment", + "aws:cdk:cloudformation:props": { + "description": "My Rest API", + "restApiId": { + "Ref": "MyRestApi2D1F47A9" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.CfnDeployment", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.Deployment", + "version": "0.0.0", + "metadata": [ + { + "description": "*", + "api": "*", + "retainDeployments": "*" + } + ] + } + }, + "DeploymentStage.dev": { + "id": "DeploymentStage.dev", + "path": "metadata-testing-example/MyRestApi/DeploymentStage.dev", + "children": { + "Resource": { + "id": "Resource", + "path": "metadata-testing-example/MyRestApi/DeploymentStage.dev/Resource", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::ApiGateway::Stage", + "aws:cdk:cloudformation:props": { + "deploymentId": { + "Ref": "MyRestApiDeploymentB555B5828794f2113f3df855219df788729c8c3f" + }, + "restApiId": { + "Ref": "MyRestApi2D1F47A9" + }, + "stageName": "dev" + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.CfnStage", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.Stage", + "version": "0.0.0", + "metadata": [ + { + "deployment": "*", + "stageName": "*" + } + ] + } + }, + "Endpoint": { + "id": "Endpoint", + "path": "metadata-testing-example/MyRestApi/Endpoint", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnOutput", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.aws_apigateway.SpecRestApi", + "version": "0.0.0", + "metadata": [ + { + "description": "*", + "deployOptions": { + "stageName": "*" + }, + "apiDefinition": "*" + } + ] + } + }, + "CDKMetadata": { + "id": "CDKMetadata", + "path": "metadata-testing-example/CDKMetadata", + "children": { + "Default": { + "id": "Default", + "path": "metadata-testing-example/CDKMetadata/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Condition": { + "id": "Condition", + "path": "metadata-testing-example/CDKMetadata/Condition", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnCondition", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + }, + "BootstrapVersion": { + "id": "BootstrapVersion", + "path": "metadata-testing-example/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "metadata-testing-example/CheckBootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnRule", + "version": "0.0.0" + } + } + }, + "constructInfo": { + "fqn": "aws-cdk-lib.Stack", + "version": "0.0.0" + } + }, + "cdk-metadata-testing-example1": { + "id": "cdk-metadata-testing-example1", + "path": "cdk-metadata-testing-example1", + "children": { + "DefaultTest": { + "id": "DefaultTest", + "path": "cdk-metadata-testing-example1/DefaultTest", + "children": { + "Default": { + "id": "Default", + "path": "cdk-metadata-testing-example1/DefaultTest/Default", + "constructInfo": { + "fqn": "constructs.Construct", + "version": "10.4.2" + } + }, + "DeployAssert": { + "id": "DeployAssert", + "path": "cdk-metadata-testing-example1/DefaultTest/DeployAssert", + "children": { + "CDKMetadata": { + "id": "CDKMetadata", + "path": "cdk-metadata-testing-example1/DefaultTest/DeployAssert/CDKMetadata", + "children": { + "Default": { + "id": "Default", + "path": "cdk-metadata-testing-example1/DefaultTest/DeployAssert/CDKMetadata/Default", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnResource", + "version": "0.0.0" + } + }, + "Condition": { + "id": "Condition", + "path": "cdk-metadata-testing-example1/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": "cdk-metadata-testing-example1/DefaultTest/DeployAssert/BootstrapVersion", + "constructInfo": { + "fqn": "aws-cdk-lib.CfnParameter", + "version": "0.0.0" + } + }, + "CheckBootstrapVersion": { + "id": "CheckBootstrapVersion", + "path": "cdk-metadata-testing-example1/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.construct-metadata.ts b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.ts new file mode 100644 index 0000000000000..6038bf259fc69 --- /dev/null +++ b/packages/@aws-cdk-testing/framework-integ/test/core/test/integ.construct-metadata.ts @@ -0,0 +1,97 @@ +import * as cdk from 'aws-cdk-lib'; +import * as integ from '@aws-cdk/integ-tests-alpha'; +import * as s3 from 'aws-cdk-lib/aws-s3'; +import * as api from 'aws-cdk-lib/aws-apigateway'; + +const app = new cdk.App({ + analyticsReporting: true, +}); +app.node.setContext('@aws-cdk/core:enableAdditionalMetadataCollection', true); +// Have to set JSII AGENT to make sure the integ test generated snapshot matches local +process.env.JSII_AGENT = 'node.js/v18.20.5'; +const stack = new cdk.Stack(app, 'metadata-testing-example'); + +// Create an S3 bucket (L2 construct) +new s3.Bucket(stack, 'MyBucket', { + bucketName: 'my-cdk-example-bucket', // String type + versioned: true, // Boolean type + removalPolicy: cdk.RemovalPolicy.DESTROY, // ENUM type + lifecycleRules: [{ // Array of object type + expirationDate: new Date('2019-10-01'), + objectSizeLessThan: 600, + objectSizeGreaterThan: 500, + }], + websiteRedirect: { + hostName: 'myHost', + }, +}); + +new api.SpecRestApi(stack, 'MyRestApi', { + description: 'My Rest API', + deployOptions: { + stageName: 'dev', + }, + // Define the API using OpenAPI specification + apiDefinition: api.ApiDefinition.fromInline({ + openapi: '3.0.2', + info: { + title: 'My API', + version: '1.0.0', + }, + paths: { + '/pets': { + get: { + 'responses': { + 200: { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/PetResponse', + }, + }, + }, + }, + }, + 'x-amazon-apigateway-integration': { + type: 'MOCK', + requestTemplates: { + 'application/json': '{ "statusCode": 200 }', + }, + responses: { + default: { + statusCode: '200', + responseTemplates: { + 'application/json': '{"pets": []}', + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + PetResponse: { + type: 'object', + properties: { + pets: { + type: 'array', + items: { + type: 'object', + properties: { + id: { type: 'string' }, + name: { type: 'string' }, + }, + }, + }, + }, + }, + }, + }, + }), +}); + +new integ.IntegTest(app, 'cdk-metadata-testing-example1', { + testCases: [stack], +}); diff --git a/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts b/packages/@aws-cdk/aws-amplify-alpha/lib/app.ts index 803ce4ae8f9a2..404b8b8f44821 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * An Amplify Console application @@ -224,6 +225,8 @@ export class App extends Resource implements IApp, iam.IGrantable { constructor(scope: Construct, id: string, props: AppProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..b4800770bdf27 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A branch @@ -162,6 +163,8 @@ export class Branch extends Resource implements IBranch { constructor(scope: Construct, id: string, props: BranchProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 25f0a6daa4fcc..0cdb0e079c8fd 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Options to add a domain to an application @@ -126,6 +127,8 @@ export class Domain extends Resource { constructor(scope: Construct, id: string, props: DomainProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 2164aeccb09f6..825c3bbc72476 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the App Runner Auto Scaling Configuration. @@ -154,6 +155,8 @@ export class AutoScalingConfiguration extends cdk.Resource implements IAutoScali super(scope, id, { physicalName: props.autoScalingConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 cf72bcc41de19..68f3aad5c7916 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The implementation provider chosen for tracing App Runner services @@ -140,6 +141,8 @@ export class ObservabilityConfiguration extends cdk.Resource implements IObserva super(scope, id, { physicalName: props.observabilityConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.observabilityConfigurationName !== undefined && !cdk.Token.isUnresolved(props.observabilityConfigurationName)) { if (props.observabilityConfigurationName.length < 4 || props.observabilityConfigurationName.length > 32) { diff --git a/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts b/packages/@aws-cdk/aws-apprunner-alpha/lib/service.ts index 4bbb61183193c..12fac5d7cefe3 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The image repository types @@ -1266,6 +1267,8 @@ export class Service extends cdk.Resource implements IService, iam.IGrantable { public constructor(scope: Construct, id: string, props: ServiceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7d1bf10e63f4b..074b4f48f7ad2 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the AppRunner VPC Connector @@ -135,6 +136,8 @@ export class VpcConnector extends cdk.Resource implements IVpcConnector { super(scope, id, { physicalName: props.vpcConnectorName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.vpcConnectorName !== undefined && !cdk.Token.isUnresolved(props.vpcConnectorName)) { if (props.vpcConnectorName.length < 4 || props.vpcConnectorName.length > 40) { 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 a8c31ca26ddae..58054cd9419c2 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the AppRunner VPC Ingress Connection @@ -142,6 +143,8 @@ export class VpcIngressConnection extends cdk.Resource implements IVpcIngressCon super(scope, id, { physicalName: props.vpcIngressConnectionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.vpcIngressConnectionName !== undefined && !cdk.Token.isUnresolved(props.vpcIngressConnectionName)) { if (props.vpcIngressConnectionName.length < 4 || props.vpcIngressConnectionName.length > 40) { diff --git a/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts b/packages/@aws-cdk/aws-cloud9-alpha/lib/environment.ts index 5fab01baf1f9f..b20a264c54ef5 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Cloud9 Environment @@ -197,6 +198,8 @@ export class Ec2Environment extends cdk.Resource implements IEc2Environment { constructor(scope: Construct, id: string, props: Ec2EnvironmentProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d13534e421c53..cb6d494682f35 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * GitHubRepository resource interface @@ -89,6 +90,8 @@ export class GitHubRepository extends cdk.Resource implements IGitHubRepository constructor(scope: Construct, id: string, props: GitHubRepositoryProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f86659ec8ae69..db6b81fc2f752 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an Identity Pool Role Attachment @@ -144,6 +145,8 @@ export class IdentityPoolRoleAttachment extends Resource implements IIdentityPoo constructor(scope: Construct, id: string, props: IdentityPoolRoleAttachmentProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 c5ee16a5f8fb6..edd1dd3e270fc 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Cognito Identity Pool @@ -362,6 +363,8 @@ export class IdentityPool extends Resource implements IIdentityPool { super(scope, id, { physicalName: props.identityPoolName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 98abe71edde44..208d01a0b5ca2 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents the address family for IP addresses in an IPAM pool. @@ -339,6 +340,8 @@ class IpamPool extends Resource implements IIpamPool { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) { throw new Error('awsService is required when addressFamily is set to ipv6'); @@ -415,6 +418,8 @@ class IpamScope extends Resource implements IIpamScopeBase { constructor(scope: Construct, id: string, props: IpamScopeProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this._ipamScope = new CfnIPAMScope(scope, 'IpamScope', { ipamId: props.ipamId, }); @@ -508,6 +513,8 @@ export class Ipam extends Resource { constructor(scope: Construct, id: string, props?: IpamProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props?.ipamName) { Tags.of(this).add(NAME_TAG, props.ipamName); } diff --git a/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts b/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts index 9ca80460798d8..ee56d6e812457 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Indicates whether the NAT gateway supports public or private connectivity. @@ -236,6 +237,8 @@ export class EgressOnlyInternetGateway extends Resource implements IRouteTarget constructor(scope: Construct, id: string, props: EgressOnlyInternetGatewayProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.egressOnlyInternetGatewayName) { Tags.of(this).add(NAME_TAG, props.egressOnlyInternetGatewayName); @@ -278,6 +281,8 @@ export class InternetGateway extends Resource implements IRouteTarget { constructor(scope: Construct, id: string, props: InternetGatewayProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.routerType = RouterType.GATEWAY; @@ -337,6 +342,8 @@ export class VPNGatewayV2 extends Resource implements IRouteTarget { super(scope, id, { physicalName: props.vpnGatewayName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.routerType = RouterType.GATEWAY; @@ -421,6 +428,8 @@ export class NatGateway extends Resource implements IRouteTarget { constructor(scope: Construct, id: string, props: NatGatewayProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.routerType = RouterType.NAT_GATEWAY; @@ -487,6 +496,8 @@ export class VPCPeeringConnection extends Resource implements IRouteTarget { constructor(scope: Construct, id: string, props: VPCPeeringConnectionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.routerType = RouterType.VPC_PEERING_CONNECTION; @@ -709,6 +720,8 @@ export class Route extends Resource implements IRouteV2 { constructor(scope: Construct, id: string, props: RouteProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.target = props.target; this.routeTable = props.routeTable; @@ -785,6 +798,8 @@ export class RouteTable extends Resource implements IRouteTable { constructor(scope: Construct, id: string, props: RouteTableProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.resource = new CfnRouteTable(this, 'RouteTable', { vpcId: props.vpc.vpcId, 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 c04145047a563..fb409190b5920 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface to define subnet CIDR @@ -246,6 +247,8 @@ export class SubnetV2 extends Resource implements ISubnetV2 { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 b7ae6d18fe071..96f88eb2dc8d1 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Additional props needed for secondary Address @@ -496,6 +497,8 @@ export class VpcV2 extends VpcV2Base { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpcName = props.vpcName; this.ipAddresses = props.primaryAddressBlock ?? IpAddresses.ipv4('10.0.0.0/16'); const vpcOptions = this.ipAddresses.allocateVpcCidr(); @@ -847,6 +850,8 @@ class VPCCidrBlock extends Resource implements IVPCCidrBlock { constructor(scope: Construct, id: string, props: VPCCidrBlockProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.resource = new CfnVPCCidrBlock(this, id, props); this.node.defaultChild = this.resource; this.cidrBlock = props.cidrBlock; diff --git a/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts b/packages/@aws-cdk/aws-gamelift-alpha/lib/alias.ts index 1b0e359791f1f..391a3d95630c7 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Gamelift Alias for a Gamelift fleet destination. @@ -199,6 +200,8 @@ export class Alias extends AliasBase { super(scope, id, { physicalName: props.aliasName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 8ce863687f169..6f38d5cc67420 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a GameLift Fleet used to run a custom game build. @@ -89,6 +90,8 @@ export class BuildFleet extends FleetBase implements IBuildFleet { super(scope, id, { physicalName: props.fleetName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..769dc9c29e488 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 { addConstructMetadata } 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,8 @@ export class Build extends BuildBase { super(scope, id, { physicalName: props.buildName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..42d71443f6826 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Configuration settings for intelligent automatic scaling that uses target tracking. @@ -424,6 +425,8 @@ export class GameServerGroup extends GameServerGroupBase { super(scope, id, { physicalName: props.gameServerGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..3d36a57308233 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a game session queue destination @@ -363,6 +364,8 @@ export class GameSessionQueue extends GameSessionQueueBase { super(scope, id, { physicalName: props.gameSessionQueueName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e57cbfcc6ad68 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a Gamelift matchmaking ruleset @@ -195,6 +196,8 @@ export class MatchmakingRuleSet extends MatchmakingRuleSetBase { super(scope, id, { physicalName: props.matchmakingRuleSetName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 b2101e4d7e47b..f4acd61b1d492 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a new queued matchmaking configuration @@ -105,6 +106,8 @@ export class QueuedMatchmakingConfiguration extends MatchmakingConfigurationBase super(scope, id, { physicalName: props.matchmakingConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..0b34c35d48a49 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Your configuration and custom game logic for use with Realtime Servers. @@ -191,6 +192,8 @@ export class Script extends ScriptBase { super(scope, id, { physicalName: props.scriptName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 36d4a67d9ed89..61306e004f19c 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a new standalone matchmaking configuration @@ -53,6 +54,8 @@ export class StandaloneMatchmakingConfiguration extends MatchmakingConfiguration super(scope, id, { physicalName: props.matchmakingConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 bd50787632776..93e47eccb2eda 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The type of the glue connection @@ -301,6 +302,8 @@ export class Connection extends cdk.Resource implements IConnection { super(scope, id, { physicalName: props.connectionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..c9d259cf9726c 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of a DataQualityTargetTable. @@ -122,6 +123,8 @@ export class DataQualityRuleset extends Resource implements IDataQualityRuleset super(scope, id, { physicalName: props.rulesetName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 819d95fd5511a..ecf4895343acd 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; export interface IDatabase extends IResource { /** @@ -101,6 +102,8 @@ export class Database extends Resource implements IDatabase { produce: () => Names.uniqueResourceName(this, {}).toLowerCase(), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..f564fba804d50 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; export interface ExternalTableProps extends TableBaseProps { /** @@ -52,6 +53,8 @@ export class ExternalTable extends TableBase { constructor(scope: Construct, id: string, props: ExternalTableProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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/jobs/pyspark-etl-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-etl-job.ts index d624920c28194..d56b5606aac5e 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-etl-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-etl-job.ts @@ -6,6 +6,7 @@ import { Construct } from 'constructs'; import { JobType, GlueVersion, JobLanguage, PythonVersion, WorkerType } from '../constants'; import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; import { Code } from '../code'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Python Spark ETL job @@ -84,6 +85,8 @@ export class PySparkEtlJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-flex-etl-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-flex-etl-job.ts index 03d77e1c7c955..603cf7d14592e 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-flex-etl-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-flex-etl-job.ts @@ -7,6 +7,7 @@ import { JobType, GlueVersion, JobLanguage, PythonVersion, WorkerType, Execution import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; import * as cdk from 'aws-cdk-lib/core'; import { Code } from '../code'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for PySparkFlexEtlJob @@ -82,6 +83,8 @@ export class PySparkFlexEtlJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-streaming-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-streaming-job.ts index 2ac2eb79cf825..7079897f7d352 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-streaming-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/pyspark-streaming-job.ts @@ -6,6 +6,7 @@ import { Construct } from 'constructs'; import { JobType, GlueVersion, JobLanguage, PythonVersion, WorkerType } from '../constants'; import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; import { Code } from '../code'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Python Spark ETL job @@ -84,6 +85,8 @@ export class PySparkStreamingJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/python-shell-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/python-shell-job.ts index bdbb6b83a516b..c546cfed7439e 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/python-shell-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/python-shell-job.ts @@ -3,6 +3,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'; import { Job, JobProperties } from './job'; import { Construct } from 'constructs'; import { JobType, GlueVersion, PythonVersion, MaxCapacity, JobLanguage } from '../constants'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Python Shell job @@ -53,6 +54,8 @@ export class PythonShellJob extends Job { */ constructor(scope: Construct, id: string, props: PythonShellJobProps) { super(scope, id, { physicalName: props.jobName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/ray-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/ray-job.ts index d0b738721a17d..d77c2547a5ab5 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/ray-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/ray-job.ts @@ -3,6 +3,7 @@ import * as iam from 'aws-cdk-lib/aws-iam'; import { Job, JobProperties } from './job'; import { Construct } from 'constructs'; import { JobType, GlueVersion, WorkerType, Runtime } from '../constants'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Ray Glue job @@ -49,6 +50,8 @@ export class RayJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.jobName = props.jobName ?? ''; diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-etl-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-etl-job.ts index 3c977cbe1736a..f4ff943f27633 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-etl-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-etl-job.ts @@ -6,6 +6,7 @@ import { Construct } from 'constructs'; import { JobType, GlueVersion, JobLanguage, WorkerType } from '../constants'; import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; import { Code } from '../code'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Scala Spark ETL job @@ -81,6 +82,8 @@ export class ScalaSparkEtlJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-flex-etl-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-flex-etl-job.ts index 5b56793ef6e86..4e15b13bbf45b 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-flex-etl-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-flex-etl-job.ts @@ -7,6 +7,7 @@ import { JobType, GlueVersion, JobLanguage, WorkerType, ExecutionClass } from '. import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; import * as cdk from 'aws-cdk-lib/core'; import { Code } from '../code'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Flex Jobs class @@ -109,6 +110,8 @@ export class ScalaSparkFlexEtlJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { diff --git a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-streaming-job.ts b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-streaming-job.ts index 5862338b84472..8789909b1bbac 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-streaming-job.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/jobs/scala-spark-streaming-job.ts @@ -5,6 +5,7 @@ import { Job, JobProperties } from './job'; import { Construct } from 'constructs'; import { JobType, GlueVersion, JobLanguage, WorkerType } from '../constants'; import { SparkUIProps, SparkUILoggingLocation, validateSparkUiPrefix, cleanSparkUiPrefixForGrant } from './spark-ui-utils'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for creating a Scala Spark ETL job @@ -80,6 +81,8 @@ export class ScalaSparkStreamingJob extends Job { super(scope, id, { physicalName: props.jobName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Set up role and permissions for principal this.role = props.role, { 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 626f4e8aafb57..f71e757545bf8 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Encryption options for a Table. @@ -120,6 +121,8 @@ export class S3Table extends TableBase { constructor(scope: Construct, id: string, props: S3TableProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7f61f2f4f979b..ffa6574ab2494 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface representing a created or an imported `SecurityConfiguration`. @@ -192,6 +193,8 @@ export class SecurityConfiguration extends cdk.Resource implements ISecurityConf produce: () => Names.uniqueResourceName(this, {}), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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-glue-alpha/lib/triggers/workflow.ts b/packages/@aws-cdk/aws-glue-alpha/lib/triggers/workflow.ts index 7b918a42a7c51..422332a464f55 100644 --- a/packages/@aws-cdk/aws-glue-alpha/lib/triggers/workflow.ts +++ b/packages/@aws-cdk/aws-glue-alpha/lib/triggers/workflow.ts @@ -15,6 +15,7 @@ import { NotifyEventTriggerOptions, ConditionalTriggerOptions, } from './trigger-options'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The base interface for Glue Workflow @@ -407,6 +408,8 @@ export class Workflow extends WorkflowBase { super(scope, id, { physicalName: props?.workflowName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new CfnWorkflow(this, 'Resource', { name: this.physicalName, 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..45a2016ee0291 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Audit Configuration @@ -197,6 +198,8 @@ export class AccountAuditConfiguration extends Resource implements IAccountAudit constructor(scope: Construct, id: string, props?: AccountAuditConfigurationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 6f6aa34c2c87a..cb6a4480553b9 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, ArnFormat } 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Logging @@ -90,6 +91,8 @@ export class Logging extends Resource implements ILogging { constructor(scope: Construct, id: string, props?: LoggingProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..14cde5b10befe 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents AWS IoT Scheduled Audit @@ -317,6 +318,8 @@ export class ScheduledAudit extends Resource implements IScheduledAudit { constructor(scope: Construct, id: string, props: ScheduledAuditProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..780127eb8b32c 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Rule @@ -115,6 +116,8 @@ export class TopicRule extends Resource implements ITopicRule { super(scope, id, { physicalName: props.topicRuleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..3453e117aaeae 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Events detector model. @@ -108,6 +109,8 @@ export class DetectorModel extends Resource implements IDetectorModel { super(scope, id, { physicalName: props.detectorModelName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d9f8596ff4b18 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an AWS IoT Events input. @@ -102,6 +103,8 @@ export class Input extends InputBase { super(scope, id, { physicalName: props.inputName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9101e1d9f1839..566fb0e7db6a3 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Channel @@ -211,6 +212,8 @@ export class Channel extends ChannelBase { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e12565a5c2f16..549534ad2b300 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Playback Key Pair @@ -60,6 +61,8 @@ export class PlaybackKeyPair extends PlaybackKeyPairBase { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '-_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d594d810240bf..4b1756965f2a2 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties of the IVS Recording configuration @@ -129,6 +130,8 @@ export class RecordingConfiguration extends Resource implements IRecordingConfig super(scope, id, { physicalName: props.recordingConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 b5965b42a5636..1241545afd8bd 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents an IVS Stream Key @@ -40,6 +41,8 @@ export class StreamKey extends core.Resource implements IStreamKey { constructor(scope: Construct, id: string, props: StreamKeyProps) { super(scope, id, {}); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d19c34cf2e407..79983858cc30f 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * An interface expressing the public properties on both an imported and @@ -907,6 +908,8 @@ class Import extends ApplicationBase { constructor(scope: Construct, id: string, attrs: { applicationArn: string; securityGroups?: ec2.ISecurityGroup[] }) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); // Imported applications have no associated role or grantPrincipal this.grantPrincipal = new iam.UnknownPrincipal({ resource: this }); @@ -971,6 +974,8 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps) { super(scope, id, { physicalName: props.applicationName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9b4ec25d30433..a5b168ddf9424 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; const PUT_RECORD_ACTIONS = [ 'firehose:PutRecord', @@ -318,6 +319,8 @@ export class DeliveryStream extends DeliveryStreamBase { super(scope, id, { physicalName: props.deliveryStreamName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ad019d4ae6d78 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a GolangFunction @@ -120,6 +121,9 @@ export class GoFunction extends lambda.Function { }), handler: 'bootstrap', // setting name to bootstrap so that the 'provided' runtime can also be used }); + + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 3bf00c9655148..2dc2fd8f06769 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for a PythonFunction @@ -80,5 +81,8 @@ export class PythonFunction extends Function { }), handler: resolvedHandler, }); + + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..57a2fd572b0ac 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Properties for PythonLayerVersion @@ -69,5 +70,8 @@ export class PythonLayerVersion extends lambda.LayerVersion { ...props.bundling, }), }); + + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ea1d51d6307b8..1f3895ddfd319 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Geofence Collection @@ -130,6 +131,8 @@ export class GeofenceCollection extends Resource implements IGeofenceCollection super(scope, id, { physicalName: props.geofenceCollectionName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 6ec34d7aac7e1..9d3a42ac91781 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents the Amazon Location Service Map @@ -290,6 +291,8 @@ export class Map extends Resource implements IMap { super(scope, id, { physicalName: props.mapName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..41a4e66301a24 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Place Index @@ -150,6 +151,8 @@ export class PlaceIndex extends Resource implements IPlaceIndex { super(scope, id, { physicalName: props.placeIndexName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d891dda58a3cc..1279dfb0e1fdf 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Route Calculator @@ -126,6 +127,8 @@ export class RouteCalculator extends Resource implements IRouteCalculator { super(scope, id, { physicalName: props.routeCalculatorName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e862ee04cfc6e..187ec76a9b6a5 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Tracker @@ -196,6 +197,8 @@ export class Tracker extends Resource implements ITracker { super(scope, id, { physicalName: props.trackerName ?? Lazy.string({ produce: () => generateUniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 55400bf498973..2c6ca7647fdb4 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Represents a MSK Cluster @@ -467,6 +468,8 @@ export class Cluster extends ClusterBase { super(scope, id, { physicalName: props.clusterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 08acc9461e9bb..b6e13ad3aab96 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Instances Types to use in Neptune cluster @@ -592,6 +593,8 @@ export class DatabaseCluster extends DatabaseClusterBase implements IDatabaseClu constructor(scope: Construct, id: string, props: DatabaseClusterProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 323ed2316379c..01f5950c9ab78 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Instances Types to use in Neptune cluster @@ -498,6 +499,8 @@ export class DatabaseInstance extends DatabaseInstanceBase implements IDatabaseI constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1b70ad49bf48a..cd9663084aff7 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The DB parameter group family that a DB parameter group is compatible with @@ -107,6 +108,8 @@ export class ClusterParameterGroup extends Resource implements IClusterParameter constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new CfnDBClusterParameterGroup(this, 'Resource', { name: props.clusterParameterGroupName, @@ -152,6 +155,8 @@ export class ParameterGroup extends Resource implements IParameterGroup { constructor(scope: Construct, id: string, props: ParameterGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new CfnDBParameterGroup(this, 'Resource', { name: props.parameterGroupName, 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 ce99448c0becb..75d32af78ed78 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface for a subnet group. @@ -72,6 +73,8 @@ export class SubnetGroup extends Resource implements ISubnetGroup { constructor(scope: Construct, id: string, props: SubnetGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 fc7fd3abae7d8..5334a1ed13105 100644 --- a/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts +++ b/packages/@aws-cdk/aws-pipes-alpha/lib/pipe.ts @@ -1,6 +1,7 @@ import { IResource, Resource, Stack } from 'aws-cdk-lib'; import { IRole, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; import { CfnPipe } from 'aws-cdk-lib/aws-pipes'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; import { Construct } from 'constructs'; import { IEnrichment } from './enrichment'; import { IFilter } from './filter'; @@ -182,6 +183,8 @@ class ImportedPipe extends PipeBase { constructor(scope: Construct, id: string, pipeName: string) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, { pipeName: pipeName }); this.pipeName = pipeName; this.pipeArn = Stack.of(this).formatArn({ service: 'pipes', @@ -215,6 +218,8 @@ export class Pipe extends PipeBase { constructor(scope: Construct, id: string, props: PipeProps) { super(scope, id, { physicalName: props.pipeName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); /** * Role setup diff --git a/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts b/packages/@aws-cdk/aws-redshift-alpha/lib/cluster.ts index 53ed9eec60348..aaac9da8fd784 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Possible Node Types to use in the cluster @@ -548,6 +549,8 @@ export class Cluster extends ClusterBase { constructor(scope: Construct, id: string, props: ClusterProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e3573473f90ab 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -42,5 +43,7 @@ export class DatabaseSecret extends secretsmanager.Secret { excludeCharacters: props.excludeCharacters ?? '"@/\\\ \'', }, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ad3b10e882183..3599135fa1695 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A parameter group @@ -74,6 +75,8 @@ export class ClusterParameterGroup extends ClusterParameterGroupBase { constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d5d108e28b667..0c629d49e2fc0 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface for a cluster subnet group. @@ -63,6 +64,8 @@ export class ClusterSubnetGroup extends Resource implements IClusterSubnetGroup constructor(scope: Construct, id: string, props: ClusterSubnetGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7615d3e1557e5..5051b2f85e902 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Firewall Domain List @@ -208,6 +209,8 @@ export class FirewallDomainList extends Resource implements IFirewallDomainList constructor(scope: Construct, id: string, props: FirewallDomainListProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 22b2869eaac11..389052ea73054 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Options for a Firewall Rule Group Association @@ -106,6 +107,8 @@ export class FirewallRuleGroupAssociation extends Resource { constructor(scope: Construct, id: string, props: FirewallRuleGroupAssociationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..90f5df083bcc4 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * A Firewall Rule Group @@ -225,6 +226,8 @@ export class FirewallRuleGroup extends Resource implements IFirewallRuleGroup { constructor(scope: Construct, id: string, props: FirewallRuleGroupProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 cf337c17a73d7..75f46b0f1810a 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface that represents the AccessPoint resource. @@ -210,6 +211,8 @@ export class AccessPoint extends AccessPointBase { super(scope, id, { physicalName: props.accessPointName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 8acca96c04559..207e2fddb67b6 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface for a SageMaker EndpointConfig resource. @@ -206,6 +207,8 @@ export class EndpointConfig extends cdk.Resource implements IEndpointConfig { super(scope, id, { physicalName: props.endpointConfigName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 91dda7736b180..0437d35801499 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /* * Amazon SageMaker automatic scaling doesn't support automatic scaling for burstable instances such @@ -408,6 +409,8 @@ export class Endpoint extends EndpointBase { super(scope, id, { physicalName: props.endpointName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 2a07b2faf2197..d0f3e7c3cd961 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * Interface that defines a Model resource. @@ -307,6 +308,8 @@ export class Model extends ModelBase { super(scope, id, { physicalName: props.modelName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..3cad4f2dc987d 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; import { Construct } from 'constructs'; export interface GroupProps { @@ -339,6 +340,8 @@ export class Group extends GroupBase { public constructor(scope: Construct, id: string, props: GroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..56388aad71734 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; import { Construct } from 'constructs'; import { IGroup } from './group'; import { ScheduleExpression } from './schedule-expression'; @@ -272,6 +273,8 @@ export class Schedule extends Resource implements ISchedule { super(scope, id, { physicalName: props.scheduleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 86dd12ff2ebba..d8cb164cf3125 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 { addConstructMetadata } 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`; @@ -313,6 +314,8 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..960856ced58b7 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 { addConstructMetadata } 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,8 @@ export class AttributeGroup extends AttributeGroupBase implements IAttributeGrou constructor(scope: Construct, id: string, props: AttributeGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.validateAttributeGroupProps(props); 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..f4a3f28e3f379 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 { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; /** * The interface that represents the ExampleResource resource. @@ -391,6 +392,7 @@ export class ExampleResource extends ExampleResourceBase { */ constructor(scope: Construct, id: string, props: ExampleResourceProps = {}) { // Call the constructor from Resource superclass, + // which attaches this construct to the construct tree. super(scope, id, { // You need to let the Resource superclass know which of your properties @@ -402,6 +404,9 @@ export class ExampleResource extends ExampleResourceBase { physicalName: props.waitConditionHandleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 836592b0ffda3..290e590e3d945 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/api-key.ts @@ -7,6 +7,7 @@ import { QuotaSettings, ThrottleSettings, UsagePlan, UsagePlanPerApiStage } from import * as iam from '../../aws-iam'; import { ArnFormat, IResource as IResourceBase, Resource, Stack } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * API keys are alphanumeric string values that you distribute to @@ -170,6 +171,8 @@ export class ApiKey extends ApiKeyBase { super(scope, id, { physicalName: props.apiKeyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new CfnApiKey(this, 'Resource', { customerId: props.customerId, @@ -253,6 +256,8 @@ export class RateLimitedApiKey extends ApiKeyBase { super(scope, id, { physicalName: props.apiKeyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new ApiKey(this, 'Resource', props); 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 1d1917a1bef8a..aef282ada7c04 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/cognito.ts @@ -3,6 +3,7 @@ import { IdentitySource } from './identity-source'; import * as cognito from '../../../aws-cognito'; import { Duration, FeatureFlags, Lazy, Names, Stack } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -72,6 +73,8 @@ export class CognitoUserPoolsAuthorizer extends Authorizer implements IAuthorize constructor(scope: Construct, id: string, props: CognitoUserPoolsAuthorizerProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e74b7b2a6dd38..10f663b46be61 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/authorizers/lambda.ts @@ -4,6 +4,7 @@ import * as iam from '../../../aws-iam'; import * as lambda from '../../../aws-lambda'; import { Arn, ArnFormat, Duration, FeatureFlags, Lazy, Names, Stack } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -207,6 +208,8 @@ export class TokenAuthorizer extends LambdaAuthorizer { constructor(scope: Construct, id: string, props: TokenAuthorizerProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const restApiId = this.lazyRestApiId(); @@ -271,6 +274,8 @@ export class RequestAuthorizer extends LambdaAuthorizer { constructor(scope: Construct, id: string, props: RequestAuthorizerProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if ((props.resultsCacheTtl === undefined || props.resultsCacheTtl.toSeconds() !== 0) && props.identitySources.length === 0) { throw new ValidationError('At least one Identity Source is required for a REQUEST-based Lambda authorizer if caching is enabled.', scope); 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 8547c4cc15f77..09754ef76805b 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 @@ -5,6 +5,7 @@ import { IRestApi, RestApiBase } from './restapi'; import { Stage } from './stage'; import { Resource, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface BasePathMappingOptions { /** @@ -55,6 +56,8 @@ export interface BasePathMappingProps extends BasePathMappingOptions { export class BasePathMapping extends Resource { constructor(scope: Construct, id: string, props: BasePathMappingProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 11f4ae2261d69..a06b5cb279103 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/deployment.ts @@ -5,6 +5,7 @@ import { IRestApi, RestApi, SpecRestApi, RestApiBase } from './restapi'; import { Lazy, RemovalPolicy, Resource, CfnResource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; import { md5hash } from '../../core/lib/helpers-internal'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface DeploymentProps { /** @@ -81,6 +82,8 @@ export class Deployment extends Resource { constructor(scope: Construct, id: string, props: DeploymentProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 015fefcb83062..4f4aa13d6a010 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/domain-name.ts @@ -8,6 +8,7 @@ import * as acm from '../../aws-certificatemanager'; import { IBucket } from '../../aws-s3'; import { IResource, Names, Resource, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for creating an api mapping @@ -138,6 +139,8 @@ export class DomainName extends Resource implements IDomainName { constructor(scope: Construct, id: string, props: DomainNameProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f7211623fba40..7b21c5fb2f693 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents gateway response resource. @@ -57,6 +58,8 @@ export interface GatewayResponseOptions { export class GatewayResponse extends Resource implements IGatewayResponse { constructor(scope: Construct, id: string, props: GatewayResponseProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 3ab88c3530cd3..6c0bac42086f3 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/lambda-api.ts @@ -6,6 +6,7 @@ import { ProxyResource, Resource } from './resource'; import { RestApi, RestApiProps } from './restapi'; import * as lambda from '../../aws-lambda'; import { UnscopedValidationError, ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface LambdaRestApiProps extends RestApiProps { /** @@ -61,6 +62,8 @@ export class LambdaRestApi extends RestApi { ...props.options, // deprecated, but we still support ...props, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 048bb22e4ec9e..e16968929e87d 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/method.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/method.ts @@ -15,6 +15,7 @@ import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { Annotations, ArnFormat, FeatureFlags, Lazy, Names, Resource, Stack } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { APIGATEWAY_REQUEST_VALIDATOR_UNIQUE_ID } from '../../cx-api'; export interface MethodOptions { /** @@ -177,6 +178,8 @@ export class Method extends Resource { constructor(scope: Construct, id: string, props: MethodProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..3a994ddb2059d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IModel { /** @@ -164,6 +165,8 @@ export class Model extends Resource implements IModel { super(scope, id, { physicalName: props.modelName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..074644ef05bc7 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IRequestValidator extends IResource { /** @@ -68,6 +69,8 @@ export class RequestValidator extends Resource implements IRequestValidator { super(scope, id, { physicalName: props.requestValidatorName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 0ec1f170ba61f..196176e197824 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/resource.ts @@ -7,6 +7,7 @@ import { Method, MethodOptions, AuthorizationType } from './method'; import { IRestApi, RestApi } from './restapi'; import { IResource as IResourceBase, Resource as ResourceConstruct } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IResource extends IResourceBase { /** @@ -439,6 +440,8 @@ export class Resource extends ResourceBase { constructor(scope: Construct, id: string, props: ResourceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); validateResourcePathPart(props.pathPart, scope); @@ -531,6 +534,8 @@ export class ProxyResource extends Resource { defaultIntegration: props.defaultIntegration, defaultMethodOptions: props.defaultMethodOptions, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const anyMethod = props.anyMethod ?? true; if (anyMethod) { diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts b/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts index 95bb906f1323f..2ff911ce558e6 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/restapi.ts @@ -19,6 +19,7 @@ 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 { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } 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,8 @@ export class SpecRestApi extends RestApiBase { constructor(scope: Construct, id: string, props: SpecRestApiProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const apiDefConfig = props.apiDefinition.bind(this); const resource = new CfnRestApi(this, 'Resource', { name: this.restApiName, @@ -818,6 +821,8 @@ export class RestApi extends RestApiBase { constructor(scope: Construct, id: string, props: RestApiProps = { }) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.minCompressionSize !== undefined && props.minimumCompressionSize !== undefined) { throw new ValidationError('both properties minCompressionSize and minimumCompressionSize cannot be set at once.', scope); @@ -982,6 +987,8 @@ class RootResource extends ResourceBase { constructor(api: RestApiBase, props: ResourceOptions, resourceId: string) { super(api, 'Default'); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, resourceId); this.parentResource = undefined; this.defaultIntegration = props.defaultIntegration; diff --git a/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts b/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts index 1c0d77114a869..bea854fc530ef 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/stage.ts @@ -9,6 +9,7 @@ import { parseMethodOptionsPath } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import { ArnFormat, Duration, IResource, Resource, Stack, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an APIGateway Stage. @@ -376,6 +377,8 @@ export class Stage extends StageBase { constructor(scope: Construct, id: string, props: StageProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 27fb4c179c2fc..833b29c608944 100644 --- a/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts +++ b/packages/aws-cdk-lib/aws-apigateway/lib/stepfunctions-api.ts @@ -5,6 +5,7 @@ import { StepFunctionsIntegration } from './integrations/stepfunctions'; import * as iam from '../../aws-iam'; import * as sfn from '../../aws-stepfunctions'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for StepFunctionsRestApi @@ -130,6 +131,8 @@ export class StepFunctionsRestApi extends RestApi { }); super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 32709bb3430ea..3aaff0afb8196 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { APIGATEWAY_USAGEPLANKEY_ORDERINSENSITIVE_ID } from '../../cx-api'; /** @@ -239,6 +240,8 @@ export class UsagePlan extends UsagePlanBase { constructor(scope: Construct, id: string, props: UsagePlanProps = { }) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d89f57bf36d45 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an API Gateway VpcLink @@ -68,6 +69,8 @@ export class VpcLink extends Resource implements IVpcLink { physicalName: props.vpcLinkName || Lazy.string({ produce: () => Names.nodeUniqueId(this.node) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const cfnResource = new CfnVpcLink(this, 'Resource', { name: this.physicalName, diff --git a/packages/aws-cdk-lib/aws-apigateway/test/restapi.test.ts b/packages/aws-cdk-lib/aws-apigateway/test/restapi.test.ts index 958805b278ac2..206454e5ce35b 100644 --- a/packages/aws-cdk-lib/aws-apigateway/test/restapi.test.ts +++ b/packages/aws-cdk-lib/aws-apigateway/test/restapi.test.ts @@ -1,7 +1,10 @@ import { testDeprecated } from '@aws-cdk/cdk-build-tools'; +import { cx_api } from '../..'; import { Template } from '../../assertions'; +import { UserPool } from '../../aws-cognito'; import { GatewayVpcEndpoint } from '../../aws-ec2'; import { App, CfnElement, CfnResource, Lazy, RemovalPolicy, Size, Stack } from '../../core'; +import { JSII_RUNTIME_SYMBOL } from '../../core/lib/constants'; import * as apigw from '../lib'; describe('restapi', () => { @@ -1475,3 +1478,66 @@ describe('SpecRestApi', () => { }); }); }); + +describe('telemetry metadata', () => { + it('redaction happens when feature flag is enabled', () => { + const app = new App(); + app.node.setContext(cx_api.ENABLE_ADDITIONAL_METADATA_COLLECTION, true); + const stack = new Stack(app); + + const mockConstructor = { + [JSII_RUNTIME_SYMBOL]: { + fqn: 'aws-cdk-lib.aws-apigateway.RestApi', + }, + }; + jest.spyOn(Object, 'getPrototypeOf').mockReturnValue({ + constructor: mockConstructor, + }); + + const api = new apigw.RestApi(stack, 'myapi', { + defaultMethodOptions: { + apiKeyRequired: true, + authorizer: new apigw.CognitoUserPoolsAuthorizer(stack, 'myauthorizer', { + cognitoUserPools: [new UserPool(stack, 'myuserpool')], + }), + }, + }); + + expect(api.node.metadata).toStrictEqual([{ + data: { + defaultMethodOptions: { + apiKeyRequired: '*', + authorizer: '*', + }, + }, + trace: undefined, + type: 'aws:cdk:analytics:construct', + }]); + }); + + it('redaction happens when feature flag is disabled', () => { + const app = new App(); + app.node.setContext(cx_api.ENABLE_ADDITIONAL_METADATA_COLLECTION, false); + const stack = new Stack(app); + + const mockConstructor = { + [JSII_RUNTIME_SYMBOL]: { + fqn: 'aws-cdk-lib.aws-apigateway.RestApi', + }, + }; + jest.spyOn(Object, 'getPrototypeOf').mockReturnValue({ + constructor: mockConstructor, + }); + + const api = new apigw.RestApi(stack, 'myapi', { + defaultMethodOptions: { + apiKeyRequired: true, + authorizer: new apigw.CognitoUserPoolsAuthorizer(stack, 'myauthorizer', { + cognitoUserPools: [new UserPool(stack, 'myuserpool')], + }), + }, + }); + + expect(api.node.metadata).toStrictEqual([]); + }); +}); 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 cc0c17cea76ff..2fd1a7fad71a6 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 @@ -5,6 +5,7 @@ import { IStage } from './stage'; import { CfnApiMapping, CfnApiMappingProps } from '.././index'; import { IResource, Resource } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Represents an ApiGatewayV2 ApiMapping resource @@ -89,6 +90,8 @@ export class ApiMapping extends Resource implements IApiMapping { constructor(scope: Construct, id: string, props: ApiMappingProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 866da51ca02b1..d1dc6185f6b4a 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 @@ -4,6 +4,7 @@ import { ICertificate } from '../../../aws-certificatemanager'; import { IBucket } from '../../../aws-s3'; import { IResource, Lazy, Resource, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * The minimum version of the SSL protocol that you want API Gateway to use for HTTPS connections. @@ -171,6 +172,8 @@ export class DomainName extends Resource implements IDomainName { constructor(scope: Construct, id: string, props: DomainNameProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.domainName === '') { throw new ValidationError('empty string for domainName not allowed', scope); 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 c30c04217a105..63dc0f243343b 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/api.ts @@ -8,6 +8,7 @@ import { CfnApi, CfnApiProps } from '.././index'; import { Metric, MetricOptions } from '../../../aws-cloudwatch'; import { ArnFormat, Duration, Stack, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IApi } from '../common/api'; import { ApiBase } from '../common/base'; import { DomainMappingOptions } from '../common/stage'; @@ -408,6 +409,8 @@ export class HttpApi extends HttpApiBase { constructor(scope: Construct, id: string, props?: HttpApiProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 a3aa4f015f583..d68ebc4a7b694 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 { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IAuthorizer } from '../common'; /** @@ -157,6 +158,8 @@ export class HttpAuthorizer extends Resource implements IHttpAuthorizer { constructor(scope: Construct, id: string, props: HttpAuthorizerProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 fd4d79a8d1494..e1adccae58fbc 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/integration.ts @@ -5,6 +5,7 @@ import { CfnIntegration } from '.././index'; import { IRole } from '../../../aws-iam'; import { Aws, Duration, Resource } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IIntegration } from '../common'; import { ParameterMapping } from '../parameter-mapping'; @@ -253,6 +254,8 @@ export class HttpIntegration extends Resource implements IHttpIntegration { constructor(scope: Construct, id: string, props: HttpIntegrationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (!props.integrationSubtype && !props.integrationUri) { throw new ValidationError('Either `integrationSubtype` or `integrationUri` must be specified.', scope); 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 54eb4e9fe8ce8..ddc56cf10cf7a 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/route.ts @@ -6,6 +6,7 @@ import { CfnRoute, CfnRouteProps } from '.././index'; import * as iam from '../../../aws-iam'; import { Aws, Resource } from '../../../core'; import { UnscopedValidationError, ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IRoute } from '../common'; /** @@ -183,6 +184,8 @@ export class HttpRoute extends Resource implements IHttpRoute { constructor(scope: Construct, id: string, props: HttpRouteProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 14cdb9ee7aa9b..4c4fafb9d7d76 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/http/stage.ts @@ -4,6 +4,7 @@ import { CfnStage } from '.././index'; import { Metric, MetricOptions } from '../../../aws-cloudwatch'; import { Stack } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { StageOptions, IStage, StageAttributes } from '../common'; import { IApi } from '../common/api'; import { StageBase } from '../common/base'; @@ -163,6 +164,8 @@ export class HttpStage extends HttpStageBase { super(scope, id, { physicalName: props.stageName ? props.stageName : DEFAULT_STAGE_NAME, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e3607be98e0eb..7361697dcf1f5 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Represents an API Gateway VpcLink @@ -88,6 +89,8 @@ export class VpcLink extends Resource implements IVpcLink { constructor(scope: Construct, id: string, props: VpcLinkProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7eb85ae30552b..0099762d3b4f2 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/api.ts @@ -4,6 +4,7 @@ import { CfnApi } from '.././index'; import { Grant, IGrantable } from '../../../aws-iam'; import { ArnFormat, Stack, Token } from '../../../core'; import { UnscopedValidationError, ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IApi } from '../common/api'; import { ApiBase } from '../common/base'; @@ -135,6 +136,8 @@ export class WebSocketApi extends ApiBase implements IWebSocketApi { constructor(scope: Construct, id: string, props?: WebSocketApiProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9ed1a8502ce7c..4a93b5102c578 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 { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IAuthorizer } from '../common'; /** @@ -104,6 +105,8 @@ export class WebSocketAuthorizer extends Resource implements IWebSocketAuthorize constructor(scope: Construct, id: string, props: WebSocketAuthorizerProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.type === WebSocketAuthorizerType.LAMBDA && !props.authorizerUri) { throw new ValidationError('authorizerUri is mandatory for Lambda authorizers', scope); 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 c7500e5198ccf..a6c8a124c620d 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/integration.ts @@ -5,6 +5,7 @@ import { CfnIntegration } from '.././index'; import { IRole } from '../../../aws-iam'; import { Duration, Resource } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IIntegration } from '../common'; /** @@ -171,6 +172,8 @@ export class WebSocketIntegration extends Resource implements IWebSocketIntegrat constructor(scope: Construct, id: string, props: WebSocketIntegrationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.timeout && !props.timeout.isUnresolved() && (props.timeout.toMilliseconds() < 50 || props.timeout.toMilliseconds() > 29000)) { throw new ValidationError('Integration timeout must be between 50 milliseconds and 29 seconds.', scope); 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 cf26704ccd29a..23310cb8c4544 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/route.ts @@ -5,6 +5,7 @@ import { WebSocketRouteIntegration } from './integration'; import { CfnRoute, CfnRouteResponse } from '.././index'; import { Resource } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IRoute } from '../common'; /** @@ -84,6 +85,8 @@ export class WebSocketRoute extends Resource implements IWebSocketRoute { constructor(scope: Construct, id: string, props: WebSocketRouteProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.routeKey != '$connect' && props.authorizer) { throw new ValidationError('You can only set a WebSocket authorizer to a $connect route.', scope); 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 76f84ad4d13e4..070bab963928d 100644 --- a/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts +++ b/packages/aws-cdk-lib/aws-apigatewayv2/lib/websocket/stage.ts @@ -4,6 +4,7 @@ import { CfnStage } from '.././index'; import { Grant, IGrantable } from '../../../aws-iam'; import { Stack } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { StageOptions, IApi, IStage, StageAttributes } from '../common'; import { StageBase } from '../common/base'; @@ -83,6 +84,8 @@ export class WebSocketStage extends StageBase implements IWebSocketStage { super(scope, id, { physicalName: props.stageName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..bf2c599e46b67 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Defines the platform for the AWS AppConfig Lambda extension. @@ -433,6 +434,8 @@ export class Application extends ApplicationBase { constructor(scope: Construct, id: string, props: ApplicationProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..2c5e46f7a3c14 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for DeploymentStrategy. @@ -132,6 +133,8 @@ export class DeploymentStrategy extends Resource implements IDeploymentStrategy super(scope, id, { physicalName: props.deploymentStrategyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e6b19ed22ced1 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Attributes of an existing AWS AppConfig environment to import it. @@ -303,6 +304,8 @@ export class Environment extends EnvironmentBase { super(scope, id, { physicalName: props.environmentName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..032f32e4ea914 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Defines Extension action points. @@ -496,6 +497,8 @@ export class Extension extends Resource implements IExtension { super(scope, id, { physicalName: props.extensionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 c42db197d9707..bb5bd0e7cc07b 100644 --- a/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts +++ b/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts @@ -6,6 +6,7 @@ import { BasicTargetTrackingScalingPolicyProps, TargetTrackingScalingPolicy } fr import * as iam from '../../aws-iam'; import { IResource, Lazy, Resource, TimeZone, withResolved } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IScalableTarget extends IResource { /** @@ -98,6 +99,8 @@ export class ScalableTarget extends Resource implements IScalableTarget { constructor(scope: Construct, id: string, props: ScalableTargetProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..cfc6ffa159bb0 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface for which all GatewayRoute based classes MUST implement @@ -107,6 +108,8 @@ export class GatewayRoute extends cdk.Resource implements IGatewayRoute { super(scope, id, { physicalName: props.gatewayRouteName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..11f3802f929a8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A utility enum defined for the egressFilter type property, the default of DROP_ALL, @@ -188,6 +189,8 @@ export class Mesh extends MeshBase { super(scope, id, { physicalName: props.meshName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..84774db8fead7 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface for which all Route based classes MUST implement @@ -113,6 +114,8 @@ export class Route extends cdk.Resource implements IRoute { super(scope, id, { physicalName: props.routeName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..837a141ebf51b 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface which all Virtual Gateway based classes must implement @@ -177,6 +178,8 @@ export class VirtualGateway extends VirtualGatewayBase { super(scope, id, { physicalName: props.virtualGatewayName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 903885ded6cf9..d2fad9f97a6e9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface which all VirtualNode based classes must implement @@ -184,6 +185,8 @@ export class VirtualNode extends VirtualNodeBase { super(scope, id, { physicalName: props.virtualNodeName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..89b4d854dbe67 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface which all VirtualRouter based classes MUST implement @@ -144,6 +145,8 @@ export class VirtualRouter extends VirtualRouterBase { super(scope, id, { physicalName: props.virtualRouterName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..c04e82da1c096 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents the interface which all VirtualService based classes MUST implement @@ -105,6 +106,8 @@ export class VirtualService extends cdk.Resource implements IVirtualService { super(scope, id, { physicalName: props.virtualServiceName || cdk.Lazy.string({ produce: () => cdk.Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 2ad18ebe422dd..a505bbf54f04b 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, ValidationError } from '../../core'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * the base properties for AppSync Functions @@ -157,6 +158,8 @@ export class AppsyncFunction extends Resource implements IAppsyncFunction { public constructor(scope: Construct, id: string, props: AppsyncFunctionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 6da325a6c844d..8f4f9a42682fb 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, ValidationError } from '../../core'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -608,6 +609,8 @@ export class GraphqlApi extends GraphqlApiBase { constructor(scope: Construct, id: string, props: GraphqlApiProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1a64efc165a89..ec01dc7bed2fa 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Merge type used to associate the source API @@ -161,6 +162,8 @@ export class SourceApiAssociation extends Resource implements ISourceApiAssociat constructor(scope: Construct, id: string, props: SourceApiAssociationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 2eb20562ab3d6..910d1e6f185f0 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { AUTOSCALING_GENERATE_LAUNCH_TEMPLATE } from '../../cx-api'; /** @@ -1332,6 +1333,8 @@ export class AutoScalingGroup extends AutoScalingGroupBase implements super(scope, id, { physicalName: props.autoScalingGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ecabfe16c0ea6 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Basic properties for a lifecycle hook @@ -112,6 +113,8 @@ export class LifecycleHook extends Resource implements ILifecycleHook { super(scope, id, { physicalName: props.lifecycleHookName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e3b456c323752 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a scheduled scaling action @@ -99,6 +100,8 @@ export class ScheduledAction extends Resource { constructor(scope: Construct, id: string, props: ScheduledActionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d6815cf692afb 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for a warm pool @@ -59,6 +60,8 @@ export class WarmPool extends Resource { super(scope, id, { physicalName: Lazy.string({ produce: () => Names.uniqueId(this) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e469f3464cd7a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A backup plan @@ -130,6 +131,8 @@ export class BackupPlan extends Resource implements IBackupPlan { constructor(scope: Construct, id: string, props: BackupPlanProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..5235c5e44a4c3 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for a BackupSelection @@ -92,6 +93,8 @@ export class BackupSelection extends Resource implements iam.IGrantable { constructor(scope: Construct, id: string, props: BackupSelectionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..9c69174fcbd75 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A backup vault @@ -269,6 +270,8 @@ export class BackupVault extends BackupVaultBase { constructor(scope: Construct, id: string, props: BackupVaultProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 6db6cbe246eb9..f7987279397e5 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A JobDefinition that uses ECS orchestration @@ -83,6 +84,8 @@ export class EcsJobDefinition extends JobDefinitionBase implements IEcsJobDefini constructor(scope: Construct, id: string, props: EcsJobDefinitionProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..145ae0cffd03c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A JobDefinition that uses Eks orchestration @@ -150,6 +151,8 @@ export class EksJobDefinition extends JobDefinitionBase implements IEksJobDefini constructor(scope: Construct, id: string, props: EksJobDefinitionProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..69ee4aa51e99d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a JobQueue @@ -259,6 +260,8 @@ export class JobQueue extends Resource implements IJobQueue { super(scope, id, { physicalName: props?.jobQueueName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7534db73c6a5a..3a3bb988ab1b5 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, Token } from '../../core'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Managed ComputeEnvironment. Batch will provision EC2 Instances to @@ -645,6 +646,8 @@ export class ManagedEc2EcsComputeEnvironment extends ManagedComputeEnvironmentBa constructor(scope: Construct, id: string, props: ManagedEc2EcsComputeEnvironmentProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.images = props.images; this.allocationStrategy = determineAllocationStrategy(id, props.allocationStrategy, this.spot); @@ -998,6 +1001,8 @@ export class ManagedEc2EksComputeEnvironment extends ManagedComputeEnvironmentBa constructor(scope: Construct, id: string, props: ManagedEc2EksComputeEnvironmentProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.kubernetesNamespace = props.kubernetesNamespace; this.eksCluster = props.eksCluster; @@ -1112,6 +1117,8 @@ export class FargateComputeEnvironment extends ManagedComputeEnvironmentBase imp constructor(scope: Construct, id: string, props: FargateComputeEnvironmentProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const { subnetIds } = props.vpc.selectSubnets(props.vpcSubnets); const resource = new CfnComputeEnvironment(this, 'Resource', { 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 de5bf801440c6..d1a52df4a7fc9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Not a real instance type! Indicates that Batch will choose one it determines to be optimal @@ -150,6 +151,8 @@ export class MultiNodeJobDefinition extends JobDefinitionBase implements IMultiN constructor(scope: Construct, id: string, props?: MultiNodeJobDefinitionProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..2d34a7945acb8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Scheduling Policy. Scheduling Policies tell the Batch @@ -211,6 +212,8 @@ export class FairshareSchedulingPolicy extends SchedulingPolicyBase implements I constructor(scope: Construct, id: string, props?: FairshareSchedulingPolicyProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..4c9aa6bd17d9d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an UnmanagedComputeEnvironment. Batch will not provision instances on your behalf @@ -67,6 +68,8 @@ export class UnmanagedComputeEnvironment extends ComputeEnvironmentBase implemen constructor(scope: Construct, id: string, props?: UnmanagedComputeEnvironmentProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 66cdfa89b366c..a2b657f973c1f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Name tag constant @@ -270,6 +271,8 @@ export class Certificate extends CertificateBase implements ICertificate { constructor(scope: Construct, id: string, props: CertificateProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 4fa006623a1bd..1090350b5e65e 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { CertificateRequestCertificateRequestFunction } from '../../custom-resource-handlers/dist/aws-certificatemanager/certificate-request-provider.generated'; /** @@ -84,6 +85,8 @@ export class DnsValidatedCertificate extends CertificateBase implements ICertifi constructor(scope: Construct, id: string, props: DnsValidatedCertificateProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..c4641e826ac93 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for your private certificate @@ -66,6 +67,8 @@ export class PrivateCertificate extends CertificateBase implements ICertificate constructor(scope: Construct, id: string, props: PrivateCertificateProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 01ffb55ada65a..0c85ca2affd3d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a new Slack channel configuration @@ -287,6 +288,8 @@ export class SlackChannelConfiguration extends SlackChannelConfigurationBase { super(scope, id, { physicalName: props.slackChannelConfigurationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..12712117326a1 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Collection of arbitrary properties @@ -180,5 +181,7 @@ export class CustomResource extends core.CustomResource { resourceType: props.resourceType, serviceToken: core.Lazy.string({ produce: () => props.provider.bind(this).serviceToken }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d63b72a786ea6 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Cache Policy @@ -141,6 +142,8 @@ export class CachePolicy extends Resource implements ICachePolicy { super(scope, id, { physicalName: props.cachePolicyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 dea39d78f7b4f..5fd02fe8dd3bf 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { CLOUDFRONT_DEFAULT_SECURITY_POLICY_TLS_V1_2_2021 } from '../../cx-api'; /** @@ -325,6 +326,8 @@ export class Distribution extends Resource implements IDistribution { constructor(scope: Construct, id: string, props: DistributionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 cd5652f5e9662..2e8a07defdf45 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CrossRegionStringParamReaderProvider } from '../../../custom-resource-handlers/dist/aws-cloudfront/cross-region-string-param-reader-provider.generated'; /** @@ -56,6 +57,8 @@ export class EdgeFunction extends Resource implements lambda.IVersion { constructor(scope: Construct, id: string, props: EdgeFunctionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1f50979fdb964..55053cb3cf8d0 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents the function's source code @@ -190,6 +191,8 @@ export class Function extends Resource implements IFunction { constructor(scope: Construct, id: string, props: FunctionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 699ba5725823c..e234189f604c3 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Key Group @@ -52,6 +53,8 @@ export class KeyGroup extends Resource implements IKeyGroup { constructor(scope: Construct, id: string, props: KeyGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f08ee46d6830f..5086b2d82d944 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The data to be imported to the key value store. @@ -249,6 +250,8 @@ export class KeyValueStore extends Resource implements IKeyValueStore { produce: () => Names.uniqueResourceName(this, { maxLength: 64 }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 bda8bd24fc36a..646ec19dbb741 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a CloudFront Origin Access Control @@ -199,6 +200,8 @@ export class S3OriginAccessControl extends OriginAccessControlBase { constructor(scope: Construct, id: string, props: S3OriginAccessControlProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const resource = new CfnOriginAccessControl(this, 'Resource', { originAccessControlConfig: { @@ -241,6 +244,8 @@ export class FunctionUrlOriginAccessControl extends OriginAccessControlBase { constructor(scope: Construct, id: string, props: FunctionUrlOriginAccessControlProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 a245c9b1d0b7a..3307b7c72ff5c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties of CloudFront OriginAccessIdentity @@ -150,6 +151,8 @@ export class OriginAccessIdentity extends OriginAccessIdentityBase implements IO constructor(scope: Construct, id: string, props?: OriginAccessIdentityProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 5b73f43db4892..55c699cfa0682 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Origin Request Policy @@ -90,6 +91,8 @@ export class OriginRequestPolicy extends Resource implements IOriginRequestPolic super(scope, id, { physicalName: props.originRequestPolicyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 5a7fb636f88ff..0c6cbd44ddb47 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Public Key @@ -55,6 +56,8 @@ export class PublicKey extends Resource implements IPublicKey { constructor(scope: Construct, id: string, props: PublicKeyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..a279bdc8a37bf 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents Realtime Log Configuration @@ -58,6 +59,8 @@ export class RealtimeLogConfig extends Resource implements IRealtimeLogConfig { super(scope, id, { physicalName: props.realtimeLogConfigName ?? Lazy.string({ produce: () => Names.uniqueResourceName(this, {}) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 deabdeadd1f50..f2c9edfde4759 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, withResolved } from '../../core'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a response headers policy. @@ -108,6 +109,8 @@ export class ResponseHeadersPolicy extends Resource implements IResponseHeadersP super(scope, id, { physicalName: props.responseHeadersPolicyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 438ee57dceb5a..7d783e9059849 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * HTTP status code to failover to second origin @@ -822,6 +823,8 @@ export class CloudFrontWebDistribution extends cdk.Resource implements IDistribu constructor(scope: Construct, id: string, props: CloudFrontWebDistributionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 fefa7f2fa55c3..f85daf6d4a12a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for an AWS CloudTrail trail @@ -247,6 +248,8 @@ export class Trail extends Resource { super(scope, id, { physicalName: props.trailName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7714a82f8f015..47026b771fd58 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for Alarms @@ -164,6 +165,8 @@ export class Alarm extends AlarmBase { super(scope, id, { physicalName: props.alarmName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 726c330984416..82ffa75673457 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for creating a Composite Alarm @@ -115,6 +116,8 @@ export class CompositeAlarm extends AlarmBase { super(scope, id, { physicalName: props.compositeAlarmName ?? Lazy.string({ produce: () => this.generateUniqueId() }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ad475f6fd0135..c309f189e36ba 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Specify the period for graphs when the CloudWatch dashboard loads @@ -120,6 +121,8 @@ export class Dashboard extends Resource { super(scope, id, { physicalName: props.dashboardName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..b90f75bf8cae3 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties of a CodeBuild {@link Fleet}. @@ -139,6 +140,8 @@ export class Fleet extends Resource implements IFleet { } super(scope, id, { physicalName: props.fleetName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..a4878a9584275 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface PipelineProjectProps extends CommonProjectProps { } @@ -16,5 +17,7 @@ export class PipelineProject extends Project { artifacts: new CodePipelineArtifacts(), ...props, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } diff --git a/packages/aws-cdk-lib/aws-codebuild/lib/project.ts b/packages/aws-cdk-lib/aws-codebuild/lib/project.ts index fd3110954d17c..e48735f6ed173 100644 --- a/packages/aws-cdk-lib/aws-codebuild/lib/project.ts +++ b/packages/aws-cdk-lib/aws-codebuild/lib/project.ts @@ -1060,6 +1060,8 @@ export class Project extends ProjectBase { super(scope, id, { physicalName: props.projectName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.role = props.role || new iam.Role(this, 'Role', { roleName: PhysicalName.GENERATE_IF_NEEDED, @@ -1791,6 +1793,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 { addConstructMetadata } 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..6efd8692e0c20 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The interface representing the ReportGroup resource - @@ -157,6 +158,8 @@ export class ReportGroup extends ReportGroupBase { super(scope, id, { physicalName: props.reportGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..a9b1e381a5fa7 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Creation properties for `GitHubSourceCredentials`. @@ -24,6 +25,8 @@ export interface GitHubSourceCredentialsProps { export class GitHubSourceCredentials extends Resource { constructor(scope: Construct, id: string, props: GitHubSourceCredentialsProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); new CfnSourceCredential(this, 'Resource', { serverType: 'GITHUB', @@ -56,6 +59,8 @@ export interface GitHubEnterpriseSourceCredentialsProps { export class GitHubEnterpriseSourceCredentials extends Resource { constructor(scope: Construct, id: string, props: GitHubEnterpriseSourceCredentialsProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); new CfnSourceCredential(this, 'Resource', { serverType: 'GITHUB_ENTERPRISE', @@ -88,6 +93,8 @@ export interface BitBucketSourceCredentialsProps { export class BitBucketSourceCredentials extends Resource { constructor(scope: Construct, id: string, props: BitBucketSourceCredentialsProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); new CfnSourceCredential(this, 'Resource', { serverType: 'BITBUCKET', 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..babade8af553c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for UntrustedCodeBoundaryPolicy @@ -91,5 +92,7 @@ export class UntrustedCodeBoundaryPolicy extends iam.ManagedPolicy { ...props.additionalStatements ?? [], ], }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } diff --git a/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts b/packages/aws-cdk-lib/aws-codecommit/lib/repository.ts index 7edfaed809acb..389b04b369055 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Additional options to pass to the notification rule. @@ -562,6 +563,8 @@ export class Repository extends RepositoryBase { super(scope, id, { physicalName: props.repositoryName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..89646f69c4735 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,8 @@ export class EcsApplication extends Resource implements IEcsApplication { super(scope, id, { physicalName: props.applicationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..30d4b2a68ce8d 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 { addConstructMetadata } 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,7 @@ export class EcsDeploymentConfig extends BaseDeploymentConfig implements IEcsDep computePlatform: ComputePlatform.ECS, trafficRouting: props?.trafficRouting ?? TrafficRouting.allAtOnce(), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 8bd2c6d46346a..4e708f60ee0ae 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 { addConstructMetadata } 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,8 @@ export class EcsDeploymentGroup extends DeploymentGroupBase implements IEcsDeplo role: props.role, roleConstructId: 'ServiceRole', }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.role = this._role; this.application = props.application || new EcsApplication(this, 'Application'); @@ -373,6 +376,8 @@ class ImportedEcsDeploymentGroup extends ImportedDeploymentGroupBase implements application: props.application, deploymentGroupName: props.deploymentGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.application = props.application; this.deploymentConfig = this._bindDeploymentConfig(props.deploymentConfig || EcsDeploymentConfig.ALL_AT_ONCE); 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..9af04410c35ce 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,8 @@ export class LambdaApplication extends Resource implements ILambdaApplication { super(scope, id, { physicalName: props.applicationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1b4ae89e607d5..9276fdc6f6e69 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../../custom-resources'; import { arnForDeploymentConfig, validateName } from '../private/utils'; @@ -81,6 +82,8 @@ export class CustomLambdaDeploymentConfig extends Resource implements ILambdaDep public constructor(scope: Construct, id: string, props: CustomLambdaDeploymentConfigProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..02e3f1ecda703 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 { addConstructMetadata } 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,7 @@ export class LambdaDeploymentConfig extends BaseDeploymentConfig implements ILam computePlatform: ComputePlatform.LAMBDA, trafficRouting: props?.trafficRouting ?? TrafficRouting.allAtOnce(), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..aa35d77247090 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 { addConstructMetadata } 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,8 @@ export class LambdaDeploymentGroup extends DeploymentGroupBase implements ILambd role: props.role, roleConstructId: 'ServiceRole', }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.role = this._role; this.application = props.application || new LambdaApplication(this, 'Application'); @@ -305,6 +308,8 @@ class ImportedLambdaDeploymentGroup extends ImportedDeploymentGroupBase implemen application: props.application, deploymentGroupName: props.deploymentGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.application = props.application; this.deploymentConfig = this._bindDeploymentConfig(props.deploymentConfig || LambdaDeploymentConfig.CANARY_10PERCENT_5MINUTES); 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..626a49bb8e941 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IBaseDeploymentConfig } from '../base-deployment-config'; import { CfnDeploymentGroup } from '../codedeploy.generated'; @@ -51,6 +52,8 @@ export class ImportedDeploymentGroupBase extends Resource { }); super(scope, id, { environmentFromArn: deploymentGroupArn }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.deploymentGroupName = deploymentGroupName; this.deploymentGroupArn = deploymentGroupArn; } @@ -117,6 +120,8 @@ export class DeploymentGroupBase extends Resource { super(scope, id, { physicalName: props.deploymentGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this._role = props.role || new iam.Role(this, props.roleConstructId, { assumedBy: new iam.ServicePrincipal('codedeploy.amazonaws.com'), 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 3450c642eec96..2c6653ecfeb57 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnApplication } from '../codedeploy.generated'; import { arnForApplication, validateName } from '../private/utils'; @@ -81,6 +82,8 @@ export class ServerApplication extends Resource implements IServerApplication { super(scope, id, { physicalName: props.applicationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..2ebe2af5cd9da 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 { addConstructMetadata } 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,7 @@ export class ServerDeploymentConfig extends BaseDeploymentConfig implements ISer constructor(scope: Construct, id: string, props: ServerDeploymentConfigProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..286b30251a9f5 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 { addConstructMetadata } 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,8 @@ class ImportedServerDeploymentGroup extends ImportedDeploymentGroupBase implemen application: props.application, deploymentGroupName: props.deploymentGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.application = props.application; this.deploymentConfig = this._bindDeploymentConfig(props.deploymentConfig || ServerDeploymentConfig.ONE_AT_A_TIME); @@ -278,6 +281,8 @@ export class ServerDeploymentGroup extends DeploymentGroupBase implements IServe role: props.role, roleConstructId: 'Role', }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.role = this._role; this.application = props.application || new ServerApplication(this, 'Application', { 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 c05092c5853d9..6702e0f150c3d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The compute platform of the profiling group. @@ -185,6 +186,8 @@ export class ProfilingGroup extends ProfilingGroupBase { super(scope, id, { physicalName: props.profilingGroupName ?? Lazy.string({ produce: () => this.generateUniqueId() }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..424d3e53a4842 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -472,6 +473,8 @@ export class Pipeline extends PipelineBase { super(scope, id, { physicalName: props.pipelineName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..47abc79be353f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The level of detail to include in the notifications for this resource. @@ -141,6 +142,8 @@ export class NotificationRule extends Resource implements INotificationRule { constructor(scope: constructs.Construct, id: string, props: NotificationRuleProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 be99057e9079f..1fd8129f0b85f 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 @@ -5,6 +5,7 @@ import { ClientAttributes } from './user-pool-attr'; import { IUserPoolResourceServer, ResourceServerScope } from './user-pool-resource-server'; import { IResource, Resource, Duration, Stack, SecretValue, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from '../../custom-resources'; /** @@ -413,6 +414,8 @@ export class UserPoolClient extends Resource implements IUserPoolClient { constructor(scope: Construct, id: string, props: UserPoolClientProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.disableOAuth && props.oAuth) { throw new ValidationError('OAuth settings cannot be specified when disableOAuth is set.', this); 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 7bb4981582ecb..caf566285ffcc 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 @@ -5,6 +5,7 @@ import { UserPoolClient } from './user-pool-client'; import { ICertificate } from '../../aws-certificatemanager'; import { IResource, Resource, Stack, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { AwsCustomResource, AwsCustomResourcePolicy, AwsSdkCall, PhysicalResourceId } from '../../custom-resources'; /** @@ -125,6 +126,8 @@ export class UserPoolDomain extends Resource implements IUserPoolDomain { constructor(scope: Construct, id: string, props: UserPoolDomainProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (!!props.customDomain === !!props.cognitoDomain) { throw new ValidationError('One of, and only one of, cognitoDomain or customDomain must be specified', this); 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 58cdfe51995d8..2d3597959471d 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 @@ -4,6 +4,7 @@ import { IUserPool } from './user-pool'; import { IRole } from '../../aws-iam'; import { IResource, Resource, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a user pool group. @@ -87,6 +88,8 @@ export class UserPoolGroup extends Resource implements IUserPoolGroup { constructor(scope: Construct, id: string, props: UserPoolGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..dc9832b9c4c51 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolAmazonIdentityProvider @@ -34,6 +35,8 @@ export class UserPoolIdentityProviderAmazon extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAmazonProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ff21453bddbc7..408056555d9f0 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 @@ -4,6 +4,7 @@ import { CfnUserPoolIdentityProvider } from '../cognito.generated'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { SecretValue } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolAppleIdentityProvider @@ -51,6 +52,8 @@ export class UserPoolIdentityProviderApple extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAppleProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ffb0f6a993895 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Properties to initialize UserPoolFacebookIdentityProvider @@ -38,6 +39,8 @@ export class UserPoolIdentityProviderFacebook extends UserPoolIdentityProviderBa constructor(scope: Construct, id: string, props: UserPoolIdentityProviderFacebookProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 73ff047546ef5..883c44ac2eeaa 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 @@ -3,6 +3,7 @@ import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { SecretValue } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -44,6 +45,8 @@ export class UserPoolIdentityProviderGoogle extends UserPoolIdentityProviderBase constructor(scope: Construct, id: string, props: UserPoolIdentityProviderGoogleProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7940f1bbbe6ee..31a54661d247d 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 @@ -3,6 +3,7 @@ import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { Names, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -107,6 +108,8 @@ export class UserPoolIdentityProviderOidc extends UserPoolIdentityProviderBase { constructor(scope: Construct, id: string, props: UserPoolIdentityProviderOidcProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9122aeb78c41d..70934ccf2b4a2 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 @@ -3,6 +3,7 @@ import { UserPoolIdentityProviderProps } from './base'; import { UserPoolIdentityProviderBase } from './private/user-pool-idp-base'; import { Names, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnUserPoolIdentityProvider } from '../cognito.generated'; /** @@ -121,6 +122,8 @@ export class UserPoolIdentityProviderSaml extends UserPoolIdentityProviderBase { constructor(scope: Construct, id: string, props: UserPoolIdentityProviderSamlProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..5288b1af6f538 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents a Cognito user pool resource server @@ -102,6 +103,8 @@ export class UserPoolResourceServer extends Resource implements IUserPoolResourc super(scope, id, { physicalName: props.identifier, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9aebbaf360a94..42e59418fe2c1 100644 --- a/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts +++ b/packages/aws-cdk-lib/aws-cognito/lib/user-pool.ts @@ -14,6 +14,7 @@ import { IKey } from '../../aws-kms'; import * as lambda from '../../aws-lambda'; import { ArnFormat, Duration, IResource, Lazy, Names, RemovalPolicy, Resource, Stack, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The different ways in which users of this pool can sign up or sign in. @@ -982,6 +983,8 @@ export class UserPool extends UserPoolBase { constructor(scope: Construct, id: string, props: UserPoolProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..8422a124c73b0 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for a AccessKeysRotated @@ -37,6 +38,8 @@ export class AccessKeysRotated extends ManagedRule { : {}, }, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -81,6 +84,8 @@ export class CloudFormationStackDriftDetectionCheck extends ManagedRule { cloudformationRoleArn: Lazy.string({ produce: () => this.role.roleArn }), }, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.ruleScope = RuleScope.fromResource( ResourceType.CLOUDFORMATION_STACK, props.ownStackOnly ? Stack.of(this).stackId : undefined ); @@ -128,5 +133,7 @@ export class CloudFormationStackNotificationCheck extends ManagedRule { ), ruleScope: RuleScope.fromResources([ResourceType.CLOUDFORMATION_STACK]), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } diff --git a/packages/aws-cdk-lib/aws-config/lib/rule.ts b/packages/aws-cdk-lib/aws-config/lib/rule.ts index 31784ef337b5a..58d10d0b9bd9f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface representing an AWS Config rule @@ -288,6 +289,8 @@ export class ManagedRule extends RuleNew { super(scope, id, { physicalName: props.configRuleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.ruleScope = props.ruleScope; @@ -417,6 +420,8 @@ export class CustomRule extends RuleNew { super(scope, id, { physicalName: props.configRuleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (!props.configurationChanges && !props.periodic) { throw new Error('At least one of `configurationChanges` or `periodic` must be set to true.'); @@ -532,6 +537,8 @@ export class CustomPolicy extends RuleNew { super(scope, id, { physicalName: props.configRuleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (!props.policyText || [...props.policyText].length === 0) { throw new Error('Policy Text cannot be empty.'); diff --git a/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts b/packages/aws-cdk-lib/aws-docdb/lib/cluster.ts index c4ae6a4c0cc89..f3dcd13fea2cb 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; const MIN_ENGINE_VERSION_FOR_IO_OPTIMIZED_STORAGE = 5; @@ -465,6 +466,8 @@ export class DatabaseCluster extends DatabaseClusterBase { constructor(scope: Construct, id: string, props: DatabaseClusterProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 49ed80bc3314d..3877425fce03f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -79,6 +80,8 @@ export class DatabaseSecret extends Secret { excludeCharacters: excludedCharacters, }, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..573df298cf915 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A database instance @@ -219,6 +220,8 @@ export class DatabaseInstance extends DatabaseInstanceBase implements IDatabaseI constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..f6615ee5c6a4f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A parameter group @@ -74,6 +75,8 @@ export class ClusterParameterGroup extends ClusterParameterGroupBase implements constructor(scope: Construct, id: string, props: ClusterParameterGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9ba74232dab95..4b90113ef60d1 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts @@ -33,6 +33,7 @@ import { Token, } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const HASH_KEY_TYPE = 'HASH'; @@ -555,6 +556,8 @@ export class TableV2 extends TableBaseV2 { public constructor(scope: Construct, id: string, props: TablePropsV2) { super(scope, id, { physicalName: props.tableName ?? PhysicalName.GENERATE_IF_NEEDED }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 511860da53684..3ee695c146316 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table.ts @@ -22,6 +22,7 @@ import { Fn, Lazy, Names, RemovalPolicy, Stack, Token, CustomResource, } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; const HASH_KEY_TYPE = 'HASH'; const RANGE_KEY_TYPE = 'RANGE'; @@ -1183,6 +1184,8 @@ export class Table extends TableBase { super(scope, id, { physicalName: props.tableName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 c46ef05fd88f9..10348927879a9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { BASTION_HOST_USE_AMAZON_LINUX_2023_BY_DEFAULT } from '../../cx-api'; /** @@ -192,6 +193,8 @@ export class BastionHostLinux extends Resource implements IInstance { constructor(scope: Construct, id: string, props: BastionHostLinuxProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..72a37cb593bf9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for a ClientVpnAuthorizationRule @@ -65,6 +66,8 @@ export class ClientVpnAuthorizationRule extends Resource { } const clientVpnEndpoint = props.clientVpnEndoint || props.clientVpnEndpoint; super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..9aa753c846d69 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for a client VPN endpoint @@ -292,6 +293,8 @@ export class ClientVpnEndpoint extends Resource implements IClientVpnEndpoint { constructor(scope: Construct, id: string, props: ClientVpnEndpointProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 2eb795970e829..a115341e132da 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for a ClientVpnRoute @@ -94,6 +95,8 @@ export class ClientVpnRoute extends Resource { } const clientVpnEndpoint = props.clientVpnEndoint || props.clientVpnEndpoint; super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 70cd8da08dde7..824ab8e9cbdff 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -461,6 +462,8 @@ export class Instance extends Resource implements IInstance { constructor(scope: Construct, id: string, props: InstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..569587decc3cd 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The format of the Key Pair @@ -202,6 +203,8 @@ export class KeyPair extends Resource implements IKeyPair { produce: () => Names.uniqueResourceName(this, { maxLength: 255 }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 4b31246502f0b..c4bd48cd1e156 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -597,6 +598,8 @@ export class LaunchTemplate extends Resource implements ILaunchTemplate, iam.IGr constructor(scope: Construct, id: string, props: LaunchTemplateProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e691558ef1b1e..f09e9055d83dd 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Name tag constant @@ -116,6 +117,8 @@ export class NetworkAcl extends NetworkAclBase { constructor(scope: Construct, id: string, props: NetworkAclProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpc = props.vpc; @@ -274,6 +277,8 @@ export class NetworkAclEntry extends NetworkAclEntryBase { super(scope, id, { physicalName: props.networkAclEntryName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.networkAcl = props.networkAcl; @@ -373,6 +378,8 @@ export class SubnetNetworkAclAssociation extends SubnetNetworkAclAssociationBase super(scope, id, { physicalName: props.subnetNetworkAclAssociationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.association = new CfnSubnetNetworkAclAssociation(this, 'Resource', { networkAclId: props.networkAcl.networkAclId, 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..238432e7905e4 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Determines where your instances are placed on the underlying hardware according to the specified PlacementGroupStrategy @@ -169,6 +170,8 @@ export class PlacementGroup extends Resource implements IPlacementGroup { super(scope, id, { physicalName: undefined, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 4ca436d0b57b9..6e7628493d349 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A prefix list @@ -135,6 +136,8 @@ export class PrefixList extends PrefixListBase { produce: () => Names.uniqueResourceName(this, { maxLength: 255, allowedSpecialCharacters: '.-_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f7c2736180335..2b71ccb104699 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const SECURITY_GROUP_SYMBOL = Symbol.for('@aws-cdk/iam.SecurityGroup'); @@ -501,6 +502,8 @@ export class SecurityGroup extends SecurityGroupBase { super(scope, id, { physicalName: props.securityGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 a9f072e03a600..f9e014da10d2f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -624,6 +625,8 @@ export class Volume extends VolumeBase { super(scope, id, { physicalName: props.volumeName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ded2876ce7815..f6839f705b339 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { RegionInfo } from '../../region-info'; /** @@ -100,6 +101,8 @@ export class VpcEndpointService extends Resource implements IVpcEndpointService constructor(scope: Construct, id: string, props: VpcEndpointServiceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d2eb2d68f1f52..8c2a0cfc794ee 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A VPC endpoint. @@ -183,6 +184,8 @@ export class GatewayVpcEndpoint extends VpcEndpoint implements IGatewayVpcEndpoi constructor(scope: Construct, id: string, props: GatewayVpcEndpointProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const subnets: ISubnet[] = props.subnets ? flatten(props.subnets.map(s => props.vpc.selectSubnets(s).subnets)) @@ -875,6 +878,8 @@ export class InterfaceVpcEndpoint extends VpcEndpoint implements IInterfaceVpcEn constructor(scope: Construct, id: string, props: InterfaceVpcEndpointProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const securityGroups = props.securityGroups || [new SecurityGroup(this, 'SecurityGroup', { vpc: props.vpc, 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 550ea27ed3157..2ac9e45664ce9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { S3_CREATE_DEFAULT_LOGGING_POLICY } from '../../cx-api'; /** @@ -854,6 +855,8 @@ export class FlowLog extends FlowLogBase { constructor(scope: Construct, id: string, props: FlowLogProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1a5f7b3ecc9c6..170c5cf758913 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 { addConstructMetadata } 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'; @@ -1495,6 +1496,8 @@ export class Vpc extends VpcBase { */ constructor(scope: Construct, id: string, props: VpcProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const stack = Stack.of(this); @@ -2075,6 +2078,8 @@ export class Subnet extends Resource implements ISubnet { constructor(scope: Construct, id: string, props: SubnetProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); Object.defineProperty(this, VPC_SUBNET_SYMBOL, { value: true }); @@ -2366,6 +2371,8 @@ export class PublicSubnet extends Subnet implements IPublicSubnet { constructor(scope: Construct, id: string, props: PublicSubnetProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } /** @@ -2404,6 +2411,8 @@ export class PrivateSubnet extends Subnet implements IPrivateSubnet { constructor(scope: Construct, id: string, props: PrivateSubnetProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -2425,6 +2434,8 @@ class ImportedVpc extends VpcBase { super(scope, id, { region: props.region, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpcId = props.vpcId; this.vpcArn = Arn.format({ @@ -2478,6 +2489,8 @@ class LookedUpVpc extends VpcBase { region: props.region, account: props.ownerAccountId, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpcId = props.vpcId; this.vpcArn = Arn.format({ @@ -2581,6 +2594,8 @@ class ImportedSubnet extends Resource implements ISubnet, IPublicSubnet, IPrivat constructor(scope: Construct, id: string, attrs: SubnetAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); if (!attrs.routeTableId) { // The following looks a little weird, but comes down to: diff --git a/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts b/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts index 6af4d186a2af3..d6be7d37f36d2 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IVpnConnection extends IResource { /** @@ -169,6 +170,8 @@ export class VpnGateway extends Resource implements IVpnGateway { constructor(scope: Construct, id: string, props: VpnGatewayProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 @@ -280,6 +283,8 @@ export class VpnConnection extends VpnConnectionBase { constructor(scope: Construct, id: string, props: VpnConnectionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (!props.vpc.vpnGatewayId) { props.vpc.enableVpnGateway({ diff --git a/packages/aws-cdk-lib/aws-ecr/lib/repository.ts b/packages/aws-cdk-lib/aws-ecr/lib/repository.ts index 7d7977a6763c4..7a1fa7cb3c85d 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 { addConstructMetadata } 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'; @@ -721,6 +722,8 @@ export class Repository extends RepositoryBase { super(scope, id, { physicalName: props.repositoryName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..6e01519c6f48a 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { IEc2TaskDefinition } from '../ec2/ec2-task-definition'; import { IFargateTaskDefinition } from '../fargate/fargate-task-definition'; @@ -76,6 +77,8 @@ export class ImportedTaskDefinition extends Resource implements IEc2TaskDefiniti constructor(scope: Construct, id: string, props: ImportedTaskDefinitionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 45db813fd0655..1e2442ebc0e94 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 { addConstructMetadata } 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'; @@ -430,6 +431,8 @@ export class TaskDefinition extends TaskDefinitionBase { */ constructor(scope: Construct, id: string, props: TaskDefinitionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 88eaf76497773..e4617f2329f76 100644 --- a/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-ecs/lib/cluster.ts @@ -27,6 +27,7 @@ import { AspectPriority, FeatureFlags, Annotations, } from '../../core'; +import { addConstructMetadata } 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'); @@ -260,6 +261,8 @@ export class Cluster extends Resource implements ICluster { super(scope, id, { physicalName: props.clusterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if ((props.containerInsights !== undefined) && props.containerInsightsV2) { throw new Error('You cannot set both containerInsights and containerInsightsV2'); @@ -1056,6 +1059,8 @@ class ImportedCluster extends Resource implements ICluster { */ constructor(scope: Construct, id: string, props: ClusterAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.clusterName = props.clusterName; this.vpc = props.vpc; this.hasEc2Capacity = props.hasEc2Capacity !== false; 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 b303136b26154..7986d7911b33b 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 { addConstructMetadata } 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'; @@ -182,6 +183,8 @@ export class Ec2Service extends BaseService implements IEc2Service { placementStrategies: Lazy.any({ produce: () => this.strategies }, { omitEmptyArray: true }), schedulingStrategy: props.daemon ? 'DAEMON' : 'REPLICA', }, props.taskDefinition); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..f7bbc29dfe5d7 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -143,6 +144,8 @@ export class Ec2TaskDefinition extends TaskDefinition implements IEc2TaskDefinit pidMode: props.pidMode, inferenceAccelerators: props.inferenceAccelerators, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 3694919eeff74..deecf359fbcb2 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 { addConstructMetadata } 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. */ @@ -123,6 +125,8 @@ export class ExternalService extends BaseService implements IExternalService { cluster: props.cluster.clusterName, taskDefinition: props.deploymentController?.type === DeploymentControllerType.EXTERNAL ? undefined : props.taskDefinition.taskDefinitionArn, }, props.taskDefinition); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..3ca2a8909315a 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../../lib/base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -79,6 +80,8 @@ export class ExternalTaskDefinition extends TaskDefinition implements IExternalT compatibility: Compatibility.EXTERNAL, networkMode: props.networkMode ?? NetworkMode.BRIDGE, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 166d8d722e0ce..c7be3e8be057f 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 { addConstructMetadata } 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,9 @@ export class FargateService extends BaseService implements IFargateService { platformVersion: props.platformVersion, }, props.taskDefinition); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); + let securityGroups; if (props.securityGroup !== undefined) { securityGroups = [props.securityGroup]; 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 c3f096ee77e73..e8de513eee89c 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { ImportedTaskDefinition } from '../base/_imported-task-definition'; import { CommonTaskDefinitionAttributes, @@ -163,6 +164,8 @@ export class FargateTaskDefinition extends TaskDefinition implements IFargateTas networkMode: NetworkMode.AWS_VPC, pidMode: props.pidMode, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 823f17695fe75..1bbcdfb2d142a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an EFS AccessPoint @@ -209,6 +210,8 @@ export class AccessPoint extends AccessPointBase { constructor(scope: Construct, id: string, props: AccessPointProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const clientToken = props.clientToken; if ((clientToken?.length === 0 || (clientToken && clientToken.length > 64)) && !Token.isUnresolved(clientToken)) { @@ -252,6 +255,8 @@ class ImportedAccessPoint extends AccessPointBase { constructor(scope: Construct, id: string, attrs: AccessPointAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); if (!attrs.accessPointId) { if (!attrs.accessPointArn) { 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 3118a3974cb58..848ef5d3181d1 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -728,6 +729,8 @@ export class FileSystem extends FileSystemBase { */ constructor(scope: Construct, id: string, props: FileSystemProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.props = props; @@ -942,6 +945,8 @@ class ImportedFileSystem extends FileSystemBase { constructor(scope: Construct, id: string, attrs: FileSystemAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); if (!!attrs.fileSystemId === !!attrs.fileSystemArn) { throw new Error('One of fileSystemId or fileSystemArn, but not both, must be provided.'); 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 dc3c1a93176b8..26bb36dd10c49 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an access entry in an Amazon EKS cluster. @@ -324,6 +325,8 @@ export class AccessEntry extends Resource implements IAccessEntry { constructor(scope: Construct, id: string, props: AccessEntryProps ) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ceb220453d42d..9206b0b3331d3 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an Amazon EKS Add-On. @@ -126,6 +127,8 @@ export class Addon extends Resource implements IAddon { super(scope, id, { physicalName: props.addonName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ad2cd22ac7adc..3ad35d0cf54d8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; // defaults are based on https://eksctl.io const DEFAULT_CAPACITY_COUNT = 2; @@ -1570,6 +1571,8 @@ export class Cluster extends ClusterBase { super(scope, id, { physicalName: props.clusterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const stack = Stack.of(this); @@ -2405,6 +2408,8 @@ class ImportedCluster extends ClusterBase { constructor(scope: Construct, id: string, private readonly props: ClusterAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.clusterName = props.clusterName; this.clusterArn = this.stack.formatArn(clusterArnComponents(props.clusterName)); 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..3fabced2b3f7b 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Configuration props for EKS Fargate. @@ -35,6 +36,8 @@ export class FargateCluster extends Cluster { coreDnsComputeType: props.coreDnsComputeType ?? CoreDnsComputeType.FARGATE, version: props.version, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f2695774764bc..e9d877c165be4 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * NodeGroup interface @@ -390,6 +391,8 @@ export class Nodegroup extends Resource implements INodegroup { super(scope, id, { physicalName: props.nodegroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 0b1f86c2d2b13..3555a6d6866dc 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Initialization properties for `OpenIdConnectProvider`. @@ -47,5 +48,7 @@ export class OpenIdConnectProvider extends iam.OpenIdConnectProvider { url: props.url, clientIds, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 4ba978e2b7c2a..65f58e8bcac7e 100644 --- a/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts +++ b/packages/aws-cdk-lib/aws-elasticloadbalancing/lib/load-balancer.ts @@ -6,6 +6,7 @@ import { } from '../../aws-ec2'; import { Duration, Lazy, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for a LoadBalancer @@ -256,6 +257,8 @@ export class LoadBalancer extends Resource implements IConnectable { constructor(scope: Construct, id: string, props: LoadBalancerProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 fa70da1857e63..1cef047063c48 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 @@ -10,6 +10,7 @@ import * as ec2 from '../../../aws-ec2'; import * as cxschema from '../../../cloud-assembly-schema'; import { Duration, FeatureFlags, Lazy, Resource, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -269,6 +270,8 @@ export class ApplicationListener extends BaseListener implements IApplicationLis trustStoreArn: props.mutualAuthentication?.trustStore?.trustStoreArn, } : undefined, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.loadBalancer = props.loadBalancer; this.protocol = protocol; @@ -775,6 +778,8 @@ class ImportedApplicationListener extends ExternalApplicationListener { constructor(scope: Construct, id: string, props: ApplicationListenerAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.listenerArn = props.listenerArn; const defaultPort = props.defaultPort !== undefined ? ec2.Port.tcp(props.defaultPort) : undefined; @@ -792,6 +797,8 @@ class LookedUpApplicationListener extends ExternalApplicationListener { constructor(scope: Construct, id: string, props: cxapi.LoadBalancerListenerContextResponse) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.listenerArn = props.listenerArn; this.connections = new ec2.Connections({ 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 46dc3be37420b..e920f44ac2b5a 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 @@ -9,6 +9,7 @@ import * as s3 from '../../../aws-s3'; import * as cxschema from '../../../cloud-assembly-schema'; import { CfnResource, Duration, Lazy, Names, Resource, Stack } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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,8 @@ export class ApplicationLoadBalancer extends BaseLoadBalancer implements IApplic securityGroups: Lazy.list({ produce: () => this.connections.securityGroups.map(sg => sg.securityGroupId) }), ipAddressType: props.ipAddressType, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.ipAddressType = props.ipAddressType ?? IpAddressType.IPV4; @@ -1185,6 +1188,8 @@ class ImportedApplicationLoadBalancer extends Resource implements IApplicationLo super(scope, id, { environmentFromArn: props.loadBalancerArn, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpc = props.vpc; this.loadBalancerArn = props.loadBalancerArn; @@ -1233,6 +1238,8 @@ class LookedUpApplicationLoadBalancer extends Resource implements IApplicationLo super(scope, id, { environmentFromArn: props.loadBalancerArn, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.loadBalancerArn = props.loadBalancerArn; this.loadBalancerCanonicalHostedZoneId = props.loadBalancerCanonicalHostedZoneId; 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 1406dd53a49da..2d1717d53c2e0 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnTrustStoreRevocation } from '../elasticloadbalancingv2.generated'; /** @@ -65,6 +66,8 @@ export enum RevocationType { export class TrustStoreRevocation extends Resource { constructor(scope: Construct, id: string, props: TrustStoreRevocationProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 cb824717173fb..8010f48e04b63 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 @@ -2,6 +2,7 @@ import { Construct } from 'constructs'; import { IBucket } from '../../../aws-s3'; import { IResource, Resource, Fn, Names, Lazy, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { CfnTrustStore } from '../elasticloadbalancingv2.generated'; /** @@ -105,6 +106,8 @@ export class TrustStore extends Resource implements ITrustStore { produce: () => Names.uniqueResourceName(this, { maxLength: 32 }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.trustStoreName !== undefined && !Token.isUnresolved(props.trustStoreName)) { if (props.trustStoreName.length < 1 || props.trustStoreName.length > 32) { 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 9179e04d40c8e..4cb6d7aca1e32 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 @@ -6,6 +6,7 @@ import { INetworkLoadBalancerTarget, INetworkTargetGroup, NetworkTargetGroup } f import * as cxschema from '../../../cloud-assembly-schema'; import { Duration, Resource, Lazy, Token } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -204,6 +205,8 @@ export class NetworkListener extends BaseListener implements INetworkListener { certificates: Lazy.any({ produce: () => this.certificateArns.map(certificateArn => ({ certificateArn })) }, { omitEmptyArray: true }), alpnPolicy: props.alpnPolicy ? [props.alpnPolicy] : undefined, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 c2d47cace67a5..02def079ebaf7 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 @@ -5,6 +5,7 @@ import * as ec2 from '../../../aws-ec2'; import * as cxschema from '../../../cloud-assembly-schema'; import { Lazy, Resource } from '../../../core'; import { ValidationError } from '../../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -275,6 +276,8 @@ export class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoa }), enablePrefixForIpv6SourceNat: props.enablePrefixForIpv6SourceNat === true ? 'on': props.enablePrefixForIpv6SourceNat === false ? 'off' : undefined, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.enablePrefixForIpv6SourceNat = props.enablePrefixForIpv6SourceNat; this.metrics = new NetworkLoadBalancerMetrics(this, this.loadBalancerFullName); @@ -566,6 +569,8 @@ class LookedUpNetworkLoadBalancer extends Resource implements INetworkLoadBalanc constructor(scope: Construct, id: string, props: cxapi.LoadBalancerContextResponse) { super(scope, id, { environmentFromArn: props.loadBalancerArn }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.loadBalancerArn = props.loadBalancerArn; this.loadBalancerCanonicalHostedZoneId = props.loadBalancerCanonicalHostedZoneId; diff --git a/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts b/packages/aws-cdk-lib/aws-elasticsearch/lib/domain.ts index e3f63eaddaa49..491bca9de5e8a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Elasticsearch version @@ -1465,6 +1466,8 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { super(scope, id, { physicalName: props.domainName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..733f3e6943ec8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The event API Destination properties @@ -131,6 +132,8 @@ export class ApiDestination extends Resource implements IApiDestination { super(scope, id, { physicalName: props.apiDestinationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..fd368b5412893 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The event archive base properties @@ -62,6 +63,8 @@ export class Archive extends Resource { constructor(scope: Construct, id: string, props: ArchiveProps) { super(scope, id, { physicalName: props.archiveName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7d1050d825bd1..f41a908149c4d 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * An API Destination Connection @@ -341,6 +342,8 @@ export class Connection extends Resource implements IConnection { super(scope, id, { physicalName: props.connectionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const authBind = props.authorization._bind(); @@ -376,6 +379,8 @@ class ImportedConnection extends Resource { account: arnParts.account, region: arnParts.region, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); this.connectionArn = attrs.connectionArn; this.connectionName = attrs.connectionName; 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 f46330fecc8eb..38fdc16528042 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface which all EventBus based classes MUST implement @@ -344,6 +345,8 @@ export class EventBus extends EventBusBase { ); super(scope, id, { physicalName: eventBusName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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}`); @@ -431,6 +434,8 @@ class ImportedEventBus extends EventBusBase { account: arnParts.account, region: arnParts.region, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); this.eventBusArn = attrs.eventBusArn; this.eventBusName = attrs.eventBusName; @@ -477,6 +482,8 @@ export interface EventBusPolicyProps { export class EventBusPolicy extends Resource { constructor(scope: Construct, id: string, props: EventBusPolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); new CfnEventBusPolicy(this, 'Resource', { statementId: props.statementId!, diff --git a/packages/aws-cdk-lib/aws-events/lib/rule.ts b/packages/aws-cdk-lib/aws-events/lib/rule.ts index a0fa8159a6e07..6d3d1e6a5fcda 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for defining an EventBridge Rule @@ -94,6 +95,8 @@ export class Rule extends Resource implements IRule { super(determineRuleScope(scope, props), id, { physicalName: props.ruleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.eventBus && props.schedule) { throw new Error('Cannot associate rule with \'eventBus\' when using \'schedule\''); @@ -491,6 +494,8 @@ function determineRuleScope(scope: Construct, props: RuleProps): Construct { class MirrorRule extends Rule { constructor(scope: Construct, id: string, props: RuleProps, private readonly source: Rule) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } public _renderEventPattern(): any { 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 d1c6b5f259b4f..64638ddb49e82 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The Lustre version for the file system. @@ -315,6 +316,8 @@ export class LustreFileSystem extends FileSystemBase { constructor(scope: Construct, id: string, props: LustreFileSystemProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f900d2dad78e6..c8864b393623a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The interface of the Accelerator @@ -188,6 +189,8 @@ export class Accelerator extends cdk.Resource implements IAccelerator { constructor(scope: Construct, id: string, props: AcceleratorProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..b47f95c4d74f8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The interface of the EndpointGroup @@ -178,6 +179,8 @@ export class EndpointGroup extends cdk.Resource implements IEndpointGroup { constructor(scope: Construct, id: string, props: EndpointGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..9b98e5a351ae5 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface of the Listener @@ -138,6 +139,8 @@ export class Listener extends cdk.Resource implements IListener { constructor(scope: Construct, id: string, props: ListenerProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ec6889b75eedc 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Valid statuses for an IAM Access Key. @@ -79,6 +80,8 @@ export class AccessKey extends Resource implements IAccessKey { constructor(scope: Construct, id: string, props: AccessKeyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..4d61aba8f8483 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an IAM Group. @@ -183,6 +184,8 @@ export class Group extends GroupBase { super(scope, id, { physicalName: props.groupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..a0af61b82dd24 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an IAM Instance Profile @@ -169,6 +170,8 @@ export class InstanceProfile extends InstanceProfileBase { constructor(scope: Construct, id: string, props: InstanceProfileProps = {}) { super(scope, id, { physicalName: props.instanceProfileName }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..4ddedf184b687 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for defining a LazyRole @@ -37,6 +38,8 @@ export class LazyRole extends cdk.Resource implements IRole { constructor(scope: Construct, id: string, private readonly props: LazyRoleProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ac7b2be848382 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A managed policy @@ -214,6 +215,8 @@ export class ManagedPolicy extends Resource implements IManagedPolicy, IGrantabl super(scope, id, { physicalName: props.managedPolicyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 888982edca040..7b035c0697123 100644 --- a/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts +++ b/packages/aws-cdk-lib/aws-iam/lib/oidc-provider.ts @@ -7,6 +7,7 @@ import { Resource, Token, } from '../../core'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { OidcProvider } from '../../custom-resource-handlers/dist/aws-iam/oidc-provider.generated'; import { IAM_OIDC_REJECT_UNAUTHORIZED_CONNECTIONS } from '../../cx-api'; @@ -139,6 +140,8 @@ export class OpenIdConnectProvider extends Resource implements IOpenIdConnectPro */ public constructor(scope: Construct, id: string, props: OpenIdConnectProviderProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const rejectUnauthorized = FeatureFlags.of(this).isEnabled(IAM_OIDC_REJECT_UNAUTHORIZED_CONNECTIONS) ?? false; diff --git a/packages/aws-cdk-lib/aws-iam/lib/policy.ts b/packages/aws-cdk-lib/aws-iam/lib/policy.ts index 5998ef0a0f748..c8ae5dd82f28a 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an IAM Policy @@ -136,6 +137,8 @@ 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) }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..fe03bffb60577 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { Grant } from '../grant'; import { IManagedPolicy } from '../managed-policy'; import { Policy } from '../policy'; @@ -34,6 +35,8 @@ export class ImmutableRole extends Resource implements IRole { account: role.env.account, region: role.env.region, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..b3f26f068d2e1 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 { addConstructMetadata } 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,8 @@ export class ImportedRole extends Resource implements IRole, IComparablePrincipa super(scope, id, { account: props.account, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..18bfbd7cd78cb 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; import { Grant } from '../grant'; import { IManagedPolicy } from '../managed-policy'; import { Policy } from '../policy'; @@ -74,6 +75,8 @@ export class PrecreatedRole extends Resource implements IRole { account: props.role.env.account, region: props.role.env.region, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7891198f09c9f..9489201096e9c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; const MAX_INLINE_SIZE = 10000; const MAX_MANAGEDPOL_SIZE = 6000; @@ -412,6 +413,8 @@ export class Role extends Resource implements IRole { super(scope, id, { physicalName: props.roleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ad711b11cba3f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A SAML provider @@ -85,6 +86,8 @@ export class SamlProvider extends Resource implements ISamlProvider { constructor(scope: Construct, id: string, props: SamlProviderProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..c0a8ad4ea5b23 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Represents an IAM user @@ -258,6 +259,8 @@ export class User extends Resource implements IIdentity, IUser { super(scope, id, { physicalName: props.userName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..cc678bf21103b 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties to associate a data stream with a policy @@ -43,6 +44,8 @@ export class ResourcePolicy extends Resource { constructor(scope: Construct, id: string, props: ResourcePolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 72d266b0e577d..46ce95f9cc0ec 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; const READ_OPERATIONS = [ 'kinesis:DescribeStreamSummary', @@ -811,6 +812,8 @@ export class Stream extends StreamBase { super(scope, id, { physicalName: props.streamName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..a9d81f084e733 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { KMS_ALIAS_NAME_REF } from '../../cx-api'; const REQUIRED_ALIAS_PREFIX = 'alias/'; @@ -251,6 +252,8 @@ export class Alias extends AliasBase { super(scope, id, { physicalName: aliasName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..91821b6a48451 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -766,6 +767,8 @@ export class Key extends KeyBase { constructor(scope: Construct, id: string, props: KeyProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 91e03976e3e36..f13a9e09084e9 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { LAMBDA_NODEJS_USE_LATEST_RUNTIME } from '../../cx-api'; /** @@ -154,6 +155,8 @@ export class NodejsFunction extends lambda.Function { handler: handler.indexOf('.') !== -1 ? `${handler}` : `index.${handler}`, }); } + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 ce5b2342e0dda..ffc85660abbb5 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/alias.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/alias.ts @@ -11,6 +11,7 @@ import * as cloudwatch from '../../aws-cloudwatch'; import * as iam from '../../aws-iam'; import { ArnFormat } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IAlias extends IFunction { /** @@ -146,6 +147,8 @@ export class Alias extends QualifiedFunctionBase implements IAlias { super(scope, id, { physicalName: props.aliasName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7230f49aa73bc..b715700a5364a 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 @@ -3,6 +3,7 @@ import { CfnCodeSigningConfig } from './lambda.generated'; import { ISigningProfile } from '../../aws-signer'; import { ArnFormat, IResource, Resource, Stack } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Code signing configuration policy for deployment validation failure. @@ -101,6 +102,8 @@ export class CodeSigningConfig extends Resource implements ICodeSigningConfig { constructor(scope: Construct, id: string, props: CodeSigningConfigProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 23af087bb9fe6..68afc7304fa6d 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 @@ -4,6 +4,7 @@ import { IFunction } from './function-base'; import { CfnEventInvokeConfig } from './lambda.generated'; import { Duration, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options to add an EventInvokeConfig to a function. @@ -73,6 +74,8 @@ export interface EventInvokeConfigProps extends EventInvokeConfigOptions { export class EventInvokeConfig extends Resource { constructor(scope: Construct, id: string, props: EventInvokeConfigProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.maxEventAge && (props.maxEventAge.toSeconds() < 60 || props.maxEventAge.toSeconds() > 21600)) { throw new ValidationError('`maximumEventAge` must represent a `Duration` that is between 60 and 21600 seconds.', this); 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 55572cd6cccf1..d181b75299f62 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 @@ -6,6 +6,7 @@ import * as iam from '../../aws-iam'; import { IKey } from '../../aws-kms'; import * as cdk from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The type of authentication protocol or the VPC components for your event source's SourceAccessConfiguration @@ -399,6 +400,8 @@ export class EventSourceMapping extends cdk.Resource implements IEventSourceMapp constructor(scope: Construct, id: string, props: EventSourceMappingProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.eventSourceArn == undefined && props.kafkaBootstrapServers == undefined) { throw new ValidationError('Either eventSourceArn or kafkaBootstrapServers must be set', this); 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 85393cbcf6e6b..603517a92463c 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function-url.ts @@ -6,6 +6,7 @@ import { CfnUrl } from './lambda.generated'; import * as iam from '../../aws-iam'; import { Duration, IResource, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The auth types for a function url @@ -219,6 +220,8 @@ export class FunctionUrl extends Resource implements IFunctionUrl { constructor(scope: Construct, id: string, props: FunctionUrlProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (this.instanceOfVersion(props.function)) { throw new ValidationError('FunctionUrl cannot be used with a Version', this); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function.ts b/packages/aws-cdk-lib/aws-lambda/lib/function.ts index 7495362cb62bf..3d5266698811f 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 { UnscopedValidationError, ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { LAMBDA_RECOGNIZE_LAYER_VERSION } from '../../cx-api'; /** @@ -914,6 +915,8 @@ export class Function extends FunctionBase { super(scope, id, { physicalName: props.functionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..edb668eca8336 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties to configure a new DockerImageFunction construct. @@ -71,5 +72,7 @@ export class DockerImageFunction extends Function { runtime: Runtime.FROM_IMAGE, code: props.code._bind(props.architecture), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f70da517edccb..4865aad781262 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/lambda-version.ts @@ -9,6 +9,7 @@ import { addAlias } from './util'; import * as cloudwatch from '../../aws-cloudwatch'; import { Fn, Lazy, RemovalPolicy, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IVersion extends IFunction { /** @@ -189,6 +190,8 @@ export class Version extends QualifiedFunctionBase implements IVersion { constructor(scope: Construct, id: string, props: VersionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 af33550358e4e..6f4dc83cb6a05 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/layers.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/layers.ts @@ -5,6 +5,7 @@ import { CfnLayerVersion, CfnLayerVersionPermission } from './lambda.generated'; import { Runtime } from './runtime'; import { IResource, RemovalPolicy, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Non runtime options @@ -185,6 +186,8 @@ export class LayerVersion extends LayerVersionBase { super(scope, id, { physicalName: props.layerVersionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.compatibleRuntimes && props.compatibleRuntimes.length === 0) { throw new ValidationError('Attempted to define a Lambda layer that supports no runtime!', this); 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 06a129d8b8ff0..f57f38d3ee454 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a newly created singleton Lambda @@ -68,6 +69,8 @@ export class SingletonFunction extends FunctionBase { constructor(scope: Construct, id: string, props: SingletonFunctionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.constructName = (props.lambdaPurpose || 'SingletonLambda') + slugify(props.uuid); this.lambdaFunction = this.ensureLambda(props); diff --git a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts index c2c11c80948c3..b34ad40d31862 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts @@ -16,6 +16,7 @@ import * as sns from '../../aws-sns'; import * as sqs from '../../aws-sqs'; import * as cdk from '../../core'; import { Aspects, Lazy, Size } from '../../core'; +import { JSII_RUNTIME_SYMBOL } from '../../core/lib/constants'; import { getWarnings } from '../../core/test/util'; import * as cxapi from '../../cx-api'; import * as lambda from '../lib'; @@ -4742,6 +4743,58 @@ describe('CMCMK', () => { }); }); +describe('telemetry metadata', () => { + it('redaction happens when feature flag is enabled', () => { + const app = new cdk.App(); + app.node.setContext(cxapi.ENABLE_ADDITIONAL_METADATA_COLLECTION, true); + const stack = new cdk.Stack(app); + + const mockConstructor = { + [JSII_RUNTIME_SYMBOL]: { + fqn: 'aws-cdk-lib.aws-lambda.Function', + }, + }; + jest.spyOn(Object, 'getPrototypeOf').mockReturnValue({ + constructor: mockConstructor, + }); + + const fn = new lambda.Function(stack, 'Lambda', { + code: lambda.Code.fromInline('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.NODEJS_18_X, + }); + + expect(fn.node.metadata).toStrictEqual([{ + data: { code: '*', handler: '*', runtime: '*' }, + trace: undefined, + type: 'aws:cdk:analytics:construct', + }]); + }); + + it('redaction happens when feature flag is disabled', () => { + const app = new cdk.App(); + app.node.setContext(cxapi.ENABLE_ADDITIONAL_METADATA_COLLECTION, false); + const stack = new cdk.Stack(app); + + const mockConstructor = { + [JSII_RUNTIME_SYMBOL]: { + fqn: 'aws-cdk-lib.aws-lambda.Function', + }, + }; + jest.spyOn(Object, 'getPrototypeOf').mockReturnValue({ + constructor: mockConstructor, + }); + + const fn = new lambda.Function(stack, 'Lambda', { + code: lambda.Code.fromInline('foo'), + handler: 'index.handler', + runtime: lambda.Runtime.NODEJS_18_X, + }); + + expect(fn.node.metadata).toStrictEqual([]); + }); +}); + function newTestLambda(scope: constructs.Construct) { return new lambda.Function(scope, 'MyLambda', { code: new lambda.InlineCode('foo'), 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..e4084eddfbf38 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a CrossAccountDestination @@ -72,6 +73,8 @@ 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() }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 5d02d044ab83b..6fb68471c0293 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface ILogGroup extends iam.IResourceWithPolicy { /** @@ -606,6 +607,8 @@ export class LogGroup extends LogGroupBase { super(scope, id, { physicalName: props.logGroupName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..9927c8027c1f6 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface ILogStream extends IResource { /** @@ -68,6 +69,8 @@ export class LogStream extends Resource implements ILogStream { super(scope, id, { physicalName: props.logStreamName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 143905b539bcf..0dbadbe509aca 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a MetricFilter @@ -25,6 +26,8 @@ export class MetricFilter extends Resource { super(scope, id, { physicalName: props.filterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..c0d84d7001978 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties to define Cloudwatch log group resource policy @@ -45,6 +46,8 @@ export class ResourcePolicy extends Resource { super(scope, id, { physicalName: props?.resourcePolicyName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 44cb42ce8d1ed..f21b99762b388 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a QueryString @@ -202,6 +203,8 @@ export class QueryDefinition extends Resource { super(scope, id, { physicalName: props.queryDefinitionName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..5c3907ffde784 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface for classes that can be the destination of a log Subscription @@ -57,6 +58,8 @@ export class SubscriptionFilter extends Resource { super(scope, id, { physicalName: props.filterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 fa29ac48932f3..660cfc68a6d9c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1390,6 +1391,8 @@ export class Domain extends DomainBase implements IDomain, ec2.IConnectable { super(scope, id, { physicalName: props.domainName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 20acf0fe4be40..18a2cefc53d96 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 @@ -12,6 +12,7 @@ import { IRole } from '../../aws-iam'; import * as kms from '../../aws-kms'; import { IResource, Resource, Duration, RemovalPolicy, ArnFormat, FeatureFlags } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import { AURORA_CLUSTER_CHANGE_SCOPE_OF_INSTANCE_PARAMETER_GROUP_WITH_EACH_PARAMETERS } from '../../cx-api'; /** @@ -475,6 +476,8 @@ class AuroraClusterInstance extends Resource implements IAuroraClusterInstance { { physicalName: props.instanceIdentifier, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.tier = props.promotionTier ?? 2; if (this.tier > 15) { throw new ValidationError('promotionTier must be between 0-15', this); diff --git a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts index 81b2678cb5404..0377ca19ff9d9 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/cluster.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/cluster.ts @@ -22,6 +22,7 @@ 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 { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1164,6 +1165,8 @@ class ImportedDatabaseCluster extends DatabaseClusterBase implements IDatabaseCl constructor(scope: Construct, id: string, attrs: DatabaseClusterAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); this.clusterIdentifier = attrs.clusterIdentifier; this._clusterResourceIdentifier = attrs.clusterResourceIdentifier; @@ -1262,6 +1265,8 @@ export class DatabaseCluster extends DatabaseClusterNew { constructor(scope: Construct, id: string, props: DatabaseClusterProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const credentials = renderCredentials(this, props.engine, props.credentials); const secret = credentials.secret; @@ -1444,6 +1449,8 @@ export class DatabaseClusterFromSnapshot extends DatabaseClusterNew { constructor(scope: Construct, id: string, props: DatabaseClusterFromSnapshotProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.credentials && !props.credentials.password && !props.credentials.secret) { Annotations.of(this).addWarningV2('@aws-cdk/aws-rds:useSnapshotCredentials', 'Use `snapshotCredentials` to modify password of a cluster created from a snapshot.'); 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 f1253ca3ea349..bdca03c667b9f 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for a DatabaseSecret. @@ -94,6 +95,8 @@ export class DatabaseSecret extends secretsmanager.Secret { }, replicaRegions: props.replicaRegions, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7d2337e5c118c..1a7076125bf6c 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/instance.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/instance.ts @@ -19,6 +19,7 @@ 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 { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -1175,6 +1176,8 @@ export class DatabaseInstance extends DatabaseInstanceSource implements IDatabas constructor(scope: Construct, id: string, props: DatabaseInstanceProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const credentials = renderCredentials(this, props.engine, props.credentials); const secret = credentials.secret; @@ -1244,6 +1247,8 @@ export class DatabaseInstanceFromSnapshot extends DatabaseInstanceSource impleme constructor(scope: Construct, id: string, props: DatabaseInstanceFromSnapshotProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); let credentials = props.credentials; let secret = credentials?.secret; @@ -1348,6 +1353,8 @@ export class DatabaseInstanceReadReplica extends DatabaseInstanceNew implements constructor(scope: Construct, id: string, props: DatabaseInstanceReadReplicaProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.sourceDatabaseInstance.engine && !props.sourceDatabaseInstance.engine.supportsReadReplicaBackups 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 9b45f16d3049f..2d6030c88c96a 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/option-group.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/option-group.ts @@ -4,6 +4,7 @@ import { CfnOptionGroup } from './rds.generated'; import * as ec2 from '../../aws-ec2'; import { IResource, Lazy, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * An option group @@ -124,6 +125,8 @@ export class OptionGroup extends Resource implements IOptionGroup { constructor(scope: Construct, id: string, props: OptionGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 b8763044b90f6..0f6f3a1eafb16 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/parameter-group.ts @@ -3,6 +3,7 @@ import { IEngine } from './engine'; import { CfnDBClusterParameterGroup, CfnDBParameterGroup } from './rds.generated'; import { IResource, Lazy, RemovalPolicy, Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for `IParameterGroup.bindToCluster`. @@ -141,6 +142,8 @@ export class ParameterGroup extends Resource implements IParameterGroup { constructor(scope: Construct, id: string, props: ParameterGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 a3af2c9bf100d..fb664ae44d0cb 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/proxy.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/proxy.ts @@ -9,6 +9,7 @@ import * as iam from '../../aws-iam'; import * as secretsmanager from '../../aws-secretsmanager'; import * as cdk from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -447,6 +448,8 @@ export class DatabaseProxy extends DatabaseProxyBase constructor(scope: Construct, id: string, props: DatabaseProxyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 d6b78c24c5459..7211977571ab2 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/serverless-cluster.ts @@ -14,6 +14,7 @@ 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 { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; /** @@ -557,6 +558,8 @@ export class ServerlessCluster extends ServerlessClusterNew { constructor(scope: Construct, id: string, props: ServerlessClusterProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.vpc = props.vpc; this.vpcSubnets = props.vpcSubnets; @@ -656,6 +659,8 @@ class ImportedServerlessCluster extends ServerlessClusterBase implements IServer constructor(scope: Construct, id: string, attrs: ServerlessClusterAttributes) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, attrs); this.clusterIdentifier = attrs.clusterIdentifier; @@ -721,6 +726,8 @@ export class ServerlessClusterFromSnapshot extends ServerlessClusterNew { constructor(scope: Construct, id: string, props: ServerlessClusterFromSnapshotProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.enableDataApi = props.enableDataApi; 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 0e0c49cc61e23..50d22a38acc33 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Interface for a subnet group. @@ -70,6 +71,8 @@ export class SubnetGroup extends Resource implements ISubnetGroup { constructor(scope: Construct, id: string, props: SubnetGroupProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 1bf2acf6c20f4..9e000774809ac 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Imported or created health check @@ -260,6 +261,8 @@ export class HealthCheck extends Resource implements IHealthCheck { */ constructor(scope: Construct, id: string, props: HealthCheckProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9722fffd07da4..85720de401928 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/hosted-zone.ts @@ -11,6 +11,7 @@ import * as kms from '../../aws-kms'; import * as cxschema from '../../cloud-assembly-schema'; import { ContextProvider, Duration, Lazy, Resource, Stack } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Common properties to create a Route 53 hosted zone @@ -200,6 +201,8 @@ export class HostedZone extends Resource implements IHostedZone { constructor(scope: Construct, id: string, props: HostedZoneProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); validateZoneName(props.zoneName); @@ -365,6 +368,8 @@ export class PublicHostedZone extends HostedZone implements IPublicHostedZone { constructor(scope: Construct, id: string, props: PublicHostedZoneProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.caaAmazon) { new CaaAmazonRecord(this, 'CaaAmazon', { @@ -497,6 +502,8 @@ export class PrivateHostedZone extends HostedZone implements IPrivateHostedZone constructor(scope: Construct, id: string, props: PrivateHostedZoneProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.addVpc(props.vpc); } 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 dc278c537c908..22e347b8dd8eb 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for constructing a Key Signing Key. @@ -134,6 +135,8 @@ export class KeySigningKey extends Resource implements IKeySigningKey { produce: () => Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 96b585886dbd2..952059993412d 100644 --- a/packages/aws-cdk-lib/aws-route53/lib/record-set.ts +++ b/packages/aws-cdk-lib/aws-route53/lib/record-set.ts @@ -8,6 +8,7 @@ import { determineFullyQualifiedDomainName } from './util'; import * as iam from '../../aws-iam'; import { CustomResource, Duration, IResource, Names, RemovalPolicy, Resource, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -339,6 +340,8 @@ export class RecordSet extends Resource implements IRecordSet { constructor(scope: Construct, id: string, props: RecordSetProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.weight && !Token.isUnresolved(props.weight) && (props.weight < 0 || props.weight > 255)) { throw new ValidationError(`weight must be between 0 and 255 inclusive, got: ${props.weight}`, this); @@ -537,6 +540,8 @@ export class ARecord extends RecordSet { recordType: RecordType.A, target: props.target, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -580,6 +585,8 @@ export class AaaaRecord extends RecordSet { recordType: RecordType.AAAA, target: props.target, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -605,6 +612,8 @@ export class CnameRecord extends RecordSet { recordType: RecordType.CNAME, target: RecordTarget.fromValues(props.domainName), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -630,6 +639,8 @@ export class TxtRecord extends RecordSet { recordType: RecordType.TXT, target: RecordTarget.fromValues(...props.values.map(v => formatTxt(v))), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -699,6 +710,8 @@ export class SrvRecord extends RecordSet { recordType: RecordType.SRV, target: RecordTarget.fromValues(...props.values.map(v => `${v.priority} ${v.weight} ${v.port} ${v.hostName}`)), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -767,6 +780,8 @@ export class CaaRecord extends RecordSet { recordType: RecordType.CAA, target: RecordTarget.fromValues(...props.values.map(v => `${v.flag} ${v.tag} "${v.value}"`)), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -795,6 +810,8 @@ export class CaaAmazonRecord extends CaaRecord { }, ], }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -835,6 +852,8 @@ export class MxRecord extends RecordSet { recordType: RecordType.MX, target: RecordTarget.fromValues(...props.values.map(v => `${v.priority} ${v.hostName}`)), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -860,6 +879,8 @@ export class NsRecord extends RecordSet { recordType: RecordType.NS, target: RecordTarget.fromValues(...props.values), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -885,6 +906,8 @@ export class DsRecord extends RecordSet { recordType: RecordType.DS, target: RecordTarget.fromValues(...props.values), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } @@ -912,6 +935,8 @@ export class ZoneDelegationRecord extends RecordSet { ), ttl: props.ttl || Duration.days(2), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); } } 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..bfc23cde8ded2 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { CfnReference } from '../../core/lib/private/cfn-reference'; export interface BucketPolicyProps { @@ -101,6 +102,8 @@ export class BucketPolicy extends Resource { constructor(scope: Construct, id: string, props: BucketPolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 5a5ad3103a658..b381836d61e12 100644 --- a/packages/aws-cdk-lib/aws-s3/lib/bucket.ts +++ b/packages/aws-cdk-lib/aws-s3/lib/bucket.ts @@ -27,6 +27,7 @@ import { Annotations, } from '../../core'; import { UnscopedValidationError, ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -2184,6 +2185,8 @@ export class Bucket extends BucketBase { super(scope, id, { physicalName: props.bucketName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..ad5fd6bc2cec5 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Construction properties for a ResourcePolicy @@ -36,6 +37,8 @@ export class ResourcePolicy extends Resource { constructor(scope: Construct, id: string, props: ResourcePolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e37a2ac5c3375 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The default set of characters we exclude from generated passwords for database users. @@ -89,6 +90,8 @@ export interface RotationScheduleProps extends RotationScheduleOptions { export class RotationSchedule extends Resource { constructor(scope: Construct, id: string, props: RotationScheduleProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 109d13edfd83a..be4b553b4bbbd 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import * as cxapi from '../../cx-api'; const SECRET_SYMBOL = Symbol.for('@aws-cdk/secretsmanager.Secret'); @@ -622,6 +623,8 @@ export class Secret extends SecretBase { super(scope, id, { physicalName: props.secretName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.generateSecretString && (props.generateSecretString.secretStringTemplate || props.generateSecretString.generateStringKey) && @@ -855,6 +858,8 @@ export class SecretTargetAttachment extends SecretBase implements ISecretTargetA constructor(scope: Construct, id: string, props: SecretTargetAttachmentProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.attachedSecret = props.secret; const attachment = new secretsmanager.CfnSecretTargetAttachment(this, 'Resource', { diff --git a/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts b/packages/aws-cdk-lib/aws-servicecatalog/lib/portfolio.ts index 25b4c33bd1923..16333a8ae3736 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for portfolio share. @@ -340,6 +341,8 @@ export class Portfolio extends PortfolioBase { constructor(scope: Construct, id: string, props: PortfolioProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 50d393e23fd9d..c74b98d8b2d9e 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A Service Catalog product, currently only supports type CloudFormationProduct @@ -188,6 +189,8 @@ export class CloudFormationProduct extends Product { constructor(scope: Construct, id: string, props: CloudFormationProductProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d1ecbb499f0a6 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for TagOptions. @@ -33,6 +34,8 @@ export class TagOptions extends cdk.Resource { constructor(scope: Construct, id: string, props: TagOptionsProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..afd31f3acfae7 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /* * Properties for an AliasTargetInstance @@ -44,6 +45,8 @@ export class AliasTargetInstance extends InstanceBase { constructor(scope: Construct, id: string, props: AliasTargetInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..87beefd6cd322 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /* * Properties for a CnameInstance used for service#registerCnameInstance @@ -48,6 +49,8 @@ export class CnameInstance extends InstanceBase { constructor(scope: Construct, id: string, props: CnameInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 e3e9b8d95c90c..aebe7239bd15c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface HttpNamespaceProps extends BaseNamespaceProps {} export interface IHttpNamespace extends INamespace { } @@ -59,6 +60,8 @@ export class HttpNamespace extends Resource implements IHttpNamespace { constructor(scope: Construct, id: string, props: HttpNamespaceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..e821bf17396bc 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /* * Properties for a IpInstance used for service#registerIpInstance @@ -76,6 +77,8 @@ export class IpInstance extends InstanceBase { constructor(scope: Construct, id: string, props: IpInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..15286feda2e31 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface NonIpInstanceBaseProps extends BaseInstanceProps { } @@ -36,6 +37,8 @@ export class NonIpInstance extends InstanceBase { constructor(scope: Construct, id: string, props: NonIpInstanceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 7e89c6c6958ec..960bd3965fa9c 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface PrivateDnsNamespaceProps extends BaseNamespaceProps { /** @@ -72,6 +73,8 @@ export class PrivateDnsNamespace extends Resource implements IPrivateDnsNamespac constructor(scope: Construct, id: string, props: PrivateDnsNamespaceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 75864ae8d11c1..56effadba57fb 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface PublicDnsNamespaceProps extends BaseNamespaceProps {} export interface IPublicDnsNamespace extends INamespace { } @@ -64,6 +65,8 @@ export class PublicDnsNamespace extends Resource implements IPublicDnsNamespace constructor(scope: Construct, id: string, props: PublicDnsNamespaceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f7e33ca9c139f..ff626960fd0c8 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; export interface IService extends IResource { /** @@ -217,6 +218,8 @@ export class Service extends ServiceBase { constructor(scope: Construct, id: string, props: ServiceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..559bb1213d342 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A configuration set event destination @@ -237,6 +238,8 @@ export class ConfigurationSetEventDestination extends Resource implements IConfi super(scope, id, { physicalName: props.configurationSetEventDestinationName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..47e6c90714c09 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A configuration set @@ -174,6 +175,8 @@ export class ConfigurationSet extends Resource implements IConfigurationSet { super(scope, id, { physicalName: props.configurationSetName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..d35fb856138df 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Scaling mode to use for this IP pool. @@ -77,6 +78,8 @@ export class DedicatedIpPool extends Resource implements IDedicatedIpPool { super(scope, id, { physicalName: props.dedicatedIpPoolName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..49e3bea9b00d6 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * An email identity @@ -457,6 +458,8 @@ export class EmailIdentity extends EmailIdentityBase { constructor(scope: Construct, id: string, props: EmailIdentityProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..90b011d1f334e 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * The policy for the receipt filter. @@ -52,6 +53,8 @@ export class ReceiptFilter extends Resource { super(scope, id, { physicalName: props.receiptFilterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..31d38aac10602 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * A receipt rule set. @@ -101,6 +102,8 @@ export class ReceiptRuleSet extends ReceiptRuleSetBase { super(scope, id, { physicalName: props.receiptRuleSetName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 f90ca33779e8f..fb8507749a0eb 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; import { DropSpamSingletonFunction } from '../../custom-resource-handlers/dist/aws-ses/drop-spam-provider.generated'; /** @@ -117,6 +118,8 @@ export class ReceiptRule extends Resource implements IReceiptRule { super(scope, id, { physicalName: props.receiptRuleName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..20fa382e5da60 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Virtual Deliverability Manager (VDM) attributes @@ -58,6 +59,8 @@ export class VdmAttributes extends Resource implements IVdmAttributes { constructor(scope: Construct, id: string, props: VdmAttributesProps = {}) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..27538d6f1e230 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Platforms that are allowed with signing config. @@ -173,6 +174,8 @@ export class SigningProfile extends Resource implements ISigningProfile { super(scope, id, { physicalName: props.signingProfileName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..9672dd8730ae0 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties to associate SNS topics with a policy @@ -57,6 +58,8 @@ export class TopicPolicy extends Resource { constructor(scope: Construct, id: string, props: TopicPolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 0e1c9be57c0a3..ab5267486d4f0 100644 --- a/packages/aws-cdk-lib/aws-sns/lib/subscription.ts +++ b/packages/aws-cdk-lib/aws-sns/lib/subscription.ts @@ -7,6 +7,7 @@ import { PolicyStatement, ServicePrincipal } from '../../aws-iam'; import { IQueue } from '../../aws-sqs'; import { Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Options for creating a new subscription @@ -105,6 +106,8 @@ export class Subscription extends Resource { constructor(scope: Construct, id: string, props: SubscriptionProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 5ca9aa169a099..e331b6156de52 100644 --- a/packages/aws-cdk-lib/aws-sns/lib/topic.ts +++ b/packages/aws-cdk-lib/aws-sns/lib/topic.ts @@ -5,6 +5,7 @@ import { IRole } from '../../aws-iam'; import { IKey } from '../../aws-kms'; import { ArnFormat, Lazy, Names, Stack, Token } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for a new SNS topic @@ -283,6 +284,8 @@ export class Topic extends TopicBase { super(scope, id, { physicalName: props.topicName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 9c39455d34a03..0d529c4c82724 100644 --- a/packages/aws-cdk-lib/aws-sqs/lib/policy.ts +++ b/packages/aws-cdk-lib/aws-sqs/lib/policy.ts @@ -4,6 +4,7 @@ import { CfnQueuePolicy } from './sqs.generated'; import { PolicyDocument } from '../../aws-iam'; import { Resource } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties to associate SQS queues with a policy @@ -37,6 +38,8 @@ export class QueuePolicy extends Resource { constructor(scope: Construct, id: string, props: QueuePolicyProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 6a93e2895cfd1..05876281dbbd7 100644 --- a/packages/aws-cdk-lib/aws-sqs/lib/queue.ts +++ b/packages/aws-cdk-lib/aws-sqs/lib/queue.ts @@ -6,6 +6,7 @@ import * as iam from '../../aws-iam'; import * as kms from '../../aws-kms'; import { Duration, RemovalPolicy, Stack, Token, ArnFormat, Annotations } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Properties for creating a new Queue @@ -382,6 +383,8 @@ export class Queue extends QueueBase { super(scope, id, { physicalName: props.queueName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); validateQueueProps(this, props); diff --git a/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts b/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts index 11e14192bbda0..a7cbb96283f89 100644 --- a/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts +++ b/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts @@ -11,6 +11,7 @@ import { Tokenization, } from '../../core'; import { ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * An SSM Parameter reference. @@ -664,6 +665,8 @@ export class StringParameter extends ParameterBase implements IStringParameter { super(scope, id, { physicalName: props.parameterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.allowedPattern) { _assertValidValue(this, props.stringValue, props.allowedPattern); @@ -771,6 +774,8 @@ export class StringListParameter extends ParameterBase implements IStringListPar super(scope, id, { physicalName: props.parameterName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.stringListValue.find(str => !Token.isUnresolved(str) && str.indexOf(',') !== -1)) { throw new ValidationError('Values of a StringList SSM Parameter cannot contain the \',\' character. Use a string parameter instead.', this); diff --git a/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts b/packages/aws-cdk-lib/aws-stepfunctions/lib/activity.ts index 32ddf07f3a65f..fecb6a4f8d3a1 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; + /** * Properties for defining a new Step Functions Activity */ @@ -76,6 +78,8 @@ export class Activity extends Resource implements IActivity { physicalName: props.activityName || Lazy.string({ produce: () => this.generateName() }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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..6125ecc828ae5 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Two types of state machines are available in AWS Step Functions: EXPRESS AND STANDARD. @@ -433,6 +434,8 @@ export class StateMachine extends StateMachineBase { super(scope, id, { physicalName: props.stateMachineName, }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, 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 977ea15cbec4c..0e506a7c8a7a4 100644 --- a/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts +++ b/packages/aws-cdk-lib/aws-synthetics/lib/canary.ts @@ -12,6 +12,7 @@ import * as kms from '../../aws-kms'; import * as s3 from '../../aws-s3'; import * as cdk from '../../core'; import { UnscopedValidationError, ValidationError } from '../../core/lib/errors'; +import { addConstructMetadata } 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'; @@ -359,6 +360,8 @@ export class Canary extends cdk.Resource implements ec2.IConnectable { produce: () => this.generateUniqueName(), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); if (props.cleanup === Cleanup.LAMBDA && props.provisionedResourceCleanup) { throw new ValidationError('Cannot specify `provisionedResourceCleanup` when `cleanup` is set to `Cleanup.LAMBDA`. Use only `provisionedResourceCleanup`.', this); diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts b/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts new file mode 100644 index 0000000000000..a531e0f8ef6cb --- /dev/null +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts @@ -0,0 +1,21082 @@ +/* eslint-disable quote-props */ +/* eslint-disable @stylistic/comma-dangle */ +/* + * Do not edit this file manually. To prevent misconfiguration, this file + * should only be modified by an automated GitHub workflow, that ensures + * that the regions present in this list correspond to all the regions + * where we have the AWS::CDK::Metadata handler deployed. + * + * See: https://github.com/aws/aws-cdk/issues/27189 + */ + +export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = { + '@aws-cdk.aws-amplify-alpha': { + 'App': { + 'appName': '*', + 'sourceCodeProvider': '*', + 'autoBranchCreation': { + 'patterns': '*', + 'basicAuth': '*', + 'buildSpec': '*', + 'autoBuild': '*', + 'pullRequestPreview': '*', + 'environmentVariables': '*', + 'pullRequestEnvironmentName': '*', + 'stage': '*' + }, + 'autoBranchDeletion': '*', + 'basicAuth': '*', + 'buildSpec': '*', + 'customResponseHeaders': { + 'pattern': '*', + 'headers': '*' + }, + 'customRules': '*', + 'description': '*', + 'environmentVariables': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'platform': 'Platform', + 'cacheConfigType': 'CacheConfigType' + }, + 'Branch': { + 'app': { + 'appId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'basicAuth': '*', + 'branchName': '*', + 'buildSpec': '*', + 'description': '*', + 'autoBuild': '*', + 'pullRequestPreview': '*', + 'environmentVariables': '*', + 'pullRequestEnvironmentName': '*', + 'stage': '*', + 'asset': '*', + 'performanceMode': '*' + }, + 'Domain': { + 'app': { + 'appId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoSubDomainIamRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'domainName': '*', + 'subDomains': { + 'branch': { + 'branchName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'prefix': '*' + }, + 'enableAutoSubdomain': '*', + 'autoSubdomainCreationPatterns': '*', + 'customCertificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + '@aws-cdk.aws-apprunner-alpha': { + 'AutoScalingConfiguration': { + 'autoScalingConfigurationName': '*', + 'maxConcurrency': '*', + 'maxSize': '*', + 'minSize': '*' + }, + 'ObservabilityConfiguration': { + 'observabilityConfigurationName': '*', + 'traceConfigurationVendor': 'TraceConfigurationVendor' + }, + 'Service': { + 'source': '*', + 'autoDeploymentsEnabled': '*', + 'autoScalingConfiguration': { + 'autoScalingConfigurationArn': '*', + 'autoScalingConfigurationName': '*', + 'autoScalingConfigurationRevision': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cpu': '*', + 'memory': '*', + 'accessRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'instanceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serviceName': '*', + 'vpcConnector': { + 'vpcConnectorName': '*', + 'vpcConnectorArn': '*', + 'vpcConnectorRevision': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'isPubliclyAccessible': '*', + 'healthCheck': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'ipAddressType': 'IpAddressType', + 'observabilityConfiguration': { + 'observabilityConfigurationName': '*', + 'observabilityConfigurationArn': '*', + 'observabilityConfigurationRevision': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'VpcConnector': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcConnectorName': '*' + }, + 'VpcIngressConnection': { + 'vpcIngressConnectionName': '*', + 'service': { + 'serviceName': '*', + 'serviceArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'interfaceVpcEndpoint': { + 'vpcEndpointId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + } + } + }, + '@aws-cdk.aws-cloud9-alpha': { + 'Ec2Environment': { + 'owner': '*', + 'instanceType': '*', + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ec2EnvironmentName': '*', + 'description': '*', + 'clonedRepositories': '*', + 'connectionType': 'ConnectionType', + 'imageId': 'ImageId', + 'automaticStop': '*' + } + }, + '@aws-cdk.aws-codestar-alpha': { + 'GitHubRepository': { + 'owner': '*', + 'repositoryName': '*', + 'accessToken': '*', + 'contentsBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'contentsKey': '*', + 'contentsS3Version': '*', + 'enableIssues': '*', + 'visibility': 'RepositoryVisibility', + 'description': '*' + } + }, + '@aws-cdk.aws-cognito-identitypool-alpha': { + 'IdentityPoolRoleAttachment': { + 'identityPool': { + 'identityPoolId': '*', + 'identityPoolArn': '*', + 'identityPoolName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authenticatedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'unauthenticatedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'roleMappings': { + 'providerUrl': '*', + 'mappingKey': '*', + 'useToken': '*', + 'resolveAmbiguousRoles': '*', + 'rules': { + 'claim': '*', + 'mappedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'claimValue': '*', + 'matchType': 'RoleMappingMatchType' + } + } + }, + 'IdentityPool': { + 'identityPoolName': '*', + 'authenticatedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'unauthenticatedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'allowUnauthenticatedIdentities': '*', + 'roleMappings': { + 'providerUrl': '*', + 'mappingKey': '*', + 'useToken': '*', + 'resolveAmbiguousRoles': '*', + 'rules': { + 'claim': '*', + 'mappedRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'claimValue': '*', + 'matchType': 'RoleMappingMatchType' + } + }, + 'allowClassicFlow': '*', + 'authenticationProviders': { + 'facebook': { + 'appId': '*' + }, + 'google': { + 'clientId': '*' + }, + 'amazon': { + 'appId': '*' + }, + 'apple': { + 'servicesId': '*' + }, + 'twitter': { + 'consumerKey': '*', + 'consumerSecret': '*' + }, + 'userPools': '*', + 'openIdConnectProviders': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'samlProviders': { + 'samlProviderArn': '*' + }, + 'customProvider': '*' + } + } + }, + '@aws-cdk.aws-ec2-alpha': { + 'IpamPool': { + 'ipamScopeId': '*', + 'addressFamily': 'AddressFamily', + 'ipv4ProvisionedCidrs': '*', + 'locale': '*', + 'publicIpSource': 'IpamPoolPublicIpSource', + 'awsService': 'AwsServiceName', + 'ipamPoolName': '*' + }, + 'IpamScope': { + 'ipamId': '*', + 'ipamOperatingRegions': '*', + 'ipamScopeId': '*', + 'ipamScopeName': '*' + }, + 'EgressOnlyInternetGateway': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'egressOnlyInternetGatewayName': '*' + }, + 'InternetGateway': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'internetGatewayName': '*' + }, + 'VPNGatewayV2': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'type': 'VpnConnectionType', + 'amazonSideAsn': '*', + 'vpnGatewayName': '*', + 'vpnRoutePropagation': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'NatGateway': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnet': { + 'ipv6CidrBlock': '*', + 'subnetType': 'SubnetType', + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'allocationId': '*', + 'connectivityType': 'NatConnectivityType', + 'maxDrainDuration': '*', + 'privateIpAddress': '*', + 'secondaryAllocationIds': '*', + 'secondaryPrivateIpAddressCount': '*', + 'secondaryPrivateIpAddresses': '*', + 'natGatewayName': '*' + }, + 'VPCPeeringConnection': { + 'requestorVpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'acceptorVpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'peerRoleArn': '*', + 'vpcPeeringConnectionName': '*' + }, + 'Route': { + 'routeTable': { + 'routeTableId': '*' + }, + 'destination': '*', + 'target': '*', + 'routeName': '*' + }, + 'RouteTable': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'routeTableName': '*' + }, + 'SubnetV2': { + 'vpc': { + 'secondaryCidrBlock': { + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + }, + 'ipv4CidrBlock': '*', + 'region': '*', + 'ownerAccountId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'vpcName': '*', + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv4CidrBlock': '*', + 'ipv6CidrBlock': '*', + 'availabilityZone': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'subnetType': 'SubnetType', + 'subnetName': '*', + 'assignIpv6AddressOnCreation': '*' + }, + 'VpcV2': { + 'primaryAddressBlock': '*', + 'secondaryAddressBlocks': '*', + 'enableDnsHostnames': '*', + 'enableDnsSupport': '*', + 'defaultInstanceTenancy': 'DefaultInstanceTenancy', + 'vpcName': '*' + }, + 'VPCCidrBlock': { + 'vpcId': '*', + 'amazonProvidedIpv6CidrBlock': '*', + 'cidrBlock': '*', + 'cidrBlockName': '*', + 'ipv6NetmaskLength': '*', + 'ipv4NetmaskLength': '*', + 'ipv6IpamPoolId': '*', + 'ipv4IpamPoolId': '*', + 'ipv4IpamProvisionedCidrs': '*', + 'ipv6CidrBlock': '*', + 'ipv6Pool': '*' + } + }, + '@aws-cdk.aws-gamelift-alpha': { + 'Alias': { + 'aliasName': '*', + 'description': '*', + 'fleet': { + 'fleetId': '*', + 'fleetArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'resourceArnForDestination': '*' + }, + 'terminalMessage': '*' + }, + 'BuildFleet': { + 'content': { + 'buildId': '*', + 'buildArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'ingressRules': { + 'port': '*', + 'source': { + 'uniqueId': '*' + } + }, + 'fleetName': '*', + 'description': '*', + 'useSpot': '*', + 'useCertificate': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'peerVpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'metricGroup': '*', + 'instanceType': '*', + 'desiredCapacity': '*', + 'minSize': '*', + 'maxSize': '*', + 'protectNewGameSession': '*', + 'runtimeConfiguration': { + 'gameSessionActivationTimeout': '*', + 'maxConcurrentGameSessionActivations': '*', + 'serverProcesses': { + 'concurrentExecutions': '*', + 'launchPath': '*', + 'parameters': '*' + } + }, + 'locations': { + 'region': '*', + 'capacity': { + 'desiredCapacity': '*', + 'maxSize': '*', + 'minSize': '*' + } + }, + 'resourceCreationLimitPolicy': { + 'newGameSessionsPerCreator': '*', + 'policyPeriod': '*' + } + }, + 'Build': { + 'buildName': '*', + 'buildVersion': '*', + 'operatingSystem': 'OperatingSystem', + 'content': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serverSdkVersion': '*' + }, + 'GameServerGroup': { + 'gameServerGroupName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'minSize': '*', + 'maxSize': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'instanceDefinitions': { + 'instanceType': '*', + 'weight': '*' + }, + 'launchTemplate': { + 'versionNumber': '*', + 'launchTemplateId': '*', + 'launchTemplateName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'protectGameServer': '*', + 'autoScalingPolicy': { + 'estimatedInstanceWarmup': '*', + 'targetTrackingConfiguration': '*' + }, + 'deleteOption': 'DeleteOption', + 'balancingStrategy': 'BalancingStrategy' + }, + 'GameSessionQueue': { + 'gameSessionQueueName': '*', + 'customEventData': '*', + 'allowedLocations': '*', + 'notificationTarget': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'playerLatencyPolicies': { + 'maximumIndividualPlayerLatency': '*' + }, + 'priorityConfiguration': { + 'locationOrder': '*', + 'priorityOrder': 'PriorityType' + }, + 'timeout': '*', + 'destinations': { + 'resourceArnForDestination': '*' + } + }, + 'MatchmakingRuleSet': { + 'matchmakingRuleSetName': '*', + 'content': '*' + }, + 'QueuedMatchmakingConfiguration': { + 'additionalPlayerCount': '*', + 'manualBackfillMode': '*', + 'gameProperties': { + 'key': '*', + 'value': '*' + }, + 'gameSessionData': '*', + 'gameSessionQueues': { + 'gameSessionQueueName': '*', + 'gameSessionQueueArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'matchmakingConfigurationName': '*', + 'description': '*', + 'requireAcceptance': '*', + 'acceptanceTimeout': '*', + 'customEventData': '*', + 'notificationTarget': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'requestTimeout': '*', + 'ruleSet': { + 'matchmakingRuleSetName': '*', + 'matchmakingRuleSetArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'Script': { + 'scriptName': '*', + 'scriptVersion': '*', + 'content': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'StandaloneMatchmakingConfiguration': { + 'matchmakingConfigurationName': '*', + 'description': '*', + 'requireAcceptance': '*', + 'acceptanceTimeout': '*', + 'customEventData': '*', + 'notificationTarget': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'requestTimeout': '*', + 'ruleSet': { + 'matchmakingRuleSetName': '*', + 'matchmakingRuleSetArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + '@aws-cdk.aws-glue-alpha': { + 'Connection': { + 'type': '*', + 'connectionName': '*', + 'description': '*', + 'properties': '*', + 'matchCriteria': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'subnet': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'DataQualityRuleset': { + 'rulesetName': '*', + 'clientToken': '*', + 'description': '*', + 'rulesetDqdl': '*', + 'tags': '*', + 'targetTable': '*' + }, + 'Database': { + 'databaseName': '*', + 'locationUri': '*', + 'description': '*' + }, + 'ExternalTable': { + 'connection': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'externalDataLocation': '*', + 'tableName': '*', + 'description': '*', + 'database': { + 'catalogArn': '*', + 'catalogId': '*', + 'databaseArn': '*', + 'databaseName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'columns': { + 'name': '*', + 'type': { + 'isPrimitive': '*', + 'inputString': '*' + }, + 'comment': '*' + }, + 'partitionKeys': { + 'name': '*', + 'type': { + 'isPrimitive': '*', + 'inputString': '*' + }, + 'comment': '*' + }, + 'partitionIndexes': { + 'indexName': '*', + 'keyNames': '*' + }, + 'dataFormat': '*', + 'compressed': '*', + 'storedAsSubDirectories': '*', + 'enablePartitionFiltering': '*', + 'storageParameters': '*', + 'parameters': '*' + }, + 'S3Table': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3Prefix': '*', + 'encryption': 'TableEncryption', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tableName': '*', + 'description': '*', + 'database': { + 'catalogArn': '*', + 'catalogId': '*', + 'databaseArn': '*', + 'databaseName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'columns': { + 'name': '*', + 'type': { + 'isPrimitive': '*', + 'inputString': '*' + }, + 'comment': '*' + }, + 'partitionKeys': { + 'name': '*', + 'type': { + 'isPrimitive': '*', + 'inputString': '*' + }, + 'comment': '*' + }, + 'partitionIndexes': { + 'indexName': '*', + 'keyNames': '*' + }, + 'dataFormat': '*', + 'compressed': '*', + 'storedAsSubDirectories': '*', + 'enablePartitionFiltering': '*', + 'storageParameters': '*', + 'parameters': '*' + }, + 'SecurityConfiguration': { + 'securityConfigurationName': '*', + 'cloudWatchEncryption': { + 'mode': 'CloudWatchEncryptionMode', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'jobBookmarksEncryption': { + 'mode': 'JobBookmarksEncryptionMode', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 's3Encryption': { + 'mode': 'S3EncryptionMode', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + } + }, + '@aws-cdk.aws-iot-alpha': { + 'ScheduledAudit': { + 'auditChecks': 'AuditCheck', + 'accountAuditConfiguration': { + 'accountId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dayOfWeek': 'DayOfWeek', + 'dayOfMonth': '*', + 'frequency': 'Frequency', + 'scheduledAuditName': '*' + }, + 'TopicRule': { + 'topicRuleName': '*', + 'actions': '*', + 'description': '*', + 'errorAction': '*', + 'enabled': '*', + 'sql': '*' + } + }, + '@aws-cdk.aws-iotevents-alpha': { + 'DetectorModel': { + 'detectorModelName': '*', + 'description': '*', + 'evaluationMethod': 'EventEvaluation', + 'detectorKey': '*', + 'initialState': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'Input': { + 'inputName': '*', + 'attributeJsonPaths': '*' + } + }, + '@aws-cdk.aws-ivs-alpha': { + 'Channel': { + 'authorized': '*', + 'insecureIngest': '*', + 'latencyMode': 'LatencyMode', + 'channelName': '*', + 'type': 'ChannelType', + 'preset': 'Preset', + 'recordingConfiguration': { + 'recordingConfigurationId': '*', + 'recordingConfigurationArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'PlaybackKeyPair': { + 'publicKeyMaterial': '*', + 'playbackKeyPairName': '*' + }, + 'RecordingConfiguration': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'recordingConfigurationName': '*', + 'recordingReconnectWindow': '*', + 'renditionConfiguration': '*', + 'thumbnailConfiguration': '*' + }, + 'StreamKey': { + 'channel': { + 'channelArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + '@aws-cdk.aws-kinesisanalytics-flink-alpha': { + 'Import': { + 'applicationArn': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + } + }, + 'Application': { + 'applicationName': '*', + 'runtime': '*', + 'code': '*', + 'checkpointingEnabled': '*', + 'checkpointInterval': '*', + 'minPauseBetweenCheckpoints': '*', + 'logLevel': 'LogLevel', + 'metricsLevel': 'MetricsLevel', + 'autoScalingEnabled': '*', + 'parallelism': '*', + 'parallelismPerKpu': '*', + 'snapshotsEnabled': '*', + 'propertyGroups': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + } + } + }, + '@aws-cdk.aws-kinesisfirehose-alpha': { + 'DeliveryStream': { + 'destination': '*', + 'deliveryStreamName': '*', + 'source': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'encryption': '*' + } + }, + '@aws-cdk.aws-lambda-go-alpha': { + 'GoFunction': { + 'entry': '*', + 'runtime': '*', + 'moduleDir': '*', + 'bundling': { + 'forcedDockerBundling': '*', + 'dockerImage': '*', + 'goBuildFlags': '*', + 'buildArgs': '*', + 'assetHashType': 'AssetHashType', + 'assetHash': '*', + 'commandHooks': '*', + 'cgoEnabled': '*', + 'goProxies': '*', + 'bundlingFileAccess': 'BundlingFileAccess', + 'entrypoint': '*', + 'command': '*', + 'volumes': { + 'hostPath': '*', + 'containerPath': '*', + 'consistency': 'DockerVolumeConsistency' + }, + 'volumesFrom': '*', + 'environment': '*', + 'workingDirectory': '*', + 'user': '*', + 'securityOpt': '*', + 'network': '*', + 'platform': '*' + }, + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + } + }, + '@aws-cdk.aws-lambda-python-alpha': { + 'PythonFunction': { + 'entry': '*', + 'runtime': '*', + 'index': '*', + 'handler': '*', + 'bundling': { + 'poetryIncludeHashes': '*', + 'poetryWithoutUrls': '*', + 'assetExcludes': '*', + 'outputPathSuffix': '*', + 'image': '*', + 'buildArgs': '*', + 'assetHashType': 'AssetHashType', + 'assetHash': '*', + 'commandHooks': '*', + 'bundlingFileAccess': 'BundlingFileAccess', + 'entrypoint': '*', + 'command': '*', + 'volumes': { + 'hostPath': '*', + 'containerPath': '*', + 'consistency': 'DockerVolumeConsistency' + }, + 'volumesFrom': '*', + 'environment': '*', + 'workingDirectory': '*', + 'user': '*', + 'securityOpt': '*', + 'network': '*', + 'platform': '*' + }, + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'PythonLayerVersion': { + 'entry': '*', + 'compatibleRuntimes': '*', + 'compatibleArchitectures': '*', + 'bundling': { + 'poetryIncludeHashes': '*', + 'poetryWithoutUrls': '*', + 'assetExcludes': '*', + 'outputPathSuffix': '*', + 'image': '*', + 'buildArgs': '*', + 'assetHashType': 'AssetHashType', + 'assetHash': '*', + 'commandHooks': '*', + 'bundlingFileAccess': 'BundlingFileAccess', + 'entrypoint': '*', + 'command': '*', + 'volumes': { + 'hostPath': '*', + 'containerPath': '*', + 'consistency': 'DockerVolumeConsistency' + }, + 'volumesFrom': '*', + 'environment': '*', + 'workingDirectory': '*', + 'user': '*', + 'securityOpt': '*', + 'network': '*', + 'platform': '*' + }, + 'description': '*', + 'license': '*', + 'layerVersionName': '*', + 'removalPolicy': 'RemovalPolicy' + } + }, + '@aws-cdk.aws-location-alpha': { + 'GeofenceCollection': { + 'geofenceCollectionName': '*', + 'description': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'Map': { + 'mapName': '*', + 'description': '*', + 'style': 'Style', + 'customLayers': 'CustomLayer', + 'politicalView': 'PoliticalView' + }, + 'PlaceIndex': { + 'placeIndexName': '*', + 'dataSource': 'DataSource', + 'intendedUse': 'IntendedUse', + 'description': '*' + }, + 'RouteCalculator': { + 'routeCalculatorName': '*', + 'dataSource': 'DataSource', + 'description': '*' + }, + 'Tracker': { + 'trackerName': '*', + 'description': '*', + 'eventBridgeEnabled': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kmsKeyEnableGeospatialQueries': '*', + 'positionFiltering': 'PositionFiltering', + 'geofenceCollections': { + 'geofenceCollectionName': '*', + 'geofenceCollectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + '@aws-cdk.aws-msk-alpha': { + 'Cluster': { + 'clusterName': '*', + 'kafkaVersion': '*', + 'numberOfBrokerNodes': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'instanceType': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'ebsStorageInfo': { + 'volumeSize': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'storageMode': 'StorageMode', + 'configurationInfo': { + 'arn': '*', + 'revision': '*' + }, + 'monitoring': { + 'clusterMonitoringLevel': 'ClusterMonitoringLevel', + 'enablePrometheusJmxExporter': '*', + 'enablePrometheusNodeExporter': '*' + }, + 'logging': { + 'firehoseDeliveryStreamName': '*', + 'cloudwatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*' + } + }, + 'encryptionInTransit': { + 'clientBroker': 'ClientBrokerEncryption', + 'enableInCluster': '*' + }, + 'clientAuthentication': '*', + 'removalPolicy': 'RemovalPolicy' + } + }, + '@aws-cdk.aws-neptune-alpha': { + 'DatabaseCluster': { + 'engineVersion': '*', + 'backupRetention': '*', + 'preferredBackupWindow': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'storageEncrypted': '*', + 'instances': '*', + 'dbClusterName': '*', + 'iamAuthentication': '*', + 'instanceIdentifierBase': '*', + 'instanceType': '*', + 'associatedRoles': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deletionProtection': '*', + 'preferredMaintenanceWindow': '*', + 'clusterParameterGroup': { + 'clusterParameterGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'parameterGroup': { + 'parameterGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'autoMinorVersionUpgrade': '*', + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serverlessScalingConfiguration': { + 'minCapacity': '*', + 'maxCapacity': '*' + }, + 'copyTagsToSnapshot': '*', + 'port': '*' + }, + 'DatabaseInstance': { + 'cluster': { + 'clusterIdentifier': '*', + 'clusterResourceIdentifier': '*', + 'clusterEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'instanceType': '*', + 'availabilityZone': '*', + 'dbInstanceName': '*', + 'parameterGroup': { + 'parameterGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'autoMinorVersionUpgrade': '*' + }, + 'ClusterParameterGroup': { + 'clusterParameterGroupName': '*', + 'description': '*', + 'parameters': '*', + 'family': '*' + }, + 'ParameterGroup': { + 'parameterGroupName': '*', + 'description': '*', + 'parameters': '*', + 'family': '*' + }, + 'SubnetGroup': { + 'description': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnetGroupName': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'removalPolicy': 'RemovalPolicy' + } + }, + '@aws-cdk.aws-pipes-alpha': { + 'Pipe': { + 'source': { + 'sourceArn': '*' + }, + 'filter': { + 'filters': { + 'pattern': '*' + } + }, + 'enrichment': { + 'enrichmentArn': '*' + }, + 'target': { + 'targetArn': '*' + }, + 'pipeName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logDestinations': '*', + 'logLevel': 'LogLevel', + 'logIncludeExecutionData': 'IncludeExecutionData', + 'description': '*', + 'desiredState': 'DesiredState', + 'tags': '*' + } + }, + '@aws-cdk.aws-redshift-alpha': { + 'Cluster': { + 'clusterName': '*', + 'parameterGroup': { + 'clusterParameterGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'numberOfNodes': '*', + 'nodeType': 'NodeType', + 'clusterType': 'ClusterType', + 'port': '*', + 'encrypted': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'preferredMaintenanceWindow': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'subnetGroup': { + 'clusterSubnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'masterUser': { + 'masterUsername': '*', + 'masterPassword': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'excludeCharacters': '*' + }, + 'roles': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'defaultRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'defaultDatabaseName': '*', + 'loggingProperties': { + 'loggingBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'loggingKeyPrefix': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'publiclyAccessible': '*', + 'classicResizing': '*', + 'elasticIp': '*', + 'rebootForParameterChanges': '*', + 'enhancedVpcRouting': '*', + 'multiAz': '*', + 'resourceAction': 'ResourceAction', + 'availabilityZoneRelocation': '*' + }, + 'DatabaseSecret': { + 'username': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'excludeCharacters': '*' + }, + 'ClusterParameterGroup': { + 'description': '*', + 'parameters': '*' + }, + 'ClusterSubnetGroup': { + 'description': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'removalPolicy': 'RemovalPolicy' + } + }, + '@aws-cdk.aws-route53resolver-alpha': { + 'FirewallDomainList': { + 'name': '*', + 'domains': '*' + }, + 'FirewallRuleGroupAssociation': { + 'firewallRuleGroup': { + 'firewallRuleGroupId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mutationProtection': '*', + 'name': '*', + 'priority': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + } + }, + 'FirewallRuleGroup': { + 'name': '*', + 'rules': { + 'action': '*', + 'firewallDomainList': { + 'firewallDomainListId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'priority': '*' + } + } + }, + '@aws-cdk.aws-s3objectlambda-alpha': { + 'AccessPoint': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'handler': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'accessPointName': '*', + 'cloudWatchMetricsEnabled': '*', + 'supportsGetObjectRange': '*', + 'supportsGetObjectPartNumber': '*', + 'payload': '*' + } + }, + '@aws-cdk.aws-sagemaker-alpha': { + 'EndpointConfig': { + 'endpointConfigName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'instanceProductionVariants': { + 'acceleratorType': '*', + 'initialInstanceCount': '*', + 'instanceType': '*', + 'initialVariantWeight': '*', + 'model': { + 'modelArn': '*', + 'modelName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'connections': '*' + }, + 'variantName': '*' + } + }, + 'Endpoint': { + 'endpointName': '*', + 'endpointConfig': { + 'endpointConfigArn': '*', + 'endpointConfigName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'Model': { + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'modelName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'containers': { + 'image': '*', + 'environment': '*', + 'containerHostname': '*', + 'modelData': '*' + }, + 'allowAllOutbound': '*', + 'networkIsolation': '*' + } + }, + '@aws-cdk.aws-scheduler-alpha': { + 'Group': { + 'groupName': '*', + 'removalPolicy': 'RemovalPolicy' + }, + 'Schedule': { + 'schedule': '*', + 'target': '*', + 'scheduleName': '*', + 'description': '*', + 'group': { + 'groupName': '*', + 'groupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*', + 'key': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'timeWindow': '*', + 'start': '*', + 'end': '*' + } + }, + '@aws-cdk.aws-servicecatalogappregistry-alpha': { + 'Application': { + 'applicationName': '*', + 'description': '*' + }, + 'AttributeGroup': { + 'attributeGroupName': '*', + 'description': '*', + 'attributes': '*' + } + }, + '@aws-cdk.example-construct-library': { + 'ExampleResource': { + 'waitConditionHandleName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'removalPolicy': 'RemovalPolicy' + } + }, + 'aws-cdk-lib.aws-apigateway': { + 'ApiKey': { + 'resources': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'stages': { + 'stageName': '*', + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + } + }, + 'customerId': '*', + 'enabled': '*', + 'generateDistinctId': '*', + 'apiKeyName': '*', + 'value': '*', + 'description': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'RateLimitedApiKey': { + 'apiStages': { + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'throttle': { + 'method': '*', + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + } + } + }, + 'quota': { + 'limit': '*', + 'offset': '*', + 'period': 'Period' + }, + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + }, + 'resources': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'stages': { + 'stageName': '*', + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + } + }, + 'customerId': '*', + 'enabled': '*', + 'generateDistinctId': '*', + 'apiKeyName': '*', + 'value': '*', + 'description': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'BasePathMapping': { + 'domainName': { + 'domainName': '*', + 'domainNameAliasDomainName': '*', + 'domainNameAliasHostedZoneId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'basePath': '*', + 'stage': '*', + 'attachToStage': '*' + }, + 'Deployment': { + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'description': '*', + 'retainDeployments': '*', + 'stageName': '*' + }, + 'DomainName': { + 'mapping': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'GatewayResponse': { + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'type': '*', + 'statusCode': '*', + 'responseHeaders': '*', + 'templates': '*' + }, + 'LambdaRestApi': { + 'handler': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'integrationOptions': { + 'proxy': '*', + 'allowTestInvoke': '*', + 'cacheKeyParameters': '*', + 'cacheNamespace': '*', + 'contentHandling': 'ContentHandling', + 'credentialsRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'credentialsPassthrough': '*', + 'passthroughBehavior': 'PassthroughBehavior', + 'requestParameters': '*', + 'requestTemplates': '*', + 'timeout': '*', + 'integrationResponses': { + 'selectionPattern': '*', + 'statusCode': '*', + 'contentHandling': 'ContentHandling', + 'responseParameters': '*', + 'responseTemplates': '*' + }, + 'connectionType': 'ConnectionType', + 'vpcLink': { + 'vpcLinkId': '*' + } + }, + 'proxy': '*', + 'options': { + 'binaryMediaTypes': '*', + 'minimumCompressionSize': '*', + 'minCompressionSize': '*', + 'cloneFrom': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'apiKeySourceType': 'ApiKeySourceType', + 'endpointConfiguration': { + 'types': 'EndpointType', + 'vpcEndpoints': { + 'vpcEndpointId': '*' + } + }, + 'deploy': '*', + 'deployOptions': { + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheDataEncrypted': '*' + }, + 'retainDeployments': '*', + 'restApiName': '*', + 'parameters': '*', + 'policy': '*', + 'failOnWarnings': '*', + 'domainName': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'cloudWatchRole': '*', + 'cloudWatchRoleRemovalPolicy': 'RemovalPolicy', + 'endpointExportName': '*', + 'endpointTypes': 'EndpointType', + 'disableExecuteApiEndpoint': '*', + 'description': '*' + }, + 'binaryMediaTypes': '*', + 'minimumCompressionSize': '*', + 'minCompressionSize': '*', + 'cloneFrom': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'apiKeySourceType': 'ApiKeySourceType', + 'endpointConfiguration': { + 'types': 'EndpointType', + 'vpcEndpoints': { + 'vpcEndpointId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'deploy': '*', + 'deployOptions': { + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheTtl': '*', + 'cacheDataEncrypted': '*' + }, + 'retainDeployments': '*', + 'restApiName': '*', + 'parameters': '*', + 'policy': '*', + 'failOnWarnings': '*', + 'domainName': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'cloudWatchRole': '*', + 'cloudWatchRoleRemovalPolicy': 'RemovalPolicy', + 'endpointExportName': '*', + 'endpointTypes': 'EndpointType', + 'disableExecuteApiEndpoint': '*', + 'description': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'Method': { + 'resource': { + 'restApi': '*', + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'httpMethod': '*', + 'integration': '*', + 'options': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + } + }, + 'Model': { + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'contentType': '*', + 'description': '*', + 'modelName': '*', + 'schema': { + 'schema': 'JsonSchemaVersion', + 'id': '*', + 'ref': '*', + 'type': 'JsonSchemaType', + 'title': '*', + 'description': '*', + 'enum': '*', + 'default': '*', + 'format': '*', + 'definitions': '*', + 'multipleOf': '*', + 'maximum': '*', + 'exclusiveMaximum': '*', + 'minimum': '*', + 'exclusiveMinimum': '*', + 'maxLength': '*', + 'minLength': '*', + 'pattern': '*', + 'maxItems': '*', + 'minItems': '*', + 'uniqueItems': '*', + 'maxProperties': '*', + 'minProperties': '*', + 'required': '*', + 'properties': '*', + 'additionalProperties': '*', + 'patternProperties': '*', + 'dependencies': '*' + } + }, + 'RequestValidator': { + 'restApi': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + }, + 'Resource': { + 'parent': { + 'restApi': '*', + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'pathPart': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'ProxyResource': { + 'parent': { + 'restApi': '*', + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'anyMethod': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'SpecRestApi': { + 'apiDefinition': '*', + 'minCompressionSize': '*', + 'deploy': '*', + 'deployOptions': { + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheTtl': '*', + 'cacheDataEncrypted': '*' + }, + 'retainDeployments': '*', + 'restApiName': '*', + 'parameters': '*', + 'policy': '*', + 'failOnWarnings': '*', + 'domainName': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'cloudWatchRole': '*', + 'cloudWatchRoleRemovalPolicy': 'RemovalPolicy', + 'endpointExportName': '*', + 'endpointTypes': 'EndpointType', + 'disableExecuteApiEndpoint': '*', + 'description': '*' + }, + 'RestApi': { + 'binaryMediaTypes': '*', + 'minimumCompressionSize': '*', + 'minCompressionSize': '*', + 'cloneFrom': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'apiKeySourceType': 'ApiKeySourceType', + 'endpointConfiguration': { + 'types': 'EndpointType', + 'vpcEndpoints': { + 'vpcEndpointId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'deploy': '*', + 'deployOptions': { + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheTtl': '*', + 'cacheDataEncrypted': '*' + }, + 'retainDeployments': '*', + 'restApiName': '*', + 'parameters': '*', + 'policy': '*', + 'failOnWarnings': '*', + 'domainName': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'cloudWatchRole': '*', + 'cloudWatchRoleRemovalPolicy': 'RemovalPolicy', + 'endpointExportName': '*', + 'endpointTypes': 'EndpointType', + 'disableExecuteApiEndpoint': '*', + 'description': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'Stage': { + 'deployment': '*', + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheTtl': '*', + 'cacheDataEncrypted': '*' + }, + 'StepFunctionsRestApi': { + 'stateMachine': { + 'stateMachineArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'requestContext': { + 'accountId': '*', + 'apiId': '*', + 'apiKey': '*', + 'authorizerPrincipalId': '*', + 'caller': '*', + 'cognitoAuthenticationProvider': '*', + 'cognitoAuthenticationType': '*', + 'cognitoIdentityId': '*', + 'cognitoIdentityPoolId': '*', + 'httpMethod': '*', + 'stage': '*', + 'sourceIp': '*', + 'user': '*', + 'userAgent': '*', + 'userArn': '*', + 'requestId': '*', + 'resourceId': '*', + 'resourcePath': '*' + }, + 'querystring': '*', + 'path': '*', + 'headers': '*', + 'authorizer': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'useDefaultMethodResponses': '*', + 'binaryMediaTypes': '*', + 'minimumCompressionSize': '*', + 'minCompressionSize': '*', + 'cloneFrom': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'apiKeySourceType': 'ApiKeySourceType', + 'endpointConfiguration': { + 'types': 'EndpointType', + 'vpcEndpoints': { + 'vpcEndpointId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'deploy': '*', + 'deployOptions': { + 'stageName': '*', + 'accessLogDestination': '*', + 'accessLogFormat': '*', + 'tracingEnabled': '*', + 'cacheClusterEnabled': '*', + 'cacheClusterSize': '*', + 'clientCertificateId': '*', + 'description': '*', + 'documentationVersion': '*', + 'variables': '*', + 'methodOptions': '*', + 'metricsEnabled': '*', + 'loggingLevel': 'MethodLoggingLevel', + 'dataTraceEnabled': '*', + 'throttlingBurstLimit': '*', + 'throttlingRateLimit': '*', + 'cachingEnabled': '*', + 'cacheTtl': '*', + 'cacheDataEncrypted': '*' + }, + 'retainDeployments': '*', + 'restApiName': '*', + 'parameters': '*', + 'policy': '*', + 'failOnWarnings': '*', + 'domainName': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'basePath': '*' + }, + 'cloudWatchRole': '*', + 'cloudWatchRoleRemovalPolicy': 'RemovalPolicy', + 'endpointExportName': '*', + 'endpointTypes': 'EndpointType', + 'disableExecuteApiEndpoint': '*', + 'description': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + }, + 'UsagePlan': { + 'apiStages': { + 'api': { + 'restApiId': '*', + 'restApiName': '*', + 'restApiRootResourceId': '*', + 'latestDeployment': '*', + 'deploymentStage': '*', + 'root': { + 'restApi': '*', + 'resourceId': '*', + 'path': '*', + 'defaultIntegration': '*', + 'defaultMethodOptions': { + 'operationName': '*', + 'authorizationType': 'AuthorizationType', + 'authorizer': { + 'authorizerId': '*', + 'authorizationType': 'AuthorizationType' + }, + 'apiKeyRequired': '*', + 'methodResponses': { + 'statusCode': '*', + 'responseParameters': '*', + 'responseModels': '*' + }, + 'requestParameters': '*', + 'requestModels': '*', + 'requestValidator': { + 'requestValidatorId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'authorizationScopes': '*', + 'requestValidatorOptions': { + 'requestValidatorName': '*', + 'validateRequestBody': '*', + 'validateRequestParameters': '*' + } + }, + 'defaultCorsPreflightOptions': { + 'statusCode': '*', + 'allowOrigins': '*', + 'allowHeaders': '*', + 'allowMethods': '*', + 'allowCredentials': '*', + 'maxAge': '*', + 'disableCache': '*', + 'exposeHeaders': '*' + } + } + }, + 'throttle': { + 'method': '*', + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + } + } + }, + 'description': '*', + 'quota': { + 'limit': '*', + 'offset': '*', + 'period': 'Period' + }, + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + }, + 'name': '*', + 'apiKey': { + 'keyId': '*', + 'keyArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'VpcLink': { + 'vpcLinkName': '*', + 'description': '*', + 'targets': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'metrics': '*', + 'securityGroups': '*', + 'ipAddressType': 'IpAddressType', + 'enforceSecurityGroupInboundRulesOnPrivateLinkTraffic': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'loadBalancerArn': '*', + 'connections': '*' + } + } + }, + 'aws-cdk-lib.aws-appconfig': { + 'Application': { + 'applicationName': '*', + 'description': '*' + }, + 'DeploymentStrategy': { + 'rolloutStrategy': '*', + 'deploymentStrategyName': '*', + 'description': '*' + }, + 'Environment': { + 'application': { + 'description': '*', + 'name': '*', + 'applicationId': '*', + 'applicationArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'environmentName': '*', + 'description': '*', + 'monitors': '*', + 'deletionProtectionCheck': 'DeletionProtectionCheck' + }, + 'Extension': { + 'actions': '*', + 'extensionName': '*', + 'description': '*', + 'latestVersionNumber': '*', + 'parameters': '*' + } + }, + 'aws-cdk-lib.aws-applicationautoscaling': { + 'ScalableTarget': { + 'minCapacity': '*', + 'maxCapacity': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'resourceId': '*', + 'scalableDimension': '*', + 'serviceNamespace': 'ServiceNamespace' + } + }, + 'aws-cdk-lib.aws-appmesh': { + 'GatewayRoute': { + 'virtualGateway': { + 'virtualGatewayName': '*', + 'virtualGatewayArn': '*', + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'gatewayRouteName': '*', + 'routeSpec': '*' + }, + 'Mesh': { + 'meshName': '*', + 'egressFilter': 'MeshFilterType', + 'serviceDiscovery': { + 'ipPreference': 'IpPreference' + } + }, + 'Route': { + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'virtualRouter': { + 'virtualRouterName': '*', + 'virtualRouterArn': '*', + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'routeName': '*', + 'routeSpec': '*' + }, + 'VirtualGateway': { + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'virtualGatewayName': '*', + 'listeners': '*', + 'accessLog': '*', + 'backendDefaults': { + 'tlsClientPolicy': { + 'enforce': '*', + 'ports': '*', + 'validation': { + 'trust': '*', + 'subjectAlternativeNames': '*' + }, + 'mutualTlsCertificate': '*' + } + } + }, + 'VirtualNode': { + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'virtualNodeName': '*', + 'serviceDiscovery': '*', + 'backends': '*', + 'listeners': '*', + 'accessLog': '*', + 'backendDefaults': { + 'tlsClientPolicy': { + 'enforce': '*', + 'ports': '*', + 'validation': { + 'trust': '*', + 'subjectAlternativeNames': '*' + }, + 'mutualTlsCertificate': '*' + } + } + }, + 'VirtualRouter': { + 'mesh': { + 'meshName': '*', + 'meshArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'listeners': '*', + 'virtualRouterName': '*' + }, + 'VirtualService': { + 'virtualServiceName': '*', + 'virtualServiceProvider': '*' + } + }, + 'aws-cdk-lib.aws-appsync': { + 'AppsyncFunction': { + 'api': { + 'apiId': '*', + 'arn': '*', + 'graphQLEndpointArn': '*', + 'visibility': 'Visibility', + 'modes': 'AuthorizationType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dataSource': '*', + 'name': '*', + 'description': '*', + 'requestMappingTemplate': '*', + 'responseMappingTemplate': '*', + 'runtime': '*', + 'code': '*', + 'maxBatchSize': '*' + }, + 'GraphqlApi': { + 'name': '*', + 'authorizationConfig': { + 'defaultAuthorization': { + 'authorizationType': 'AuthorizationType', + 'userPoolConfig': { + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'appIdClientRegex': '*', + 'defaultAction': 'UserPoolDefaultAction' + }, + 'apiKeyConfig': { + 'name': '*', + 'description': '*', + 'expires': '*' + }, + 'openIdConnectConfig': { + 'tokenExpiryFromAuth': '*', + 'tokenExpiryFromIssue': '*', + 'clientId': '*', + 'oidcProvider': '*' + }, + 'lambdaAuthorizerConfig': { + 'handler': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'resultsCacheTtl': '*', + 'validationRegex': '*' + } + } + }, + 'logConfig': { + 'excludeVerboseContent': '*', + 'fieldLogLevel': 'FieldLogLevel', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'retention': 'RetentionDays' + }, + 'definition': '*', + 'schema': '*', + 'xrayEnabled': '*', + 'visibility': 'Visibility', + 'domainName': { + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'domainName': '*' + }, + 'introspectionConfig': 'IntrospectionConfig', + 'queryDepthLimit': '*', + 'resolverCountLimit': '*', + 'environmentVariables': '*', + 'ownerContact': '*' + }, + 'SourceApiAssociation': { + 'sourceApi': { + 'apiId': '*', + 'arn': '*', + 'graphQLEndpointArn': '*', + 'visibility': 'Visibility', + 'modes': 'AuthorizationType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mergedApi': { + 'apiId': '*', + 'arn': '*', + 'graphQLEndpointArn': '*', + 'visibility': 'Visibility', + 'modes': 'AuthorizationType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mergedApiExecutionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mergeType': 'MergeType', + 'description': '*' + } + }, + 'aws-cdk-lib.aws-autoscaling': { + 'AutoScalingGroup': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'launchTemplate': { + 'versionNumber': '*', + 'launchTemplateId': '*', + 'launchTemplateName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mixedInstancesPolicy': { + 'instancesDistribution': { + 'onDemandAllocationStrategy': 'OnDemandAllocationStrategy', + 'onDemandBaseCapacity': '*', + 'onDemandPercentageAboveBaseCapacity': '*', + 'spotAllocationStrategy': 'SpotAllocationStrategy', + 'spotInstancePools': '*', + 'spotMaxPrice': '*' + }, + 'launchTemplate': { + 'versionNumber': '*', + 'launchTemplateId': '*', + 'launchTemplateName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'launchTemplateOverrides': { + 'instanceRequirements': { + 'acceleratorCount': { + 'creationStack': '*', + 'typeHint': 'ResolutionTypeHint' + }, + 'acceleratorManufacturers': '*', + 'acceleratorNames': '*', + 'acceleratorTypes': '*', + 'allowedInstanceTypes': '*', + 'bareMetal': '*', + 'burstablePerformance': '*', + 'cpuManufacturers': '*', + 'excludedInstanceTypes': '*', + 'instanceGenerations': '*', + 'localStorage': '*', + 'localStorageTypes': '*', + 'maxSpotPriceAsPercentageOfOptimalOnDemandPrice': '*', + 'onDemandMaxPricePercentageOverLowestPrice': '*', + 'requireHibernateSupport': '*', + 'spotMaxPricePercentageOverLowestPrice': '*' + }, + 'instanceType': '*', + 'weightedCapacity': '*' + } + }, + 'instanceType': '*', + 'machineImage': '*', + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'userData': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'init': '*', + 'initOptions': { + 'configSets': '*', + 'embedFingerprint': '*', + 'printLog': '*', + 'ignoreFailures': '*', + 'includeUrl': '*', + 'includeRole': '*' + }, + 'requireImdsv2': '*', + 'maxHealthyPercentage': '*', + 'minHealthyPercentage': '*', + 'minCapacity': '*', + 'maxCapacity': '*', + 'desiredCapacity': '*', + 'keyName': '*', + 'keyPair': { + 'keyPairName': '*', + 'type': 'KeyPairType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'notificationsTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'notifications': { + 'topic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'scalingEvents': '*' + }, + 'allowAllOutbound': '*', + 'updateType': 'UpdateType', + 'rollingUpdateConfiguration': { + 'maxBatchSize': '*', + 'minInstancesInService': '*', + 'minSuccessfulInstancesPercent': '*', + 'pauseTime': '*', + 'waitOnResourceSignals': '*', + 'suspendProcesses': 'ScalingProcess' + }, + 'replacingUpdateMinSuccessfulInstancesPercent': '*', + 'ignoreUnmodifiedSizeProperties': '*', + 'resourceSignalCount': '*', + 'resourceSignalTimeout': '*', + 'cooldown': '*', + 'associatePublicIpAddress': '*', + 'spotPrice': '*', + 'healthCheck': '*', + 'blockDevices': { + 'deviceName': '*', + 'volume': '*', + 'mappingEnabled': '*' + }, + 'maxInstanceLifetime': '*', + 'instanceMonitoring': 'Monitoring', + 'groupMetrics': '*', + 'signals': '*', + 'updatePolicy': '*', + 'newInstancesProtectedFromScaleIn': '*', + 'autoScalingGroupName': '*', + 'terminationPolicies': 'TerminationPolicy', + 'terminationPolicyCustomLambdaFunctionArn': '*', + 'defaultInstanceWarmup': '*', + 'capacityRebalance': '*', + 'ssmSessionPermissions': '*', + 'azCapacityDistributionStrategy': 'CapacityDistributionStrategy' + }, + 'LifecycleHook': { + 'autoScalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'lifecycleHookName': '*', + 'defaultResult': 'DefaultResult', + 'heartbeatTimeout': '*', + 'lifecycleTransition': 'LifecycleTransition', + 'notificationMetadata': '*', + 'notificationTarget': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'ScheduledAction': { + 'autoScalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'timeZone': '*', + 'schedule': '*', + 'startTime': '*', + 'endTime': '*', + 'minCapacity': '*', + 'maxCapacity': '*', + 'desiredCapacity': '*' + }, + 'WarmPool': { + 'autoScalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'reuseOnScaleIn': '*', + 'maxGroupPreparedCapacity': '*', + 'minSize': '*', + 'poolState': 'PoolState' + } + }, + 'aws-cdk-lib.aws-backup': { + 'BackupPlan': { + 'backupPlanName': '*', + 'backupVault': { + 'backupVaultName': '*', + 'backupVaultArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'backupPlanRules': '*', + 'windowsVss': '*' + }, + 'BackupSelection': { + 'backupPlan': { + 'backupPlanId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'resources': '*', + 'backupSelectionName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'disableDefaultBackupPolicy': '*', + 'allowRestores': '*' + }, + 'BackupVault': { + 'backupVaultName': '*', + 'accessPolicy': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'notificationTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'notificationEvents': 'BackupVaultEvents', + 'removalPolicy': 'RemovalPolicy', + 'blockRecoveryPointDeletion': '*', + 'lockConfiguration': { + 'minRetention': '*' + } + } + }, + 'aws-cdk-lib.aws-batch': { + 'EcsJobDefinition': { + 'container': { + 'image': '*', + 'cpu': '*', + 'memory': '*', + 'command': '*', + 'environment': '*', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'linuxParameters': '*', + 'logDriverConfig': { + 'logDriver': '*', + 'options': '*', + 'secretOptions': { + 'name': '*', + 'valueFrom': '*' + } + }, + 'readonlyRootFilesystem': '*', + 'secrets': '*', + 'user': '*', + 'volumes': '*' + }, + 'propagateTags': '*', + 'jobDefinitionName': '*', + 'parameters': '*', + 'retryAttempts': '*', + 'retryStrategies': '*', + 'schedulingPriority': '*', + 'timeout': '*' + }, + 'EksJobDefinition': { + 'container': '*', + 'dnsPolicy': 'DnsPolicy', + 'useHostNetwork': '*', + 'serviceAccount': '*', + 'jobDefinitionName': '*', + 'parameters': '*', + 'retryAttempts': '*', + 'retryStrategies': '*', + 'schedulingPriority': '*', + 'timeout': '*' + }, + 'ManagedEc2EcsComputeEnvironment': { + 'useOptimalInstanceClasses': '*', + 'images': { + 'imageType': 'EcsMachineImageType', + 'image': '*' + }, + 'allocationStrategy': 'AllocationStrategy', + 'spotBidPercentage': '*', + 'spotFleetRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'instanceTypes': '*', + 'instanceClasses': 'InstanceClass', + 'instanceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'launchTemplate': { + 'versionNumber': '*', + 'launchTemplateId': '*', + 'launchTemplateName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'minvCpus': '*', + 'placementGroup': { + 'placementGroupName': '*', + 'partitions': '*', + 'spreadLevel': 'PlacementGroupSpreadLevel', + 'strategy': 'PlacementGroupStrategy', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxvCpus': '*', + 'replaceComputeEnvironment': '*', + 'spot': '*', + 'updateTimeout': '*', + 'terminateOnUpdate': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'updateToLatestImageVersion': '*', + 'computeEnvironmentName': '*', + 'serviceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*' + }, + 'ManagedEc2EksComputeEnvironment': { + 'kubernetesNamespace': '*', + 'eksCluster': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clusterName': '*', + 'clusterArn': '*', + 'clusterEndpoint': '*', + 'clusterCertificateAuthorityData': '*', + 'clusterSecurityGroupId': '*', + 'clusterSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'clusterEncryptionConfigKeyArn': '*', + 'openIdConnectProvider': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*' + }, + 'eksPodIdentityAgent': { + 'addonName': '*', + 'addonArn': '*' + }, + 'kubectlRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*' + }, + 'ipFamily': 'IpFamily', + 'kubectlProvider': { + 'serviceToken': '*', + 'roleArn': '*' + }, + 'kubectlMemory': '*', + 'prune': '*', + 'authenticationMode': 'AuthenticationMode' + }, + 'useOptimalInstanceClasses': '*', + 'images': { + 'imageType': 'EksMachineImageType', + 'image': '*' + }, + 'allocationStrategy': 'AllocationStrategy', + 'spotBidPercentage': '*', + 'instanceTypes': '*', + 'instanceClasses': 'InstanceClass', + 'instanceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'launchTemplate': { + 'versionNumber': '*', + 'launchTemplateId': '*', + 'launchTemplateName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'minvCpus': '*', + 'placementGroup': { + 'placementGroupName': '*', + 'partitions': '*', + 'spreadLevel': 'PlacementGroupSpreadLevel', + 'strategy': 'PlacementGroupStrategy', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxvCpus': '*', + 'replaceComputeEnvironment': '*', + 'spot': '*', + 'updateTimeout': '*', + 'terminateOnUpdate': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'updateToLatestImageVersion': '*', + 'computeEnvironmentName': '*', + 'serviceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*' + }, + 'FargateComputeEnvironment': { + 'maxvCpus': '*', + 'replaceComputeEnvironment': '*', + 'spot': '*', + 'updateTimeout': '*', + 'terminateOnUpdate': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'updateToLatestImageVersion': '*', + 'computeEnvironmentName': '*', + 'serviceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*' + } + }, + 'aws-cdk-lib.aws-certificatemanager': { + 'Certificate': { + 'domainName': '*', + 'subjectAlternativeNames': '*', + 'validationDomains': '*', + 'validationMethod': 'ValidationMethod', + 'validation': '*', + 'transparencyLoggingEnabled': '*', + 'certificateName': '*', + 'keyAlgorithm': '*' + }, + 'DnsValidatedCertificate': { + 'hostedZone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'region': '*', + 'route53Endpoint': '*', + 'customResourceRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cleanupRoute53Records': '*', + 'domainName': '*', + 'subjectAlternativeNames': '*', + 'validationDomains': '*', + 'validationMethod': 'ValidationMethod', + 'validation': '*', + 'transparencyLoggingEnabled': '*', + 'certificateName': '*', + 'keyAlgorithm': '*' + }, + 'PrivateCertificate': { + 'domainName': '*', + 'subjectAlternativeNames': '*', + 'certificateAuthority': { + 'certificateAuthorityArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'keyAlgorithm': '*' + } + }, + 'aws-cdk-lib.aws-chatbot': { + 'SlackChannelConfiguration': { + 'slackChannelConfigurationName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'slackWorkspaceId': '*', + 'slackChannelId': '*', + 'notificationTopics': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'loggingLevel': 'LoggingLevel', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'guardrailPolicies': { + 'managedPolicyArn': '*' + }, + 'userRoleRequired': '*' + } + }, + 'aws-cdk-lib.aws-cloudformation': { + 'CustomResource': { + 'provider': '*', + 'properties': '*', + 'resourceType': '*', + 'removalPolicy': 'RemovalPolicy' + } + }, + 'aws-cdk-lib.aws-cloudfront': { + 'CachePolicy': { + 'cachePolicyName': '*', + 'comment': '*', + 'defaultTtl': '*', + 'minTtl': '*', + 'maxTtl': '*', + 'cookieBehavior': '*', + 'headerBehavior': '*', + 'queryStringBehavior': '*', + 'enableAcceptEncodingGzip': '*', + 'enableAcceptEncodingBrotli': '*' + }, + 'Distribution': { + 'defaultBehavior': { + 'origin': '*', + 'allowedMethods': '*', + 'cachedMethods': '*', + 'cachePolicy': { + 'cachePolicyId': '*' + }, + 'compress': '*', + 'originRequestPolicy': { + 'originRequestPolicyId': '*' + }, + 'realtimeLogConfig': { + 'realtimeLogConfigName': '*', + 'realtimeLogConfigArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'responseHeadersPolicy': { + 'responseHeadersPolicyId': '*' + }, + 'smoothStreaming': '*', + 'viewerProtocolPolicy': 'ViewerProtocolPolicy', + 'functionAssociations': { + 'function': { + 'functionName': '*', + 'functionArn': '*' + }, + 'eventType': 'FunctionEventType' + }, + 'edgeLambdas': { + 'functionVersion': { + 'version': '*', + 'lambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'resourceArnsForGrantInvoke': '*' + }, + 'eventType': 'LambdaEdgeEventType', + 'includeBody': '*' + }, + 'trustedKeyGroups': { + 'keyGroupId': '*' + } + }, + 'additionalBehaviors': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'comment': '*', + 'defaultRootObject': '*', + 'domainNames': '*', + 'enabled': '*', + 'enableIpv6': '*', + 'enableLogging': '*', + 'geoRestriction': '*', + 'httpVersion': 'HttpVersion', + 'logBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'logIncludesCookies': '*', + 'logFilePrefix': '*', + 'priceClass': 'PriceClass', + 'webAclId': '*', + 'errorResponses': { + 'ttl': '*', + 'httpStatus': '*', + 'responseHttpStatus': '*', + 'responsePagePath': '*' + }, + 'minimumProtocolVersion': 'SecurityPolicyProtocol', + 'sslSupportMethod': 'SSLMethod', + 'publishAdditionalMetrics': '*' + }, + 'Function': { + 'functionName': '*', + 'comment': '*', + 'code': '*', + 'runtime': '*', + 'keyValueStore': { + 'keyValueStoreArn': '*', + 'keyValueStoreId': '*', + 'keyValueStoreStatus': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoPublish': '*' + }, + 'KeyGroup': { + 'keyGroupName': '*', + 'comment': '*', + 'items': { + 'publicKeyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'S3OriginAccessControl': { + 'description': '*', + 'originAccessControlName': '*', + 'signing': '*' + }, + 'FunctionUrlOriginAccessControl': { + 'description': '*', + 'originAccessControlName': '*', + 'signing': '*' + }, + 'OriginRequestPolicy': { + 'originRequestPolicyName': '*', + 'comment': '*', + 'cookieBehavior': '*', + 'headerBehavior': '*', + 'queryStringBehavior': '*' + }, + 'PublicKey': { + 'publicKeyName': '*', + 'comment': '*', + 'encodedKey': '*' + }, + 'RealtimeLogConfig': { + 'realtimeLogConfigName': '*', + 'fields': '*', + 'samplingRate': '*', + 'endPoints': '*' + }, + 'ResponseHeadersPolicy': { + 'responseHeadersPolicyName': '*', + 'comment': '*', + 'corsBehavior': { + 'accessControlAllowCredentials': '*', + 'accessControlAllowHeaders': '*', + 'accessControlAllowMethods': '*', + 'accessControlAllowOrigins': '*', + 'accessControlExposeHeaders': '*', + 'accessControlMaxAge': '*', + 'originOverride': '*' + }, + 'customHeadersBehavior': { + 'customHeaders': { + 'header': '*', + 'override': '*', + 'value': '*' + } + }, + 'securityHeadersBehavior': { + 'contentSecurityPolicy': { + 'contentSecurityPolicy': '*', + 'override': '*' + }, + 'contentTypeOptions': { + 'override': '*' + }, + 'frameOptions': { + 'frameOption': 'HeadersFrameOption', + 'override': '*' + }, + 'referrerPolicy': { + 'referrerPolicy': 'HeadersReferrerPolicy', + 'override': '*' + }, + 'strictTransportSecurity': { + 'accessControlMaxAge': '*', + 'includeSubdomains': '*', + 'override': '*', + 'preload': '*' + }, + 'xssProtection': { + 'modeBlock': '*', + 'override': '*', + 'protection': '*', + 'reportUri': '*' + } + }, + 'removeHeaders': '*', + 'serverTimingSamplingRate': '*' + }, + 'CloudFrontWebDistribution': { + 'aliasConfiguration': { + 'acmCertRef': '*', + 'names': '*', + 'sslMethod': 'SSLMethod', + 'securityPolicy': 'SecurityPolicyProtocol' + }, + 'comment': '*', + 'enabled': '*', + 'defaultRootObject': '*', + 'enableIpV6': '*', + 'httpVersion': 'HttpVersion', + 'priceClass': 'PriceClass', + 'viewerProtocolPolicy': 'ViewerProtocolPolicy', + 'originConfigs': { + 'connectionAttempts': '*', + 'connectionTimeout': '*', + 's3OriginSource': { + 's3BucketSource': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'originAccessIdentity': { + 'originAccessIdentityName': '*', + 'originAccessIdentityId': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'originPath': '*', + 'originHeaders': '*', + 'originShieldRegion': '*' + }, + 'customOriginSource': { + 'domainName': '*', + 'httpPort': '*', + 'httpsPort': '*', + 'originProtocolPolicy': 'OriginProtocolPolicy', + 'allowedOriginSSLVersions': 'OriginSslPolicy', + 'originPath': '*', + 'originHeaders': '*', + 'originShieldRegion': '*' + }, + 'failoverCriteriaStatusCodes': 'FailoverStatusCode', + 'behaviors': { + 'compress': '*', + 'isDefaultBehavior': '*', + 'trustedSigners': '*', + 'trustedKeyGroups': { + 'keyGroupId': '*' + }, + 'allowedMethods': 'CloudFrontAllowedMethods', + 'pathPattern': '*', + 'cachedMethods': 'CloudFrontAllowedCachedMethods', + 'forwardedValues': { + 'cookies': { + 'creationStack': '*', + 'typeHint': 'ResolutionTypeHint' + }, + 'headers': '*', + 'queryString': '*', + 'queryStringCacheKeys': '*' + }, + 'lambdaFunctionAssociations': { + 'eventType': 'LambdaEdgeEventType', + 'lambdaFunction': { + 'version': '*', + 'lambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'resourceArnsForGrantInvoke': '*' + }, + 'includeBody': '*' + }, + 'functionAssociations': { + 'function': { + 'functionName': '*', + 'functionArn': '*' + }, + 'eventType': 'FunctionEventType' + }, + 'viewerProtocolPolicy': 'ViewerProtocolPolicy' + }, + 'originPath': '*', + 'originHeaders': '*', + 'originShieldRegion': '*' + }, + 'loggingConfig': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'includeCookies': '*', + 'prefix': '*' + }, + 'errorConfigurations': { + 'errorCachingMinTtl': '*', + 'errorCode': '*', + 'responseCode': '*', + 'responsePagePath': '*' + }, + 'webACLId': '*', + 'viewerCertificate': '*', + 'geoRestriction': '*' + } + }, + 'aws-cdk-lib.aws-cloudtrail': { + 'Trail': { + 'includeGlobalServiceEvents': '*', + 'isMultiRegionTrail': '*', + 'managementEvents': 'ReadWriteType', + 'enableFileValidation': '*', + 'sendToCloudWatchLogs': '*', + 'cloudWatchLogsRetention': 'RetentionDays', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'snsTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'trailName': '*', + 's3KeyPrefix': '*', + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'isOrganizationTrail': '*', + 'orgId': '*', + 'insightTypes': '*' + } + }, + 'aws-cdk-lib.aws-cloudwatch': { + 'Alarm': { + 'metric': { + 'warnings': '*', + 'warningsV2': '*' + }, + 'period': '*', + 'statistic': '*', + 'alarmName': '*', + 'alarmDescription': '*', + 'comparisonOperator': 'ComparisonOperator', + 'threshold': '*', + 'evaluationPeriods': '*', + 'evaluateLowSampleCountPercentile': '*', + 'treatMissingData': 'TreatMissingData', + 'actionsEnabled': '*', + 'datapointsToAlarm': '*' + }, + 'CompositeAlarm': { + 'actionsEnabled': '*', + 'alarmDescription': '*', + 'compositeAlarmName': '*', + 'alarmRule': '*', + 'actionsSuppressor': { + 'alarmArn': '*', + 'alarmName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'actionsSuppressorExtensionPeriod': '*', + 'actionsSuppressorWaitPeriod': '*' + }, + 'Dashboard': { + 'dashboardName': '*', + 'defaultInterval': '*', + 'start': '*', + 'end': '*', + 'periodOverride': 'PeriodOverride', + 'widgets': { + 'width': '*', + 'height': '*', + 'warnings': '*', + 'warningsV2': '*' + }, + 'variables': '*' + } + }, + 'aws-cdk-lib.aws-codebuild': { + 'Fleet': { + 'fleetName': '*', + 'baseCapacity': '*', + 'computeType': 'FleetComputeType', + 'environmentType': 'EnvironmentType' + }, + 'Project': { + 'source': { + 'identifier': '*', + 'type': '*', + 'badgeSupported': '*' + }, + 'artifacts': { + 'identifier': '*', + 'type': '*' + }, + 'secondarySources': { + 'identifier': '*', + 'type': '*', + 'badgeSupported': '*' + }, + 'secondaryArtifacts': { + 'identifier': '*', + 'type': '*' + }, + 'description': '*', + 'buildSpec': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cache': '*', + 'environment': { + 'buildImage': { + 'type': '*', + 'imageId': '*', + 'defaultComputeType': 'ComputeType', + 'imagePullPrincipalType': 'ImagePullPrincipalType', + 'secretsManagerCredentials': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'repository': { + 'repositoryName': '*', + 'repositoryArn': '*', + 'repositoryUri': '*', + 'registryUri': '*' + } + }, + 'computeType': 'ComputeType', + 'fleet': { + 'fleetArn': '*', + 'fleetName': '*', + 'computeType': 'FleetComputeType', + 'environmentType': 'EnvironmentType' + }, + 'privileged': '*', + 'certificate': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'objectKey': '*' + }, + 'environmentVariables': '*' + }, + 'badge': '*', + 'timeout': '*', + 'environmentVariables': '*', + 'checkSecretsInPlainTextEnvVariables': '*', + 'projectName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'fileSystemLocations': '*', + 'grantReportGroupPermissions': '*', + 'logging': { + 's3': { + 'encrypted': '*', + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'enabled': '*' + }, + 'cloudWatch': { + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 'prefix': '*', + 'enabled': '*' + } + }, + 'queuedTimeout': '*', + 'concurrentBuildLimit': '*', + 'ssmSessionPermissions': '*', + 'visibility': 'ProjectVisibility', + 'autoRetryLimit': '*' + }, + 'ReportGroup': { + 'reportGroupName': '*', + 'exportBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'zipExport': '*', + 'removalPolicy': 'RemovalPolicy', + 'type': 'ReportGroupType', + 'deleteReports': '*' + }, + 'GitHubSourceCredentials': { + 'accessToken': '*' + }, + 'GitHubEnterpriseSourceCredentials': { + 'accessToken': '*' + }, + 'BitBucketSourceCredentials': { + 'username': '*', + 'password': '*' + }, + 'UntrustedCodeBoundaryPolicy': { + 'managedPolicyName': '*', + 'additionalStatements': '*' + } + }, + 'aws-cdk-lib.aws-codecommit': { + 'Repository': { + 'repositoryName': '*', + 'description': '*', + 'code': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'aws-cdk-lib.aws-codeguruprofiler': { + 'ProfilingGroup': { + 'profilingGroupName': '*', + 'computePlatform': 'ComputePlatform' + } + }, + 'aws-cdk-lib.aws-codepipeline': { + 'Pipeline': { + 'artifactBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'restartExecutionOnUpdate': '*', + 'pipelineName': '*', + 'crossRegionReplicationBuckets': '*', + 'stages': { + 'stageName': '*', + 'actions': { + 'actionProperties': { + 'actionName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'region': '*', + 'account': '*', + 'resource': '*', + 'category': 'ActionCategory', + 'provider': '*', + 'owner': '*', + 'version': '*', + 'runOrder': '*', + 'artifactBounds': { + 'minInputs': '*', + 'maxInputs': '*', + 'minOutputs': '*', + 'maxOutputs': '*' + }, + 'inputs': '*', + 'variablesNamespace': '*' + } + }, + 'transitionToEnabled': '*', + 'transitionDisabledReason': '*' + }, + 'crossAccountKeys': '*', + 'enableKeyRotation': '*', + 'reuseCrossRegionSupportStacks': '*', + 'pipelineType': 'PipelineType', + 'variables': '*', + 'triggers': { + 'providerType': 'ProviderType', + 'gitConfiguration': { + 'sourceAction': { + 'actionProperties': { + 'actionName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'region': '*', + 'account': '*', + 'resource': '*', + 'category': 'ActionCategory', + 'provider': '*', + 'owner': '*', + 'version': '*', + 'runOrder': '*', + 'artifactBounds': { + 'minInputs': '*', + 'maxInputs': '*', + 'minOutputs': '*', + 'maxOutputs': '*' + }, + 'inputs': '*', + 'variablesNamespace': '*' + } + }, + 'pushFilter': { + 'tagsExcludes': '*', + 'tagsIncludes': '*' + }, + 'pullRequestFilter': { + 'branchesExcludes': '*', + 'branchesIncludes': '*', + 'filePathsExcludes': '*', + 'filePathsIncludes': '*', + 'events': 'GitPullRequestEvent' + } + } + }, + 'executionMode': 'ExecutionMode' + } + }, + 'aws-cdk-lib.aws-codestarnotifications': { + 'NotificationRule': { + 'events': '*', + 'source': '*', + 'targets': '*', + 'notificationRuleName': '*', + 'enabled': '*', + 'detailType': 'DetailType', + 'createdBy': '*' + } + }, + 'aws-cdk-lib.aws-cognito': { + 'UserPoolClient': { + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'userPoolClientName': '*', + 'generateSecret': '*', + 'authFlows': { + 'adminUserPassword': '*', + 'custom': '*', + 'userPassword': '*', + 'userSrp': '*', + 'user': '*' + }, + 'disableOAuth': '*', + 'oAuth': { + 'flows': { + 'authorizationCodeGrant': '*', + 'implicitCodeGrant': '*', + 'clientCredentials': '*' + }, + 'callbackUrls': '*', + 'logoutUrls': '*', + 'scopes': '*', + 'defaultRedirectUri': '*' + }, + 'authSessionValidity': '*', + 'preventUserExistenceErrors': '*', + 'supportedIdentityProviders': '*', + 'idTokenValidity': '*', + 'refreshTokenValidity': '*', + 'accessTokenValidity': '*', + 'readAttributes': '*', + 'writeAttributes': '*', + 'enableTokenRevocation': '*', + 'enablePropagateAdditionalUserContextData': '*' + }, + 'UserPoolDomain': { + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'customDomain': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'cognitoDomain': { + 'domainPrefix': '*' + } + }, + 'UserPoolGroup': { + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'description': '*', + 'groupName': '*', + 'precedence': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'UserPoolResourceServer': { + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'identifier': '*', + 'userPoolResourceServerName': '*', + 'scopes': '*' + }, + 'UserPool': { + 'userPoolName': '*', + 'selfSignUpEnabled': '*', + 'userVerification': { + 'emailSubject': '*', + 'emailBody': '*', + 'emailStyle': 'VerificationEmailStyle', + 'smsMessage': '*' + }, + 'userInvitation': { + 'emailSubject': '*', + 'emailBody': '*', + 'smsMessage': '*' + }, + 'smsRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'smsRoleExternalId': '*', + 'snsRegion': '*', + 'enableSmsRole': '*', + 'signInAliases': { + 'username': '*', + 'email': '*', + 'phone': '*', + 'preferredUsername': '*' + }, + 'autoVerify': { + 'email': '*', + 'phone': '*' + }, + 'keepOriginal': { + 'email': '*', + 'phone': '*' + }, + 'standardAttributes': { + 'address': { + 'mutable': '*', + 'required': '*' + } + }, + 'customAttributes': '*', + 'mfa': 'Mfa', + 'mfaMessage': '*', + 'mfaSecondFactor': { + 'sms': '*', + 'otp': '*', + 'email': '*' + }, + 'passwordPolicy': { + 'tempPasswordValidity': '*', + 'minLength': '*', + 'requireLowercase': '*', + 'requireUppercase': '*', + 'requireDigits': '*', + 'requireSymbols': '*' + }, + 'emailSettings': { + 'from': '*', + 'replyTo': '*' + }, + 'email': '*', + 'lambdaTriggers': { + 'createAuthChallenge': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + } + }, + 'signInCaseSensitive': '*', + 'accountRecovery': 'AccountRecovery', + 'removalPolicy': 'RemovalPolicy', + 'deletionProtection': '*', + 'deviceTracking': { + 'challengeRequiredOnNewDevice': '*', + 'deviceOnlyRememberedOnUserPrompt': '*' + }, + 'customSenderKmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'advancedSecurityMode': 'AdvancedSecurityMode', + 'featurePlan': 'FeaturePlan' + } + }, + 'aws-cdk-lib.aws-config': { + 'AccessKeysRotated': { + 'maxAge': '*', + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + }, + 'CloudFormationStackDriftDetectionCheck': { + 'ownStackOnly': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + }, + 'CloudFormationStackNotificationCheck': { + 'topics': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + }, + 'ManagedRule': { + 'identifier': '*', + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + }, + 'CustomRule': { + 'lambdaFunction': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'configurationChanges': '*', + 'periodic': '*', + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + }, + 'CustomPolicy': { + 'policyText': '*', + 'enableDebugLog': '*', + 'configRuleName': '*', + 'description': '*', + 'inputParameters': '*', + 'maximumExecutionFrequency': 'MaximumExecutionFrequency', + 'ruleScope': '*', + 'evaluationModes': '*' + } + }, + 'aws-cdk-lib.aws-docdb': { + 'DatabaseCluster': { + 'engineVersion': '*', + 'port': '*', + 'masterUser': { + 'username': '*', + 'password': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'excludeCharacters': '*', + 'secretName': '*' + }, + 'backup': { + 'retention': '*', + 'preferredWindow': '*' + }, + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'storageEncrypted': '*', + 'instances': '*', + 'dbClusterName': '*', + 'instanceIdentifierBase': '*', + 'instanceType': '*', + 'caCertificate': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'parameterGroup': { + 'parameterGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'preferredMaintenanceWindow': '*', + 'removalPolicy': 'RemovalPolicy', + 'deletionProtection': '*', + 'exportProfilerLogsToCloudWatch': '*', + 'exportAuditLogsToCloudWatch': '*', + 'cloudWatchLogsRetention': 'RetentionDays', + 'cloudWatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enablePerformanceInsights': '*', + 'instanceRemovalPolicy': 'RemovalPolicy', + 'securityGroupRemovalPolicy': 'RemovalPolicy', + 'copyTagsToSnapshot': '*', + 'storageType': 'StorageType' + }, + 'DatabaseSecret': { + 'username': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretName': '*', + 'masterSecret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'excludeCharacters': '*' + }, + 'DatabaseInstance': { + 'cluster': { + 'clusterIdentifier': '*', + 'instanceIdentifiers': '*', + 'clusterEndpoint': '*', + 'securityGroupId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'instanceType': '*', + 'availabilityZone': '*', + 'dbInstanceName': '*', + 'autoMinorVersionUpgrade': '*', + 'preferredMaintenanceWindow': '*', + 'removalPolicy': 'RemovalPolicy', + 'enablePerformanceInsights': '*', + 'caCertificate': '*' + }, + 'ClusterParameterGroup': { + 'description': '*', + 'family': '*', + 'dbClusterParameterGroupName': '*', + 'parameters': '*' + } + }, + 'aws-cdk-lib.aws-dynamodb': { + 'TableV2': { + 'partitionKey': { + 'name': '*', + 'type': 'AttributeType' + }, + 'sortKey': { + 'name': '*', + 'type': 'AttributeType' + }, + 'tableName': '*', + 'timeToLiveAttribute': '*', + 'dynamoStream': 'StreamViewType', + 'removalPolicy': 'RemovalPolicy', + 'billing': '*', + 'replicas': { + 'region': '*', + 'readCapacity': '*', + 'maxReadRequestUnits': '*', + 'globalSecondaryIndexOptions': '*', + 'contributorInsights': '*', + 'deletionProtection': '*', + 'pointInTimeRecovery': '*', + 'tableClass': 'TableClass', + 'kinesisStream': { + 'streamArn': '*', + 'streamName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'tags': { + 'key': '*', + 'value': '*' + }, + 'resourcePolicy': '*' + }, + 'globalSecondaryIndexes': { + 'partitionKey': { + 'name': '*', + 'type': 'AttributeType' + }, + 'readCapacity': '*', + 'maxReadRequestUnits': '*', + 'maxWriteRequestUnits': '*', + 'warmThroughput': { + 'readUnitsPerSecond': '*', + 'writeUnitsPerSecond': '*' + }, + 'indexName': '*', + 'projectionType': 'ProjectionType', + 'nonKeyAttributes': '*' + }, + 'localSecondaryIndexes': { + 'sortKey': { + 'name': '*', + 'type': 'AttributeType' + }, + 'indexName': '*', + 'projectionType': 'ProjectionType', + 'nonKeyAttributes': '*' + }, + 'encryption': '*', + 'warmThroughput': { + 'readUnitsPerSecond': '*', + 'writeUnitsPerSecond': '*' + }, + 'contributorInsights': '*', + 'deletionProtection': '*', + 'pointInTimeRecovery': '*', + 'tableClass': 'TableClass', + 'kinesisStream': { + 'streamArn': '*', + 'streamName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'tags': { + 'key': '*', + 'value': '*' + }, + 'resourcePolicy': '*' + }, + 'Table': { + 'tableName': '*', + 'kinesisStream': { + 'streamArn': '*', + 'streamName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'kinesisPrecisionTimestamp': 'ApproximateCreationDateTimePrecision', + 'readCapacity': '*', + 'writeCapacity': '*', + 'maxReadRequestUnits': '*', + 'maxWriteRequestUnits': '*', + 'billingMode': 'BillingMode', + 'warmThroughput': { + 'readUnitsPerSecond': '*', + 'writeUnitsPerSecond': '*' + }, + 'pointInTimeRecovery': '*', + 'serverSideEncryption': '*', + 'tableClass': 'TableClass', + 'encryption': 'TableEncryption', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'timeToLiveAttribute': '*', + 'stream': 'StreamViewType', + 'removalPolicy': 'RemovalPolicy', + 'replicationRegions': '*', + 'replicationTimeout': '*', + 'waitForReplicationToFinish': '*', + 'contributorInsightsEnabled': '*', + 'deletionProtection': '*', + 'importSource': { + 'compressionType': 'InputCompressionType', + 'inputFormat': '*', + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'bucketOwner': '*', + 'keyPrefix': '*' + }, + 'resourcePolicy': '*', + 'partitionKey': { + 'name': '*', + 'type': 'AttributeType' + }, + 'sortKey': { + 'name': '*', + 'type': 'AttributeType' + } + } + }, + 'aws-cdk-lib.aws-ec2': { + 'BastionHostLinux': { + 'availabilityZone': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'instanceName': '*', + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'instanceType': '*', + 'machineImage': '*', + 'blockDevices': { + 'deviceName': '*', + 'volume': '*', + 'mappingEnabled': '*' + }, + 'init': '*', + 'initOptions': { + 'configSets': '*', + 'timeout': '*', + 'embedFingerprint': '*', + 'printLog': '*', + 'ignoreFailures': '*', + 'includeUrl': '*', + 'includeRole': '*' + }, + 'requireImdsv2': '*', + 'userDataCausesReplacement': '*' + }, + 'ClientVpnAuthorizationRule': { + 'clientVpnEndpoint': { + 'endpointId': '*', + 'targetNetworksAssociated': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'clientVpnEndoint': { + 'endpointId': '*', + 'targetNetworksAssociated': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'cidr': '*', + 'groupId': '*', + 'description': '*' + }, + 'ClientVpnEndpoint': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'cidr': '*', + 'clientCertificateArn': '*', + 'userBasedAuthentication': '*', + 'logging': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStream': { + 'logStreamName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'clientConnectionHandler': { + 'functionName': '*', + 'functionArn': '*' + }, + 'description': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'selfServicePortal': '*', + 'serverCertificateArn': '*', + 'splitTunnel': '*', + 'transportProtocol': 'TransportProtocol', + 'port': 'VpnPort', + 'dnsServers': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'authorizeAllUsersToVpcCidr': '*', + 'sessionTimeout': 'ClientVpnSessionTimeout', + 'clientLoginBanner': '*' + }, + 'ClientVpnRoute': { + 'clientVpnEndpoint': { + 'endpointId': '*', + 'targetNetworksAssociated': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'clientVpnEndoint': { + 'endpointId': '*', + 'targetNetworksAssociated': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'cidr': '*', + 'description': '*', + 'target': '*' + }, + 'Instance': { + 'keyName': '*', + 'keyPair': { + 'keyPairName': '*', + 'type': 'KeyPairType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'availabilityZone': '*', + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'resourceSignalTimeout': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'instanceType': '*', + 'machineImage': '*', + 'userData': '*', + 'userDataCausesReplacement': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'instanceProfile': { + 'instanceProfileName': '*', + 'instanceProfileArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'instanceName': '*', + 'sourceDestCheck': '*', + 'blockDevices': { + 'deviceName': '*', + 'volume': '*', + 'mappingEnabled': '*' + }, + 'privateIpAddress': '*', + 'propagateTagsToVolumeOnCreation': '*', + 'init': '*', + 'initOptions': { + 'configSets': '*', + 'timeout': '*', + 'embedFingerprint': '*', + 'printLog': '*', + 'ignoreFailures': '*', + 'includeUrl': '*', + 'includeRole': '*' + }, + 'requireImdsv2': '*', + 'detailedMonitoring': '*', + 'ssmSessionPermissions': '*', + 'associatePublicIpAddress': '*', + 'creditSpecification': 'CpuCredits', + 'ebsOptimized': '*', + 'disableApiTermination': '*', + 'instanceInitiatedShutdownBehavior': 'InstanceInitiatedShutdownBehavior', + 'placementGroup': { + 'placementGroupName': '*', + 'partitions': '*', + 'spreadLevel': 'PlacementGroupSpreadLevel', + 'strategy': 'PlacementGroupStrategy', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enclaveEnabled': '*', + 'hibernationEnabled': '*', + 'ipv6AddressCount': '*' + }, + 'LaunchTemplate': { + 'launchTemplateName': '*', + 'versionDescription': '*', + 'instanceType': '*', + 'machineImage': '*', + 'userData': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'blockDevices': { + 'deviceName': '*', + 'volume': '*', + 'mappingEnabled': '*' + }, + 'cpuCredits': 'CpuCredits', + 'disableApiTermination': '*', + 'ebsOptimized': '*', + 'nitroEnclaveEnabled': '*', + 'hibernationConfigured': '*', + 'instanceInitiatedShutdownBehavior': 'InstanceInitiatedShutdownBehavior', + 'spotOptions': { + 'blockDuration': '*', + 'interruptionBehavior': 'SpotInstanceInterruption', + 'maxPrice': '*', + 'requestType': 'SpotRequestType', + 'validUntil': '*' + }, + 'keyName': '*', + 'keyPair': { + 'keyPairName': '*', + 'type': 'KeyPairType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'detailedMonitoring': '*', + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'requireImdsv2': '*', + 'httpEndpoint': '*', + 'httpProtocolIpv6': '*', + 'httpPutResponseHopLimit': '*', + 'httpTokens': 'LaunchTemplateHttpTokens', + 'instanceMetadataTags': '*', + 'associatePublicIpAddress': '*', + 'instanceProfile': { + 'instanceProfileName': '*', + 'instanceProfileArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'NetworkAcl': { + 'networkAclName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'NetworkAclEntry': { + 'networkAcl': { + 'networkAclId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'networkAclEntryName': '*', + 'cidr': '*', + 'traffic': '*', + 'direction': 'TrafficDirection', + 'ruleAction': 'Action', + 'ruleNumber': '*' + }, + 'SubnetNetworkAclAssociation': { + 'subnetNetworkAclAssociationName': '*', + 'networkAcl': { + 'networkAclId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnet': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'SecurityGroup': { + 'securityGroupName': '*', + 'description': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'disableInlineRules': '*' + }, + 'Volume': { + 'volumeName': '*', + 'availabilityZone': '*', + 'size': '*', + 'snapshotId': '*', + 'enableMultiAttach': '*', + 'encrypted': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoEnableIo': '*', + 'volumeType': 'EbsDeviceVolumeType', + 'iops': '*', + 'removalPolicy': 'RemovalPolicy', + 'throughput': '*' + }, + 'VpcEndpointService': { + 'vpcEndpointServiceName': '*', + 'vpcEndpointServiceLoadBalancers': { + 'loadBalancerArn': '*' + }, + 'acceptanceRequired': '*', + 'contributorInsights': '*', + 'whitelistedPrincipals': '*', + 'allowedPrincipals': '*' + }, + 'GatewayVpcEndpoint': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'service': { + 'name': '*' + }, + 'subnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'InterfaceVpcEndpoint': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'service': { + 'name': '*', + 'port': '*', + 'privateDnsDefault': '*' + }, + 'privateDnsEnabled': '*', + 'subnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'open': '*', + 'lookupSupportedAzs': '*' + }, + 'FlowLog': { + 'flowLogName': '*', + 'resourceType': '*', + 'trafficType': 'FlowLogTrafficType', + 'destination': '*', + 'logFormat': '*', + 'maxAggregationInterval': 'FlowLogMaxAggregationInterval' + }, + 'Vpc': { + 'ipProtocol': 'IpProtocol', + 'ipAddresses': '*', + 'cidr': '*', + 'enableDnsHostnames': '*', + 'enableDnsSupport': '*', + 'defaultInstanceTenancy': 'DefaultInstanceTenancy', + 'maxAzs': '*', + 'reservedAzs': '*', + 'availabilityZones': '*', + 'natGateways': '*', + 'natGatewaySubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'natGatewayProvider': '*', + 'subnetConfiguration': { + 'cidrMask': '*', + 'subnetType': 'SubnetType', + 'name': '*', + 'reserved': '*', + 'mapPublicIpOnLaunch': '*', + 'ipv6AssignAddressOnCreation': '*' + }, + 'vpnGateway': '*', + 'vpnGatewayAsn': '*', + 'vpnConnections': '*', + 'vpnRoutePropagation': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'gatewayEndpoints': '*', + 'flowLogs': '*', + 'vpcName': '*', + 'restrictDefaultSecurityGroup': '*', + 'createInternetGateway': '*', + 'ipv6Addresses': { + 'amazonProvided': '*' + } + }, + 'Subnet': { + 'availabilityZone': '*', + 'vpcId': '*', + 'cidrBlock': '*', + 'mapPublicIpOnLaunch': '*', + 'ipv6CidrBlock': '*', + 'assignIpv6AddressOnCreation': '*' + }, + 'PublicSubnet': { + 'availabilityZone': '*', + 'vpcId': '*', + 'cidrBlock': '*', + 'mapPublicIpOnLaunch': '*', + 'ipv6CidrBlock': '*', + 'assignIpv6AddressOnCreation': '*' + }, + 'PrivateSubnet': { + 'availabilityZone': '*', + 'vpcId': '*', + 'cidrBlock': '*', + 'mapPublicIpOnLaunch': '*', + 'ipv6CidrBlock': '*', + 'assignIpv6AddressOnCreation': '*' + }, + 'ImportedVpc': { + 'vpcId': '*', + 'vpcCidrBlock': '*', + 'availabilityZones': '*', + 'publicSubnetIds': '*', + 'publicSubnetNames': '*', + 'publicSubnetRouteTableIds': '*', + 'publicSubnetIpv4CidrBlocks': '*', + 'privateSubnetIds': '*', + 'privateSubnetNames': '*', + 'privateSubnetRouteTableIds': '*', + 'privateSubnetIpv4CidrBlocks': '*', + 'isolatedSubnetIds': '*', + 'isolatedSubnetNames': '*', + 'isolatedSubnetRouteTableIds': '*', + 'isolatedSubnetIpv4CidrBlocks': '*', + 'vpnGatewayId': '*', + 'region': '*' + }, + 'LookedUpVpc': { + 'vpcId': '*', + 'vpcCidrBlock': '*', + 'availabilityZones': '*', + 'publicSubnetIds': '*', + 'publicSubnetNames': '*', + 'publicSubnetRouteTableIds': '*', + 'privateSubnetIds': '*', + 'privateSubnetNames': '*', + 'privateSubnetRouteTableIds': '*', + 'isolatedSubnetIds': '*', + 'isolatedSubnetNames': '*', + 'isolatedSubnetRouteTableIds': '*', + 'vpnGatewayId': '*', + 'subnetGroups': { + 'name': '*', + 'type': 'VpcSubnetGroupType', + 'subnets': { + 'subnetId': '*', + 'availabilityZone': '*', + 'routeTableId': '*', + 'cidr': '*' + } + }, + 'region': '*', + 'ownerAccountId': '*' + }, + 'ImportedSubnet': { + 'availabilityZone': '*', + 'ipv4CidrBlock': '*', + 'routeTableId': '*', + 'subnetId': '*' + }, + 'VpnGateway': { + 'type': '*', + 'amazonSideAsn': '*' + }, + 'VpnConnection': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ip': '*', + 'asn': '*', + 'staticRoutes': '*', + 'tunnelOptions': { + 'preSharedKey': '*', + 'preSharedKeySecret': '*', + 'tunnelInsideCidr': '*' + } + } + }, + 'aws-cdk-lib.aws-ecr': { + 'Repository': { + 'repositoryName': '*', + 'encryption': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'lifecycleRules': { + 'rulePriority': '*', + 'description': '*', + 'tagStatus': 'TagStatus', + 'tagPrefixList': '*', + 'tagPatternList': '*', + 'maxImageCount': '*', + 'maxImageAge': '*' + }, + 'lifecycleRegistryId': '*', + 'removalPolicy': 'RemovalPolicy', + 'imageScanOnPush': '*', + 'imageTagMutability': 'TagMutability', + 'autoDeleteImages': '*', + 'emptyOnDelete': '*' + } + }, + 'aws-cdk-lib.aws-ecs': { + 'Cluster': { + 'clusterName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'defaultCloudMapNamespace': { + 'name': '*', + 'type': 'NamespaceType', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'useForServiceConnect': '*' + }, + 'capacity': { + 'instanceType': '*', + 'machineImage': '*', + 'canContainersAccessInstanceRole': '*', + 'taskDrainTime': '*', + 'spotInstanceDraining': '*', + 'topicEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'machineImageType': 'MachineImageType', + 'minCapacity': '*', + 'maxCapacity': '*', + 'desiredCapacity': '*', + 'keyName': '*', + 'keyPair': { + 'keyPairName': '*', + 'type': 'KeyPairType' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + } + } + }, + 'notificationsTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*' + }, + 'notifications': { + 'scalingEvents': '*' + }, + 'allowAllOutbound': '*', + 'updateType': 'UpdateType', + 'rollingUpdateConfiguration': { + 'maxBatchSize': '*', + 'minInstancesInService': '*', + 'minSuccessfulInstancesPercent': '*', + 'waitOnResourceSignals': '*', + 'suspendProcesses': 'ScalingProcess' + }, + 'replacingUpdateMinSuccessfulInstancesPercent': '*', + 'ignoreUnmodifiedSizeProperties': '*', + 'resourceSignalCount': '*', + 'associatePublicIpAddress': '*', + 'spotPrice': '*', + 'healthCheck': '*', + 'blockDevices': { + 'deviceName': '*', + 'volume': '*', + 'mappingEnabled': '*' + }, + 'instanceMonitoring': 'Monitoring', + 'groupMetrics': '*', + 'signals': '*', + 'updatePolicy': '*', + 'newInstancesProtectedFromScaleIn': '*', + 'autoScalingGroupName': '*', + 'terminationPolicies': 'TerminationPolicy', + 'terminationPolicyCustomLambdaFunctionArn': '*', + 'capacityRebalance': '*', + 'ssmSessionPermissions': '*', + 'azCapacityDistributionStrategy': 'CapacityDistributionStrategy' + }, + 'capacityProviders': '*', + 'enableFargateCapacityProviders': '*', + 'containerInsights': '*', + 'containerInsightsV2': 'ContainerInsights', + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + }, + 'managedStorageConfiguration': { + 'fargateEphemeralStorageKmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'ImportedCluster': { + 'clusterName': '*', + 'clusterArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'hasEc2Capacity': '*', + 'defaultCloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoscalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + } + } + }, + 'aws-cdk-lib.aws-efs': { + 'AccessPoint': { + 'fileSystem': { + 'fileSystemId': '*', + 'fileSystemArn': '*', + 'mountTargetsAvailable': '*', + 'connections': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'createAcl': { + 'ownerUid': '*', + 'ownerGid': '*', + 'permissions': '*' + }, + 'path': '*', + 'posixUser': { + 'uid': '*', + 'gid': '*', + 'secondaryGids': '*' + }, + 'clientToken': '*' + }, + 'ImportedAccessPoint': { + 'accessPointId': '*', + 'accessPointArn': '*', + 'fileSystem': { + 'fileSystemId': '*', + 'fileSystemArn': '*', + 'mountTargetsAvailable': '*', + 'connections': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'FileSystem': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'encrypted': '*', + 'fileSystemName': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'lifecyclePolicy': 'LifecyclePolicy', + 'outOfInfrequentAccessPolicy': 'OutOfInfrequentAccessPolicy', + 'transitionToArchivePolicy': 'LifecyclePolicy', + 'performanceMode': 'PerformanceMode', + 'throughputMode': 'ThroughputMode', + 'provisionedThroughputPerSecond': '*', + 'removalPolicy': 'RemovalPolicy', + 'enableAutomaticBackups': '*', + 'fileSystemPolicy': '*', + 'allowAnonymousAccess': '*', + 'oneZone': '*', + 'replicationOverwriteProtection': 'ReplicationOverwriteProtection', + 'replicationConfiguration': '*' + }, + 'ImportedFileSystem': { + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'fileSystemId': '*', + 'fileSystemArn': '*' + } + }, + 'aws-cdk-lib.aws-eks': { + 'AccessEntry': { + 'accessEntryName': '*', + 'accessEntryType': 'AccessEntryType', + 'cluster': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clusterName': '*', + 'clusterArn': '*', + 'clusterEndpoint': '*', + 'clusterCertificateAuthorityData': '*', + 'clusterSecurityGroupId': '*', + 'clusterSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'clusterEncryptionConfigKeyArn': '*', + 'openIdConnectProvider': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*' + }, + 'eksPodIdentityAgent': { + 'addonName': '*', + 'addonArn': '*' + }, + 'kubectlRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*' + }, + 'ipFamily': 'IpFamily', + 'kubectlProvider': { + 'serviceToken': '*', + 'roleArn': '*' + }, + 'kubectlMemory': '*', + 'prune': '*', + 'authenticationMode': 'AuthenticationMode' + }, + 'accessPolicies': { + 'accessScope': { + 'namespaces': '*', + 'type': 'AccessScopeType' + }, + 'policy': '*' + }, + 'principal': '*' + }, + 'Addon': { + 'addonName': '*', + 'addonVersion': '*', + 'cluster': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clusterName': '*', + 'clusterArn': '*', + 'clusterEndpoint': '*', + 'clusterCertificateAuthorityData': '*', + 'clusterSecurityGroupId': '*', + 'clusterSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'clusterEncryptionConfigKeyArn': '*', + 'openIdConnectProvider': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*' + }, + 'eksPodIdentityAgent': { + 'addonName': '*', + 'addonArn': '*' + }, + 'kubectlRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*' + }, + 'ipFamily': 'IpFamily', + 'kubectlProvider': { + 'serviceToken': '*', + 'roleArn': '*' + }, + 'kubectlMemory': '*', + 'prune': '*', + 'authenticationMode': 'AuthenticationMode' + }, + 'preserveOnDelete': '*' + }, + 'Cluster': { + 'defaultCapacity': '*', + 'defaultCapacityInstance': '*', + 'defaultCapacityType': 'DefaultCapacityType', + 'kubectlLambdaRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'bootstrapClusterCreatorAdminPermissions': '*', + 'tags': '*', + 'mastersRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'coreDnsComputeType': 'CoreDnsComputeType', + 'outputMastersRoleArn': '*', + 'endpointAccess': '*', + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'awscliLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kubectlMemory': '*', + 'clusterHandlerEnvironment': '*', + 'clusterHandlerSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'onEventLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'prune': '*', + 'placeClusterHandlerInVpc': '*', + 'secretsEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'ipFamily': 'IpFamily', + 'serviceIpv4Cidr': '*', + 'albController': { + 'version': '*', + 'repository': '*', + 'policy': '*' + }, + 'clusterLogging': 'ClusterLoggingTypes', + 'authenticationMode': 'AuthenticationMode', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'clusterName': '*', + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'version': '*', + 'outputClusterName': '*', + 'outputConfigCommand': '*' + }, + 'ImportedCluster': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clusterName': '*', + 'clusterEndpoint': '*', + 'clusterCertificateAuthorityData': '*', + 'clusterSecurityGroupId': '*', + 'clusterEncryptionConfigKeyArn': '*', + 'ipFamily': 'IpFamily', + 'securityGroupIds': '*', + 'kubectlRoleArn': '*', + 'kubectlLambdaRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kubectlEnvironment': '*', + 'kubectlSecurityGroupId': '*', + 'kubectlPrivateSubnetIds': '*', + 'openIdConnectProvider': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'awscliLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kubectlProvider': { + 'serviceToken': '*', + 'roleArn': '*', + 'handlerRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'kubectlMemory': '*', + 'clusterHandlerSecurityGroupId': '*', + 'onEventLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'prune': '*' + }, + 'FargateCluster': { + 'defaultProfile': { + 'fargateProfileName': '*', + 'podExecutionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'selectors': { + 'namespace': '*', + 'labels': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + } + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*' + } + }, + 'mastersRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'coreDnsComputeType': 'CoreDnsComputeType', + 'outputMastersRoleArn': '*', + 'endpointAccess': '*', + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'awscliLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kubectlMemory': '*', + 'clusterHandlerEnvironment': '*', + 'clusterHandlerSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'onEventLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'prune': '*', + 'placeClusterHandlerInVpc': '*', + 'secretsEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'ipFamily': 'IpFamily', + 'serviceIpv4Cidr': '*', + 'albController': { + 'version': '*', + 'repository': '*', + 'policy': '*' + }, + 'clusterLogging': 'ClusterLoggingTypes', + 'authenticationMode': 'AuthenticationMode', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'clusterName': '*', + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'version': '*', + 'outputClusterName': '*', + 'outputConfigCommand': '*' + }, + 'Nodegroup': { + 'cluster': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clusterName': '*', + 'clusterArn': '*', + 'clusterEndpoint': '*', + 'clusterCertificateAuthorityData': '*', + 'clusterSecurityGroupId': '*', + 'clusterSecurityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'clusterEncryptionConfigKeyArn': '*', + 'openIdConnectProvider': { + 'openIdConnectProviderArn': '*', + 'openIdConnectProviderIssuer': '*' + }, + 'eksPodIdentityAgent': { + 'addonName': '*', + 'addonArn': '*' + }, + 'kubectlRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + } + }, + 'kubectlEnvironment': '*', + 'kubectlLayer': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*' + }, + 'ipFamily': 'IpFamily', + 'kubectlProvider': { + 'serviceToken': '*', + 'roleArn': '*' + }, + 'kubectlMemory': '*', + 'prune': '*', + 'authenticationMode': 'AuthenticationMode' + }, + 'nodegroupName': '*', + 'subnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'amiType': 'NodegroupAmiType', + 'diskSize': '*', + 'desiredSize': '*', + 'maxSize': '*', + 'minSize': '*', + 'forceUpdate': '*', + 'instanceType': '*', + 'instanceTypes': '*', + 'labels': '*', + 'taints': { + 'effect': 'TaintEffect', + 'key': '*', + 'value': '*' + }, + 'nodeRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'releaseVersion': '*', + 'remoteAccess': { + 'sshKeyName': '*', + 'sourceSecurityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + } + }, + 'tags': '*', + 'launchTemplateSpec': { + 'id': '*', + 'version': '*' + }, + 'capacityType': 'CapacityType', + 'maxUnavailable': '*', + 'maxUnavailablePercentage': '*' + }, + 'OpenIdConnectProvider': { + 'url': '*' + } + }, + 'aws-cdk-lib.aws-elasticloadbalancing': { + 'LoadBalancer': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'internetFacing': '*', + 'listeners': { + 'externalPort': '*', + 'externalProtocol': 'LoadBalancingProtocol', + 'internalPort': '*', + 'internalProtocol': 'LoadBalancingProtocol', + 'policyNames': '*', + 'sslCertificateId': '*', + 'sslCertificateArn': '*', + 'allowConnectionsFrom': { + 'connections': '*' + } + }, + 'targets': { + 'connections': '*' + }, + 'healthCheck': { + 'port': '*', + 'protocol': 'LoadBalancingProtocol', + 'path': '*', + 'healthyThreshold': '*', + 'unhealthyThreshold': '*', + 'interval': '*' + }, + 'crossZone': '*', + 'subnetSelection': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'accessLoggingPolicy': { + 'emitInterval': '*', + 'enabled': '*', + 's3BucketName': '*', + 's3BucketPrefix': '*' + } + } + }, + 'aws-cdk-lib.aws-elasticsearch': { + 'Domain': { + 'accessPolicies': '*', + 'advancedOptions': '*', + 'cognitoKibanaAuth': { + 'identityPoolId': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'userPoolId': '*' + }, + 'domainName': '*', + 'ebs': { + 'enabled': '*', + 'iops': '*', + 'volumeSize': '*', + 'volumeType': 'EbsDeviceVolumeType' + }, + 'capacity': { + 'masterNodes': '*', + 'masterNodeInstanceType': '*', + 'dataNodes': '*', + 'dataNodeInstanceType': '*', + 'warmNodes': '*', + 'warmInstanceType': '*' + }, + 'zoneAwareness': { + 'enabled': '*', + 'availabilityZoneCount': '*' + }, + 'version': '*', + 'encryptionAtRest': { + 'enabled': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'logging': { + 'slowSearchLogEnabled': '*', + 'slowSearchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'slowIndexLogEnabled': '*', + 'appLogEnabled': '*', + 'auditLogEnabled': '*' + }, + 'nodeToNodeEncryption': '*', + 'automatedSnapshotStartHour': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'enforceHttps': '*', + 'tlsSecurityPolicy': 'TLSSecurityPolicy', + 'fineGrainedAccessControl': { + 'masterUserArn': '*', + 'masterUserName': '*', + 'masterUserPassword': '*' + }, + 'useUnsignedBasicAuth': '*', + 'enableVersionUpgrade': '*', + 'removalPolicy': 'RemovalPolicy', + 'customEndpoint': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'hostedZone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*' + } + } + } + }, + 'aws-cdk-lib.aws-events': { + 'ApiDestination': { + 'apiDestinationName': '*', + 'description': '*', + 'connection': { + 'connectionName': '*', + 'connectionArn': '*', + 'connectionSecretArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpoint': '*', + 'httpMethod': 'HttpMethod', + 'rateLimitPerSecond': '*' + }, + 'Archive': { + 'sourceEventBus': { + 'eventBusName': '*', + 'eventBusArn': '*', + 'eventBusPolicy': '*', + 'eventSourceName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'archiveName': '*', + 'description': '*', + 'eventPattern': { + 'version': '*', + 'id': '*', + 'detailType': '*', + 'source': '*', + 'account': '*', + 'time': '*', + 'region': '*', + 'resources': '*', + 'detail': '*' + }, + 'retention': '*' + }, + 'Connection': { + 'connectionName': '*', + 'description': '*', + 'authorization': '*', + 'bodyParameters': '*', + 'headerParameters': '*', + 'queryStringParameters': '*' + }, + 'ImportedConnection': { + 'connectionName': '*', + 'connectionArn': '*', + 'connectionSecretArn': '*' + }, + 'ImportedEventBus': { + 'eventBusName': '*', + 'eventBusArn': '*', + 'eventBusPolicy': '*', + 'eventSourceName': '*' + }, + 'EventBusPolicy': { + 'eventBus': { + 'eventBusName': '*', + 'eventBusArn': '*', + 'eventBusPolicy': '*', + 'eventSourceName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'statement': '*', + 'statementId': '*' + }, + 'Rule': { + 'enabled': '*', + 'schedule': '*', + 'targets': '*', + 'eventBus': { + 'eventBusName': '*', + 'eventBusArn': '*', + 'eventBusPolicy': '*', + 'eventSourceName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'description': '*', + 'ruleName': '*', + 'eventPattern': { + 'version': '*', + 'id': '*', + 'detailType': '*', + 'source': '*', + 'account': '*', + 'time': '*', + 'region': '*', + 'resources': '*', + 'detail': '*' + }, + 'crossStackScope': '*' + }, + 'MirrorRule': { + 'enabled': '*', + 'schedule': '*', + 'targets': '*', + 'eventBus': { + 'eventBusName': '*', + 'eventBusArn': '*', + 'eventBusPolicy': '*', + 'eventSourceName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'description': '*', + 'ruleName': '*', + 'eventPattern': { + 'version': '*', + 'id': '*', + 'detailType': '*', + 'source': '*', + 'account': '*', + 'time': '*', + 'region': '*', + 'resources': '*', + 'detail': '*' + }, + 'crossStackScope': '*' + } + }, + 'aws-cdk-lib.aws-fsx': { + 'LustreFileSystem': { + 'lustreConfiguration': { + 'deploymentType': 'LustreDeploymentType', + 'exportPath': '*', + 'importedFileChunkSizeMiB': '*', + 'importPath': '*', + 'autoImportPolicy': 'LustreAutoImportPolicy', + 'dataCompressionType': 'LustreDataCompressionType', + 'perUnitStorageThroughput': '*', + 'weeklyMaintenanceStartTime': '*', + 'automaticBackupRetention': '*', + 'copyTagsToBackups': '*', + 'dailyAutomaticBackupStartTime': '*', + 'driveCacheType': 'DriveCacheType' + }, + 'fileSystemTypeVersion': 'FileSystemTypeVersion', + 'vpcSubnet': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'backupId': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'storageCapacityGiB': '*', + 'removalPolicy': 'RemovalPolicy', + 'storageType': 'StorageType' + } + }, + 'aws-cdk-lib.aws-globalaccelerator': { + 'Accelerator': { + 'acceleratorName': '*', + 'enabled': '*', + 'ipAddresses': '*', + 'ipAddressType': 'IpAddressType' + }, + 'EndpointGroup': { + 'listener': { + 'listenerArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'endpointGroupName': '*', + 'region': '*', + 'healthCheckInterval': '*', + 'healthCheckPath': '*', + 'healthCheckPort': '*', + 'healthCheckProtocol': 'HealthCheckProtocol', + 'healthCheckThreshold': '*', + 'trafficDialPercentage': '*', + 'portOverrides': { + 'listenerPort': '*', + 'endpointPort': '*' + }, + 'endpoints': { + 'region': '*' + } + }, + 'Listener': { + 'accelerator': { + 'acceleratorArn': '*', + 'dnsName': '*', + 'dualStackDnsName': '*', + 'ipv4Addresses': '*', + 'ipv6Addresses': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'listenerName': '*', + 'portRanges': { + 'fromPort': '*', + 'toPort': '*' + }, + 'protocol': 'ConnectionProtocol', + 'clientAffinity': 'ClientAffinity' + } + }, + 'aws-cdk-lib.aws-iam': { + 'AccessKey': { + 'serial': '*', + 'status': 'AccessKeyStatus', + 'user': { + 'userName': '*', + 'userArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'Group': { + 'groupName': '*', + 'managedPolicies': { + 'managedPolicyArn': '*' + }, + 'path': '*' + }, + 'InstanceProfile': { + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'instanceProfileName': '*', + 'path': '*' + }, + 'LazyRole': { + 'assumedBy': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'externalId': '*', + 'externalIds': '*', + 'managedPolicies': { + 'managedPolicyArn': '*' + }, + 'inlinePolicies': '*', + 'path': '*', + 'permissionsBoundary': { + 'managedPolicyArn': '*' + }, + 'roleName': '*', + 'maxSessionDuration': '*', + 'description': '*' + }, + 'ManagedPolicy': { + 'managedPolicyName': '*', + 'description': '*', + 'path': '*', + 'users': { + 'userName': '*', + 'userArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'roles': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'groups': { + 'groupName': '*', + 'groupArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'statements': '*', + 'document': '*' + }, + 'OpenIdConnectProvider': { + 'url': '*', + 'clientIds': '*', + 'thumbprints': '*' + }, + 'Policy': { + 'policyName': '*', + 'users': { + 'userName': '*', + 'userArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'roles': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'groups': { + 'groupName': '*', + 'groupArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'statements': '*', + 'force': '*', + 'document': '*' + }, + 'Role': { + 'assumedBy': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'externalId': '*', + 'externalIds': '*', + 'managedPolicies': { + 'managedPolicyArn': '*' + }, + 'inlinePolicies': '*', + 'path': '*', + 'permissionsBoundary': { + 'managedPolicyArn': '*' + }, + 'roleName': '*', + 'maxSessionDuration': '*', + 'description': '*' + }, + 'SamlProvider': { + 'name': '*', + 'metadataDocument': '*' + }, + 'User': { + 'groups': { + 'groupName': '*', + 'groupArn': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'managedPolicies': { + 'managedPolicyArn': '*' + }, + 'path': '*', + 'permissionsBoundary': { + 'managedPolicyArn': '*' + }, + 'userName': '*', + 'password': '*', + 'passwordResetRequired': '*' + } + }, + 'aws-cdk-lib.aws-kinesis': { + 'ResourcePolicy': { + 'stream': { + 'streamArn': '*', + 'streamName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'policyDocument': '*' + }, + 'Stream': { + 'streamName': '*', + 'retentionPeriod': '*', + 'shardCount': '*', + 'encryption': 'StreamEncryption', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'streamMode': 'StreamMode', + 'removalPolicy': 'RemovalPolicy' + } + }, + 'aws-cdk-lib.aws-kms': { + 'Alias': { + 'aliasName': '*', + 'targetKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'removalPolicy': 'RemovalPolicy' + }, + 'Key': { + 'description': '*', + 'alias': '*', + 'enableKeyRotation': '*', + 'rotationPeriod': '*', + 'enabled': '*', + 'keySpec': 'KeySpec', + 'keyUsage': 'KeyUsage', + 'multiRegion': '*', + 'policy': '*', + 'admins': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'trustAccountIdentities': '*', + 'pendingWindow': '*' + } + }, + 'aws-cdk-lib.aws-lambda': { + 'Alias': { + 'aliasName': '*', + 'version': { + 'version': '*', + 'lambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'resourceArnsForGrantInvoke': '*' + }, + 'description': '*', + 'additionalVersions': { + 'version': { + 'version': '*', + 'lambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'resourceArnsForGrantInvoke': '*' + }, + 'weight': '*' + }, + 'provisionedConcurrentExecutions': '*', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'CodeSigningConfig': { + 'signingProfiles': { + 'signingProfileArn': '*', + 'signingProfileName': '*', + 'signingProfileVersion': '*', + 'signingProfileVersionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'untrustedArtifactOnDeployment': 'UntrustedArtifactOnDeployment', + 'description': '*' + }, + 'EventInvokeConfig': { + 'function': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'qualifier': '*', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'EventSourceMapping': { + 'target': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'eventSourceArn': '*', + 'batchSize': '*', + 'bisectBatchOnError': '*', + 'onFailure': '*', + 'enabled': '*', + 'startingPosition': 'StartingPosition', + 'startingPositionTimestamp': '*', + 'reportBatchItemFailures': '*', + 'maxBatchingWindow': '*', + 'maxConcurrency': '*', + 'maxRecordAge': '*', + 'retryAttempts': '*', + 'parallelizationFactor': '*', + 'kafkaTopic': '*', + 'tumblingWindow': '*', + 'kafkaBootstrapServers': '*', + 'kafkaConsumerGroupId': '*', + 'sourceAccessConfigurations': { + 'type': '*', + 'uri': '*' + }, + 'filters': '*', + 'filterEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'supportS3OnFailureDestination': '*', + 'provisionedPollerConfig': { + 'minimumPollers': '*', + 'maximumPollers': '*' + }, + 'metricsConfig': { + 'metrics': 'MetricType' + } + }, + 'FunctionUrl': { + 'function': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'authType': 'FunctionUrlAuthType', + 'cors': { + 'allowCredentials': '*', + 'allowedHeaders': '*', + 'allowedMethods': 'HttpMethod', + 'allowedOrigins': '*', + 'exposedHeaders': '*', + 'maxAge': '*' + }, + 'invokeMode': 'InvokeMode' + }, + 'Function': { + 'runtime': '*', + 'code': '*', + 'handler': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'DockerImageFunction': { + 'code': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'Version': { + 'lambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'LayerVersion': { + 'compatibleRuntimes': '*', + 'compatibleArchitectures': '*', + 'code': '*', + 'description': '*', + 'license': '*', + 'layerVersionName': '*', + 'removalPolicy': 'RemovalPolicy' + }, + 'SingletonFunction': { + 'uuid': '*', + 'lambdaPurpose': '*', + 'runtime': '*', + 'code': '*', + 'handler': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + } + }, + 'aws-cdk-lib.aws-lambda-nodejs': { + 'NodejsFunction': { + 'entry': '*', + 'handler': '*', + 'runtime': '*', + 'awsSdkConnectionReuse': '*', + 'depsLockFilePath': '*', + 'bundling': { + 'minify': '*', + 'sourceMap': '*', + 'sourceMapMode': 'SourceMapMode', + 'sourcesContent': '*', + 'target': '*', + 'loader': '*', + 'logLevel': 'LogLevel', + 'keepNames': '*', + 'tsconfig': '*', + 'metafile': '*', + 'banner': '*', + 'footer': '*', + 'charset': 'Charset', + 'define': '*', + 'externalModules': '*', + 'bundleAwsSDK': '*', + 'nodeModules': '*', + 'esbuildVersion': '*', + 'esbuildArgs': '*', + 'buildArgs': '*', + 'forceDockerBundling': '*', + 'preCompilation': '*', + 'dockerImage': '*', + 'commandHooks': '*', + 'assetHash': '*', + 'format': 'OutputFormat', + 'mainFields': '*', + 'inject': '*', + 'bundlingFileAccess': 'BundlingFileAccess', + 'entrypoint': '*', + 'command': '*', + 'volumes': { + 'hostPath': '*', + 'containerPath': '*', + 'consistency': 'DockerVolumeConsistency' + }, + 'volumesFrom': '*', + 'environment': '*', + 'workingDirectory': '*', + 'user': '*', + 'securityOpt': '*', + 'network': '*', + 'platform': '*' + }, + 'projectRoot': '*', + 'code': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + } + }, + 'aws-cdk-lib.aws-logs': { + 'CrossAccountDestination': { + 'destinationName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'targetArn': '*' + }, + 'LogGroup': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logGroupName': '*', + 'dataProtectionPolicy': '*', + 'retention': 'RetentionDays', + 'logGroupClass': 'LogGroupClass', + 'removalPolicy': 'RemovalPolicy' + }, + 'LogStream': { + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamName': '*', + 'removalPolicy': 'RemovalPolicy' + }, + 'MetricFilter': { + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'filterPattern': { + 'logPatternString': '*' + }, + 'metricNamespace': '*', + 'metricName': '*', + 'metricValue': '*', + 'defaultValue': '*', + 'dimensions': '*', + 'unit': 'Unit', + 'filterName': '*' + }, + 'QueryDefinition': { + 'queryDefinitionName': '*', + 'queryString': '*', + 'logGroups': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'SubscriptionFilter': { + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'destination': '*', + 'filterPattern': { + 'logPatternString': '*' + }, + 'filterName': '*', + 'distribution': 'Distribution' + } + }, + 'aws-cdk-lib.aws-opensearchservice': { + 'Domain': { + 'accessPolicies': '*', + 'advancedOptions': '*', + 'cognitoDashboardsAuth': { + 'identityPoolId': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'userPoolId': '*' + }, + 'domainName': '*', + 'ebs': { + 'enabled': '*', + 'iops': '*', + 'throughput': '*', + 'volumeSize': '*', + 'volumeType': 'EbsDeviceVolumeType' + }, + 'capacity': { + 'masterNodes': '*', + 'masterNodeInstanceType': '*', + 'dataNodes': '*', + 'dataNodeInstanceType': '*', + 'warmNodes': '*', + 'warmInstanceType': '*', + 'multiAzWithStandbyEnabled': '*' + }, + 'zoneAwareness': { + 'enabled': '*', + 'availabilityZoneCount': '*' + }, + 'version': '*', + 'encryptionAtRest': { + 'enabled': '*', + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'logging': { + 'slowSearchLogEnabled': '*', + 'slowSearchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'slowIndexLogEnabled': '*', + 'appLogEnabled': '*', + 'auditLogEnabled': '*' + }, + 'nodeToNodeEncryption': '*', + 'automatedSnapshotStartHour': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'enforceHttps': '*', + 'tlsSecurityPolicy': 'TLSSecurityPolicy', + 'fineGrainedAccessControl': { + 'masterUserArn': '*', + 'masterUserName': '*', + 'masterUserPassword': '*', + 'samlAuthenticationEnabled': '*', + 'samlAuthenticationOptions': { + 'idpEntityId': '*', + 'idpMetadataContent': '*', + 'masterUserName': '*', + 'masterBackendRole': '*', + 'rolesKey': '*', + 'subjectKey': '*', + 'sessionTimeoutMinutes': '*' + } + }, + 'useUnsignedBasicAuth': '*', + 'enableVersionUpgrade': '*', + 'removalPolicy': 'RemovalPolicy', + 'customEndpoint': { + 'domainName': '*', + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'hostedZone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*' + } + }, + 'offPeakWindowEnabled': '*', + 'offPeakWindowStart': { + 'hours': '*', + 'minutes': '*' + }, + 'enableAutoSoftwareUpdate': '*', + 'ipAddressType': 'IpAddressType', + 'suppressLogsResourcePolicy': '*', + 'coldStorageEnabled': '*' + } + }, + 'aws-cdk-lib.aws-rds': { + 'AuroraClusterInstance': { + 'cluster': { + 'clusterIdentifier': '*', + 'clusterResourceIdentifier': '*', + 'instanceIdentifiers': '*', + 'clusterEndpoint': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'clusterArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'instanceType': '*', + 'promotionTier': '*', + 'instanceIdentifier': '*', + 'autoMinorVersionUpgrade': '*', + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'publiclyAccessible': '*', + 'preferredMaintenanceWindow': '*', + 'parameters': '*', + 'allowMajorVersionUpgrade': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isFromLegacyInstanceProps': '*', + 'caCertificate': '*', + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'removalPolicy': 'RemovalPolicy', + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'ImportedDatabaseCluster': { + 'clusterIdentifier': '*', + 'clusterResourceIdentifier': '*', + 'port': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'instanceIdentifiers': '*', + 'clusterEndpointAddress': '*', + 'readerEndpointAddress': '*', + 'instanceEndpointAddresses': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'secret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'dataApiEnabled': '*' + }, + 'DatabaseCluster': { + 'credentials': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'instances': '*', + 'instanceProps': { + 'instanceType': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'parameterGroup': '*', + 'parameters': '*', + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'allowMajorVersionUpgrade': '*', + 'deleteAutomatedBackups': '*', + 'publiclyAccessible': '*', + 'preferredMaintenanceWindow': '*' + }, + 'writer': '*', + 'readers': '*', + 'serverlessV2MaxCapacity': '*', + 'serverlessV2MinCapacity': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'instanceUpdateBehaviour': 'InstanceUpdateBehaviour', + 'backtrackWindow': '*', + 'backup': { + 'retention': '*', + 'preferredWindow': '*' + }, + 'port': '*', + 'clusterIdentifier': '*', + 'instanceIdentifierBase': '*', + 'defaultDatabaseName': '*', + 'deletionProtection': '*', + 'preferredMaintenanceWindow': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'parameters': '*', + 'removalPolicy': 'RemovalPolicy', + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enableClusterLevelEnhancedMonitoring': '*', + 's3ImportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3ExportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ExportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'iamAuthentication': '*', + 'storageEncrypted': '*', + 'storageEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'storageType': 'DBClusterStorageType', + 'copyTagsToSnapshot': '*', + 'networkType': 'NetworkType', + 'domain': '*', + 'domainRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enableDataApi': '*', + 'enableLocalWriteForwarding': '*', + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'clusterScalabilityType': 'ClusterScalabilityType', + 'clusterScailabilityType': 'ClusterScailabilityType' + }, + 'DatabaseClusterFromSnapshot': { + 'snapshotIdentifier': '*', + 'credentials': '*', + 'snapshotCredentials': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'instances': '*', + 'instanceProps': { + 'instanceType': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'parameterGroup': '*', + 'parameters': '*', + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'allowMajorVersionUpgrade': '*', + 'deleteAutomatedBackups': '*', + 'publiclyAccessible': '*', + 'preferredMaintenanceWindow': '*' + }, + 'writer': '*', + 'readers': '*', + 'serverlessV2MaxCapacity': '*', + 'serverlessV2MinCapacity': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'instanceUpdateBehaviour': 'InstanceUpdateBehaviour', + 'backtrackWindow': '*', + 'backup': { + 'retention': '*', + 'preferredWindow': '*' + }, + 'port': '*', + 'clusterIdentifier': '*', + 'instanceIdentifierBase': '*', + 'defaultDatabaseName': '*', + 'deletionProtection': '*', + 'preferredMaintenanceWindow': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'parameters': '*', + 'removalPolicy': 'RemovalPolicy', + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enableClusterLevelEnhancedMonitoring': '*', + 's3ImportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3ExportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ExportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'iamAuthentication': '*', + 'storageEncrypted': '*', + 'storageEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'storageType': 'DBClusterStorageType', + 'copyTagsToSnapshot': '*', + 'networkType': 'NetworkType', + 'domain': '*', + 'domainRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enableDataApi': '*', + 'enableLocalWriteForwarding': '*', + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'clusterScalabilityType': 'ClusterScalabilityType', + 'clusterScailabilityType': 'ClusterScailabilityType' + }, + 'DatabaseSecret': { + 'username': '*', + 'dbname': '*', + 'secretName': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'masterSecret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'excludeCharacters': '*', + 'replaceOnPasswordCriteriaChanges': '*', + 'replicaRegions': { + 'region': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'DatabaseInstance': { + 'credentials': '*', + 'characterSetName': '*', + 'storageEncrypted': '*', + 'storageEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'engine': { + 'singleUserRotationApplication': '*', + 'supportsReadReplicaBackups': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'instanceType': '*', + 'licenseModel': 'LicenseModel', + 'allowMajorVersionUpgrade': '*', + 'timezone': '*', + 'allocatedStorage': '*', + 'databaseName': '*', + 'parameters': '*', + 'multiAz': '*', + 'availabilityZone': '*', + 'storageType': 'StorageType', + 'storageThroughput': '*', + 'iops': '*', + 'processorFeatures': { + 'coreCount': '*', + 'threadsPerCore': '*' + }, + 'instanceIdentifier': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcPlacement': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'port': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'optionGroup': { + 'optionGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'iamAuthentication': '*', + 'backupRetention': '*', + 'preferredBackupWindow': '*', + 'copyTagsToSnapshot': '*', + 'deleteAutomatedBackups': '*', + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'preferredMaintenanceWindow': '*', + 'deletionProtection': '*', + 'removalPolicy': 'RemovalPolicy', + 'maxAllocatedStorage': '*', + 'domain': '*', + 'domainRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3ExportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ExportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'publiclyAccessible': '*', + 'networkType': 'NetworkType', + 'caCertificate': '*' + }, + 'DatabaseInstanceFromSnapshot': { + 'snapshotIdentifier': '*', + 'credentials': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportsReadReplicaBackups': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'instanceType': '*', + 'licenseModel': 'LicenseModel', + 'allowMajorVersionUpgrade': '*', + 'timezone': '*', + 'allocatedStorage': '*', + 'databaseName': '*', + 'parameters': '*', + 'multiAz': '*', + 'availabilityZone': '*', + 'storageType': 'StorageType', + 'storageThroughput': '*', + 'iops': '*', + 'processorFeatures': { + 'coreCount': '*', + 'threadsPerCore': '*' + }, + 'instanceIdentifier': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcPlacement': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'port': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'optionGroup': { + 'optionGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'iamAuthentication': '*', + 'backupRetention': '*', + 'preferredBackupWindow': '*', + 'copyTagsToSnapshot': '*', + 'deleteAutomatedBackups': '*', + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'preferredMaintenanceWindow': '*', + 'deletionProtection': '*', + 'removalPolicy': 'RemovalPolicy', + 'maxAllocatedStorage': '*', + 'domain': '*', + 'domainRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3ExportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ExportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'publiclyAccessible': '*', + 'networkType': 'NetworkType', + 'caCertificate': '*' + }, + 'DatabaseInstanceReadReplica': { + 'instanceType': '*', + 'sourceDatabaseInstance': { + 'instanceIdentifier': '*', + 'instanceArn': '*', + 'dbInstanceEndpointAddress': '*', + 'dbInstanceEndpointPort': '*', + 'instanceResourceId': '*', + 'instanceEndpoint': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportsReadReplicaBackups': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'connections': '*' + }, + 'storageEncrypted': '*', + 'storageEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'allocatedStorage': '*', + 'multiAz': '*', + 'availabilityZone': '*', + 'storageType': 'StorageType', + 'storageThroughput': '*', + 'iops': '*', + 'processorFeatures': { + 'coreCount': '*', + 'threadsPerCore': '*' + }, + 'instanceIdentifier': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcPlacement': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'port': '*', + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'optionGroup': { + 'optionGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'iamAuthentication': '*', + 'backupRetention': '*', + 'preferredBackupWindow': '*', + 'copyTagsToSnapshot': '*', + 'deleteAutomatedBackups': '*', + 'monitoringInterval': '*', + 'monitoringRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enablePerformanceInsights': '*', + 'performanceInsightRetention': 'PerformanceInsightRetention', + 'performanceInsightEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'cloudwatchLogsExports': '*', + 'cloudwatchLogsRetention': 'RetentionDays', + 'cloudwatchLogsRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'autoMinorVersionUpgrade': '*', + 'preferredMaintenanceWindow': '*', + 'deletionProtection': '*', + 'removalPolicy': 'RemovalPolicy', + 'maxAllocatedStorage': '*', + 'domain': '*', + 'domainRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ImportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3ExportRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 's3ExportBuckets': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'publiclyAccessible': '*', + 'networkType': 'NetworkType', + 'caCertificate': '*' + }, + 'OptionGroup': { + 'engine': { + 'singleUserRotationApplication': '*', + 'supportsReadReplicaBackups': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'description': '*', + 'configurations': { + 'name': '*', + 'settings': '*', + 'version': '*', + 'port': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + } + } + }, + 'ParameterGroup': { + 'engine': { + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'name': '*', + 'description': '*', + 'parameters': '*', + 'removalPolicy': 'RemovalPolicy' + }, + 'DatabaseProxy': { + 'proxyTarget': '*', + 'dbProxyName': '*', + 'borrowTimeout': '*', + 'initQuery': '*', + 'maxConnectionsPercent': '*', + 'maxIdleConnectionsPercent': '*', + 'sessionPinningFilters': '*', + 'debugLogging': '*', + 'iamAuth': '*', + 'idleClientTimeout': '*', + 'requireTLS': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secrets': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'clientPasswordAuthType': 'ClientPasswordAuthType' + }, + 'ServerlessCluster': { + 'credentials': '*', + 'storageEncryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'clusterIdentifier': '*', + 'backupRetention': '*', + 'defaultDatabaseName': '*', + 'deletionProtection': '*', + 'enableDataApi': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'scaling': { + 'minCapacity': 'AuroraCapacityUnit', + 'maxCapacity': 'AuroraCapacityUnit', + 'autoPause': '*', + 'timeoutAction': 'TimeoutAction' + }, + 'removalPolicy': 'RemovalPolicy', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'copyTagsToSnapshot': '*' + }, + 'ImportedServerlessCluster': { + 'clusterIdentifier': '*', + 'port': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'clusterEndpointAddress': '*', + 'readerEndpointAddress': '*', + 'secret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + } + }, + 'ServerlessClusterFromSnapshot': { + 'snapshotIdentifier': '*', + 'credentials': '*', + 'engine': { + 'singleUserRotationApplication': '*', + 'supportedLogTypes': '*', + 'combineImportAndExportRoles': '*', + 'engineType': '*', + 'engineVersion': { + 'fullVersion': '*', + 'majorVersion': '*' + }, + 'parameterGroupFamily': '*', + 'engineFamily': '*', + 'defaultUsername': '*' + }, + 'clusterIdentifier': '*', + 'backupRetention': '*', + 'defaultDatabaseName': '*', + 'deletionProtection': '*', + 'enableDataApi': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'scaling': { + 'minCapacity': 'AuroraCapacityUnit', + 'maxCapacity': 'AuroraCapacityUnit', + 'autoPause': '*', + 'timeoutAction': 'TimeoutAction' + }, + 'removalPolicy': 'RemovalPolicy', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'parameterGroup': { + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'subnetGroup': { + 'subnetGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'copyTagsToSnapshot': '*' + }, + 'SubnetGroup': { + 'description': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'subnetGroupName': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'removalPolicy': 'RemovalPolicy' + } + }, + 'aws-cdk-lib.aws-route53': { + 'HealthCheck': { + 'type': 'HealthCheckType', + 'alarmIdentifier': { + 'region': '*', + 'name': '*' + }, + 'childHealthChecks': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enableSNI': '*', + 'failureThreshold': '*', + 'fqdn': '*', + 'healthThreshold': '*', + 'insufficientDataHealthStatus': 'InsufficientDataHealthStatusEnum', + 'inverted': '*', + 'ipAddress': '*', + 'measureLatency': '*', + 'port': '*', + 'regions': '*', + 'requestInterval': '*', + 'resourcePath': '*', + 'routingControl': '*', + 'searchString': '*' + }, + 'HostedZone': { + 'vpcs': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'zoneName': '*', + 'addTrailingDot': '*', + 'comment': '*', + 'queryLogsLogGroupArn': '*' + }, + 'PublicHostedZone': { + 'caaAmazon': '*', + 'crossAccountZoneDelegationPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'crossAccountZoneDelegationRoleName': '*', + 'zoneName': '*', + 'addTrailingDot': '*', + 'comment': '*', + 'queryLogsLogGroupArn': '*' + }, + 'PrivateHostedZone': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'zoneName': '*', + 'addTrailingDot': '*', + 'comment': '*', + 'queryLogsLogGroupArn': '*' + }, + 'KeySigningKey': { + 'hostedZone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'keySigningKeyName': '*', + 'status': 'KeySigningKeyStatus' + }, + 'RecordSet': { + 'recordType': 'RecordType', + 'target': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'ARecord': { + 'target': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'AaaaRecord': { + 'target': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'CnameRecord': { + 'domainName': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'TxtRecord': { + 'values': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'SrvRecord': { + 'values': { + 'priority': '*', + 'weight': '*', + 'port': '*', + 'hostName': '*' + }, + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'CaaRecord': { + 'values': { + 'flag': '*', + 'tag': 'CaaTag', + 'value': '*' + }, + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'CaaAmazonRecord': { + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'MxRecord': { + 'values': { + 'priority': '*', + 'hostName': '*' + }, + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'NsRecord': { + 'values': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'DsRecord': { + 'values': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'ZoneDelegationRecord': { + 'nameServers': '*', + 'zone': { + 'hostedZoneId': '*', + 'zoneName': '*', + 'hostedZoneArn': '*', + 'hostedZoneNameServers': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'geoLocation': '*', + 'recordName': '*', + 'ttl': '*', + 'comment': '*', + 'deleteExisting': '*', + 'weight': '*', + 'region': '*', + 'multiValueAnswer': '*', + 'setIdentifier': '*', + 'healthCheck': { + 'healthCheckId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'aws-cdk-lib.aws-s3': { + 'BucketPolicy': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'removalPolicy': 'RemovalPolicy' + }, + 'Bucket': { + 'encryption': 'BucketEncryption', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enforceSSL': '*', + 'bucketKeyEnabled': '*', + 'bucketName': '*', + 'removalPolicy': 'RemovalPolicy', + 'autoDeleteObjects': '*', + 'versioned': '*', + 'objectLockEnabled': '*', + 'objectLockDefaultRetention': '*', + 'eventBridgeEnabled': '*', + 'lifecycleRules': { + 'id': '*', + 'enabled': '*', + 'abortIncompleteMultipartUploadAfter': '*', + 'expirationDate': '*', + 'noncurrentVersionsToRetain': '*', + 'noncurrentVersionTransitions': { + 'storageClass': '*', + 'noncurrentVersionsToRetain': '*' + }, + 'transitions': '*', + 'prefix': '*', + 'tagFilters': '*', + 'expiredObjectDeleteMarker': '*', + 'objectSizeLessThan': '*', + 'objectSizeGreaterThan': '*' + }, + 'transitionDefaultMinimumObjectSize': 'TransitionDefaultMinimumObjectSize', + 'websiteIndexDocument': '*', + 'websiteErrorDocument': '*', + 'websiteRedirect': { + 'hostName': '*', + 'protocol': 'RedirectProtocol' + }, + 'websiteRoutingRules': { + 'hostName': '*', + 'httpRedirectCode': '*', + 'protocol': 'RedirectProtocol', + 'replaceKey': '*', + 'condition': { + 'httpErrorCodeReturnedEquals': '*', + 'keyPrefixEquals': '*' + } + }, + 'accessControl': 'BucketAccessControl', + 'publicReadAccess': '*', + 'blockPublicAccess': '*', + 'metrics': { + 'id': '*', + 'prefix': '*', + 'tagFilters': '*' + }, + 'cors': { + 'id': '*', + 'maxAge': '*', + 'allowedHeaders': '*', + 'allowedMethods': 'HttpMethods', + 'allowedOrigins': '*', + 'exposedHeaders': '*' + }, + 'serverAccessLogsBucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'serverAccessLogsPrefix': '*', + 'targetObjectKeyFormat': '*', + 'inventories': { + 'destination': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'bucketOwner': '*' + }, + 'objectsPrefix': '*', + 'format': 'InventoryFormat', + 'enabled': '*', + 'inventoryId': '*', + 'frequency': 'InventoryFrequency', + 'includeObjectVersions': 'InventoryObjectVersion', + 'optionalFields': '*' + }, + 'objectOwnership': 'ObjectOwnership', + 'transferAcceleration': '*', + 'notificationsHandlerRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'notificationsSkipDestinationValidation': '*', + 'intelligentTieringConfigurations': { + 'name': '*', + 'prefix': '*', + 'tags': { + 'key': '*', + 'value': '*' + }, + 'archiveAccessTierTime': '*' + }, + 'minimumTLSVersion': '*', + 'replicationRules': { + 'destination': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'accessControlTransition': '*', + 'replicationTimeControl': '*', + 'storageClass': '*', + 'sseKmsEncryptedObjects': '*', + 'replicaModifications': '*', + 'priority': '*', + 'deleteMarkerReplication': '*', + 'id': '*', + 'filter': { + 'prefix': '*', + 'tags': { + 'key': '*', + 'value': '*' + } + } + } + } + }, + 'aws-cdk-lib.aws-secretsmanager': { + 'ResourcePolicy': { + 'secret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + } + }, + 'RotationSchedule': { + 'secret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'rotationLambda': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'hostedRotation': '*', + 'automaticallyAfter': '*', + 'rotateImmediatelyOnUpdate': '*' + }, + 'Secret': { + 'description': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'generateSecretString': { + 'excludeUppercase': '*', + 'requireEachIncludedType': '*', + 'includeSpace': '*', + 'excludeCharacters': '*', + 'passwordLength': '*', + 'excludePunctuation': '*', + 'excludeLowercase': '*', + 'excludeNumbers': '*', + 'secretStringTemplate': '*', + 'generateStringKey': '*' + }, + 'secretName': '*', + 'secretStringBeta1': '*', + 'secretStringValue': '*', + 'secretObjectValue': '*', + 'removalPolicy': 'RemovalPolicy', + 'replicaRegions': { + 'region': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'SecretTargetAttachment': { + 'secret': { + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'secretArn': '*', + 'secretFullArn': '*', + 'secretName': '*', + 'secretValue': '*' + }, + 'target': '*' + } + }, + 'aws-cdk-lib.aws-servicecatalog': { + 'Portfolio': { + 'displayName': '*', + 'providerName': '*', + 'messageLanguage': 'MessageLanguage', + 'description': '*', + 'tagOptions': '*' + }, + 'CloudFormationProduct': { + 'owner': '*', + 'productName': '*', + 'productVersions': { + 'description': '*', + 'validateTemplate': '*', + 'cloudFormationTemplate': '*', + 'productVersionName': '*' + }, + 'messageLanguage': 'MessageLanguage', + 'description': '*', + 'distributor': '*', + 'replaceProductVersionIds': '*', + 'supportDescription': '*', + 'supportEmail': '*', + 'supportUrl': '*', + 'tagOptions': '*' + }, + 'TagOptions': { + 'allowedValuesForTags': '*' + } + }, + 'aws-cdk-lib.aws-servicediscovery': { + 'AliasTargetInstance': { + 'dnsName': '*', + 'service': { + 'serviceName': '*', + 'namespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serviceId': '*', + 'serviceArn': '*', + 'dnsRecordType': 'DnsRecordType', + 'routingPolicy': 'RoutingPolicy', + 'discoveryType': 'DiscoveryType' + }, + 'instanceId': '*', + 'customAttributes': '*' + }, + 'CnameInstance': { + 'service': { + 'serviceName': '*', + 'namespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serviceId': '*', + 'serviceArn': '*', + 'dnsRecordType': 'DnsRecordType', + 'routingPolicy': 'RoutingPolicy', + 'discoveryType': 'DiscoveryType' + }, + 'instanceCname': '*', + 'instanceId': '*', + 'customAttributes': '*' + }, + 'HttpNamespace': { + 'name': '*', + 'description': '*' + }, + 'IpInstance': { + 'service': { + 'serviceName': '*', + 'namespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serviceId': '*', + 'serviceArn': '*', + 'dnsRecordType': 'DnsRecordType', + 'routingPolicy': 'RoutingPolicy', + 'discoveryType': 'DiscoveryType' + }, + 'port': '*', + 'ipv4': '*', + 'ipv6': '*', + 'instanceId': '*', + 'customAttributes': '*' + }, + 'NonIpInstance': { + 'service': { + 'serviceName': '*', + 'namespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'serviceId': '*', + 'serviceArn': '*', + 'dnsRecordType': 'DnsRecordType', + 'routingPolicy': 'RoutingPolicy', + 'discoveryType': 'DiscoveryType' + }, + 'instanceId': '*', + 'customAttributes': '*' + }, + 'PrivateDnsNamespace': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'name': '*', + 'description': '*' + }, + 'PublicDnsNamespace': { + 'name': '*', + 'description': '*' + }, + 'Service': { + 'namespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'discoveryType': 'DiscoveryType', + 'dnsRecordType': 'DnsRecordType', + 'dnsTtl': '*', + 'routingPolicy': 'RoutingPolicy', + 'loadBalancer': '*', + 'name': '*', + 'description': '*', + 'healthCheck': { + 'type': 'HealthCheckType', + 'resourcePath': '*', + 'failureThreshold': '*' + }, + 'customHealthCheck': { + 'failureThreshold': '*' + } + } + }, + 'aws-cdk-lib.aws-ses': { + 'ConfigurationSetEventDestination': { + 'configurationSet': { + 'configurationSetName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'configurationSetEventDestinationName': '*', + 'enabled': '*', + 'destination': '*', + 'events': 'EmailSendingEvent' + }, + 'ConfigurationSet': { + 'configurationSetName': '*', + 'dedicatedIpPool': { + 'dedicatedIpPoolName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tlsPolicy': 'ConfigurationSetTlsPolicy', + 'reputationMetrics': '*', + 'sendingEnabled': '*', + 'suppressionReasons': 'SuppressionReasons', + 'disableSuppressionList': '*', + 'customTrackingRedirectDomain': '*', + 'vdmOptions': { + 'engagementMetrics': '*', + 'optimizedSharedDelivery': '*' + }, + 'maxDeliveryDuration': '*' + }, + 'DedicatedIpPool': { + 'dedicatedIpPoolName': '*', + 'scalingMode': 'ScalingMode' + }, + 'EmailIdentity': { + 'identity': '*', + 'configurationSet': { + 'configurationSetName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dkimSigning': '*', + 'dkimIdentity': '*', + 'feedbackForwarding': '*', + 'mailFromDomain': '*', + 'mailFromBehaviorOnMxFailure': 'MailFromBehaviorOnMxFailure' + }, + 'ReceiptFilter': { + 'receiptFilterName': '*', + 'ip': '*', + 'policy': 'ReceiptFilterPolicy' + }, + 'ReceiptRuleSet': { + 'receiptRuleSetName': '*', + 'rules': { + 'actions': '*', + 'after': { + 'receiptRuleName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*', + 'receiptRuleName': '*', + 'recipients': '*', + 'scanEnabled': '*', + 'tlsPolicy': 'TlsPolicy' + }, + 'dropSpam': '*' + }, + 'ReceiptRule': { + 'ruleSet': { + 'receiptRuleSetName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'actions': '*', + 'after': { + 'receiptRuleName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'enabled': '*', + 'receiptRuleName': '*', + 'recipients': '*', + 'scanEnabled': '*', + 'tlsPolicy': 'TlsPolicy' + }, + 'VdmAttributes': { + 'engagementMetrics': '*', + 'optimizedSharedDelivery': '*' + } + }, + 'aws-cdk-lib.aws-signer': { + 'SigningProfile': { + 'platform': '*', + 'signatureValidity': '*', + 'signingProfileName': '*' + } + }, + 'aws-cdk-lib.aws-sns': { + 'TopicPolicy': { + 'topics': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policyDocument': '*', + 'enforceSSL': '*' + }, + 'Subscription': { + 'topic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'protocol': 'SubscriptionProtocol', + 'endpoint': '*', + 'rawMessageDelivery': '*', + 'filterPolicy': '*', + 'filterPolicyWithMessageBody': '*', + 'region': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'subscriptionRoleArn': '*', + 'deliveryPolicy': { + 'healthyRetryPolicy': { + 'minDelayTarget': '*', + 'numRetries': '*', + 'numNoDelayRetries': '*', + 'numMinDelayRetries': '*', + 'numMaxDelayRetries': '*', + 'backoffFunction': 'BackoffFunction' + }, + 'throttlePolicy': { + 'maxReceivesPerSecond': '*' + }, + 'requestPolicy': { + 'headerContentType': '*' + } + } + }, + 'Topic': { + 'displayName': '*', + 'topicName': '*', + 'masterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'loggingConfigs': { + 'protocol': 'LoggingProtocol', + 'failureFeedbackRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'successFeedbackSampleRate': '*' + }, + 'messageRetentionPeriodInDays': '*', + 'enforceSSL': '*', + 'signatureVersion': '*', + 'tracingConfig': 'TracingConfig' + } + }, + 'aws-cdk-lib.aws-sqs': { + 'QueuePolicy': { + 'queues': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + } + }, + 'Queue': { + 'queueName': '*', + 'retentionPeriod': '*', + 'deliveryDelay': '*', + 'maxMessageSizeBytes': '*', + 'receiveMessageWaitTime': '*', + 'visibilityTimeout': '*', + 'deadLetterQueue': { + 'queue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'maxReceiveCount': '*' + }, + 'encryption': 'QueueEncryption', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dataKeyReuse': '*', + 'fifo': '*', + 'contentBasedDeduplication': '*', + 'deduplicationScope': 'DeduplicationScope', + 'fifoThroughputLimit': 'FifoThroughputLimit', + 'removalPolicy': 'RemovalPolicy', + 'enforceSSL': '*', + 'redriveAllowPolicy': { + 'redrivePermission': 'RedrivePermission', + 'sourceQueues': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + } + } + } + }, + 'aws-cdk-lib.aws-ssm': { + 'StringParameter': { + 'stringValue': '*', + 'type': 'ParameterType', + 'dataType': 'ParameterDataType', + 'allowedPattern': '*', + 'description': '*', + 'parameterName': '*', + 'simpleName': '*', + 'tier': 'ParameterTier' + }, + 'StringListParameter': { + 'stringListValue': '*', + 'allowedPattern': '*', + 'description': '*', + 'parameterName': '*', + 'simpleName': '*', + 'tier': 'ParameterTier' + } + }, + 'aws-cdk-lib.aws-stepfunctions': { + 'Activity': { + 'activityName': '*', + 'encryptionConfiguration': '*' + }, + 'StateMachine': { + 'stateMachineName': '*', + 'definition': { + 'id': '*', + 'startState': '*', + 'endStates': '*' + }, + 'definitionBody': '*', + 'definitionSubstitutions': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'timeout': '*', + 'comment': '*', + 'stateMachineType': 'StateMachineType', + 'logs': { + 'destination': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'includeExecutionData': '*', + 'level': 'LogLevel' + }, + 'tracingEnabled': '*', + 'removalPolicy': 'RemovalPolicy', + 'encryptionConfiguration': '*' + } + }, + 'aws-cdk-lib.aws-synthetics': { + 'Canary': { + 'artifactsBucketLocation': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*' + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'timeToLive': '*', + 'schedule': '*', + 'startAfterCreation': '*', + 'successRetentionPeriod': '*', + 'failureRetentionPeriod': '*', + 'canaryName': '*', + 'runtime': '*', + 'test': '*', + 'activeTracing': '*', + 'environmentVariables': '*', + 'memory': '*', + 'timeout': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'cleanup': 'Cleanup', + 'artifactsBucketLifecycleRules': { + 'id': '*', + 'enabled': '*', + 'abortIncompleteMultipartUploadAfter': '*', + 'expirationDate': '*', + 'noncurrentVersionsToRetain': '*', + 'noncurrentVersionTransitions': { + 'storageClass': '*', + 'noncurrentVersionsToRetain': '*' + }, + 'transitions': '*', + 'prefix': '*', + 'tagFilters': '*', + 'expiredObjectDeleteMarker': '*', + 'objectSizeLessThan': '*', + 'objectSizeGreaterThan': '*' + }, + 'artifactS3EncryptionMode': 'ArtifactsEncryptionMode', + 'artifactS3KmsKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'aws-cdk-lib.core': { + 'CustomResource': { + 'serviceToken': '*', + 'serviceTimeout': '*', + 'properties': '*', + 'resourceType': '*', + 'removalPolicy': 'RemovalPolicy', + 'pascalCaseProperties': '*' + } + }, + 'aws-cdk-lib.triggers': { + 'TriggerFunction': { + 'runtime': '*', + 'code': '*', + 'handler': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*', + 'executeAfter': '*', + 'executeBefore': '*', + 'executeOnHandlerChange': '*' + } + }, + 'aws-glue-alpha.lib': { + 'PySparkEtlJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'extraPythonFiles': '*', + 'extraFiles': '*', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'PySparkFlexEtlJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'notifyDelayAfter': '*', + 'extraPythonFiles': '*', + 'extraFiles': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'PySparkStreamingJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'extraPythonFiles': '*', + 'extraFiles': '*', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'PythonShellJob': { + 'pythonVersion': 'PythonVersion', + 'maxCapacity': 'MaxCapacity', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'RayJob': { + 'runtime': 'Runtime', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'ScalaSparkEtlJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'className': '*', + 'extraJars': '*', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'ScalaSparkFlexEtlJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'notifyDelayAfter': '*', + 'className': '*', + 'extraJars': '*', + 'extraJarsFirst': '*', + 'extraFiles': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + }, + 'ScalaSparkStreamingJob': { + 'sparkUI': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'prefix': '*', + 'jobRunQueuingEnabled': '*' + }, + 'className': '*', + 'extraJars': '*', + 'jobRunQueuingEnabled': '*', + 'script': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'jobName': '*', + 'description': '*', + 'numberOfWorkers': '*', + 'workerType': 'WorkerType', + 'maxConcurrentRuns': '*', + 'defaultArguments': '*', + 'connections': { + 'connectionName': '*', + 'connectionArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'maxRetries': '*', + 'timeout': '*', + 'securityConfiguration': { + 'securityConfigurationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tags': '*', + 'glueVersion': 'GlueVersion', + 'enableProfilingMetrics': '*', + 'continuousLogging': { + 'enabled': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logStreamPrefix': '*', + 'quiet': '*', + 'conversionPattern': '*' + } + } + }, + 'aws-apigateway.lib': { + 'CognitoUserPoolsAuthorizer': { + 'authorizerName': '*', + 'cognitoUserPools': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'resultsCacheTtl': '*', + 'identitySource': '*' + }, + 'TokenAuthorizer': { + 'validationRegex': '*', + 'identitySource': '*', + 'authorizerName': '*', + 'handler': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'resultsCacheTtl': '*', + 'assumeRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'RequestAuthorizer': { + 'identitySources': '*', + 'authorizerName': '*', + 'handler': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'resultsCacheTtl': '*', + 'assumeRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + } + }, + 'aws-apigatewayv2.lib': { + 'ApiMapping': { + 'apiMappingKey': '*', + 'api': { + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'domainName': { + 'name': '*', + 'regionalDomainName': '*', + 'regionalHostedZoneId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'stage': { + 'stageName': '*', + 'url': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'DomainName': { + 'domainName': '*', + 'mtls': { + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'certificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'certificateName': '*', + 'endpointType': 'EndpointType', + 'securityPolicy': 'SecurityPolicy', + 'ownershipCertificate': { + 'certificateArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'HttpAuthorizer': { + 'authorizerName': '*', + 'httpApi': { + 'defaultAuthorizer': '*', + 'defaultAuthorizationScopes': '*', + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'type': 'HttpAuthorizerType', + 'identitySource': '*', + 'jwtAudience': '*', + 'jwtIssuer': '*', + 'enableSimpleResponses': '*', + 'payloadFormatVersion': 'AuthorizerPayloadVersion', + 'authorizerUri': '*', + 'resultsCacheTtl': '*' + }, + 'HttpIntegration': { + 'httpApi': { + 'defaultAuthorizer': '*', + 'defaultAuthorizationScopes': '*', + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'integrationType': 'HttpIntegrationType', + 'integrationSubtype': 'HttpIntegrationSubtype', + 'integrationUri': '*', + 'method': 'HttpMethod', + 'connectionId': '*', + 'connectionType': 'HttpConnectionType', + 'payloadFormatVersion': '*', + 'secureServerName': '*', + 'timeout': '*', + 'parameterMapping': '*', + 'credentials': '*' + }, + 'HttpRoute': { + 'httpApi': { + 'defaultAuthorizer': '*', + 'defaultAuthorizationScopes': '*', + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'routeKey': '*', + 'authorizer': '*', + 'authorizationScopes': '*', + 'integration': '*' + }, + 'HttpStage': { + 'httpApi': { + 'defaultAuthorizer': '*', + 'defaultAuthorizationScopes': '*', + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'stageName': '*', + 'autoDeploy': '*', + 'domainMapping': { + 'domainName': { + 'name': '*', + 'regionalDomainName': '*', + 'regionalHostedZoneId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mappingKey': '*' + }, + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + }, + 'description': '*' + }, + 'VpcLink': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'vpcLinkName': '*', + 'subnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + } + }, + 'WebSocketAuthorizer': { + 'authorizerName': '*', + 'webSocketApi': { + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'type': 'WebSocketAuthorizerType', + 'identitySource': '*', + 'authorizerUri': '*' + }, + 'WebSocketIntegration': { + 'webSocketApi': { + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'integrationType': 'WebSocketIntegrationType', + 'integrationUri': '*', + 'integrationMethod': '*', + 'contentHandling': 'ContentHandling', + 'credentialsRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'requestParameters': '*', + 'requestTemplates': '*', + 'templateSelectionExpression': '*', + 'timeout': '*', + 'passthroughBehavior': 'PassthroughBehavior' + }, + 'WebSocketRoute': { + 'webSocketApi': { + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'routeKey': '*', + 'apiKeyRequired': '*', + 'integration': '*', + 'authorizer': '*', + 'returnResponse': '*' + }, + 'WebSocketStage': { + 'webSocketApi': { + 'apiId': '*', + 'apiEndpoint': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'stageName': '*', + 'autoDeploy': '*', + 'domainMapping': { + 'domainName': { + 'name': '*', + 'regionalDomainName': '*', + 'regionalHostedZoneId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'mappingKey': '*' + }, + 'throttle': { + 'rateLimit': '*', + 'burstLimit': '*' + }, + 'description': '*' + } + }, + 'aws-cloudfront.lib': { + 'EdgeFunction': { + 'stackId': '*', + 'runtime': '*', + 'code': '*', + 'handler': '*', + 'description': '*', + 'timeout': '*', + 'environment': '*', + 'functionName': '*', + 'memorySize': '*', + 'ephemeralStorageSize': '*', + 'initialPolicy': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipv6AllowedForDualStack': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'allowAllOutbound': '*', + 'allowAllIpv6Outbound': '*', + 'deadLetterQueueEnabled': '*', + 'deadLetterQueue': { + 'queueArn': '*', + 'queueUrl': '*', + 'queueName': '*', + 'encryptionMasterKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'fifo': '*', + 'encryptionType': 'QueueEncryption' + }, + 'deadLetterTopic': { + 'topicArn': '*', + 'topicName': '*', + 'contentBasedDeduplication': '*', + 'fifo': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'tracing': 'Tracing', + 'snapStart': '*', + 'profiling': '*', + 'profilingGroup': { + 'profilingGroupName': '*', + 'profilingGroupArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'insightsVersion': '*', + 'adotInstrumentation': { + 'layerVersion': '*', + 'execWrapper': 'AdotLambdaExecWrapper' + }, + 'paramsAndSecrets': '*', + 'layers': { + 'layerVersionArn': '*', + 'compatibleRuntimes': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'reservedConcurrentExecutions': '*', + 'events': '*', + 'logRetention': 'RetentionDays', + 'logRetentionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logRetentionRetryOptions': { + 'maxRetries': '*', + 'base': '*' + }, + 'currentVersionOptions': { + 'codeSha256': '*', + 'description': '*', + 'provisionedConcurrentExecutions': '*', + 'removalPolicy': 'RemovalPolicy', + 'onFailure': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + }, + 'filesystem': '*', + 'allowPublicSubnet': '*', + 'environmentEncryption': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'codeSigningConfig': { + 'codeSigningConfigArn': '*', + 'codeSigningConfigId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'architectures': '*', + 'architecture': '*', + 'runtimeManagementMode': '*', + 'logGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'logFormat': '*', + 'loggingFormat': 'LoggingFormat', + 'recursiveLoop': 'RecursiveLoop', + 'applicationLogLevel': '*', + 'applicationLogLevelV2': 'ApplicationLogLevel', + 'systemLogLevel': '*', + 'systemLogLevelV2': 'SystemLogLevel', + 'onFailure': '*', + 'onSuccess': '*', + 'maxEventAge': '*', + 'retryAttempts': '*' + } + }, + 'aws-codedeploy.lib': { + 'EcsApplication': { + 'applicationName': '*' + }, + 'EcsDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + }, + 'alarms': { + 'alarmArn': '*', + 'alarmName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'service': { + 'cluster': { + 'clusterName': '*', + 'clusterArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'connections': '*', + 'hasEc2Capacity': '*', + 'defaultCloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType' + }, + 'autoscalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + } + }, + 'serviceArn': '*', + 'serviceName': '*' + }, + 'blueGreenDeploymentConfig': { + 'blueTargetGroup': { + 'targetGroupName': '*', + 'targetGroupArn': '*', + 'loadBalancerArns': '*', + 'loadBalancerAttached': '*', + 'node': '*' + }, + 'listener': { + 'listenerArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'deploymentApprovalWaitTime': '*' + }, + 'ignorePollAlarmsFailure': '*', + 'autoRollback': { + 'failedDeployment': '*', + 'stoppedDeployment': '*', + 'deploymentInAlarm': '*' + }, + 'ignoreAlarmConfiguration': '*' + }, + 'ImportedEcsDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + } + }, + 'LambdaApplication': { + 'applicationName': '*' + }, + 'CustomLambdaDeploymentConfig': { + 'type': 'CustomLambdaDeploymentConfigType', + 'percentage': '*', + 'interval': '*', + 'deploymentConfigName': '*' + }, + 'LambdaDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + }, + 'alarms': { + 'alarmArn': '*', + 'alarmName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'alias': '*', + 'preHook': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'postHook': { + 'functionName': '*', + 'functionArn': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'isBoundToVpc': '*', + 'latestVersion': { + 'version': '*', + 'edgeArn': '*', + 'functionName': '*', + 'functionArn': '*', + 'isBoundToVpc': '*', + 'architecture': '*', + 'resourceArnsForGrantInvoke': '*', + 'connections': '*' + }, + 'resourceArnsForGrantInvoke': '*' + }, + 'ignorePollAlarmsFailure': '*', + 'autoRollback': { + 'failedDeployment': '*', + 'stoppedDeployment': '*', + 'deploymentInAlarm': '*' + }, + 'ignoreAlarmConfiguration': '*' + }, + 'ImportedLambdaDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + } + }, + 'ImportedDeploymentGroupBase': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*' + }, + 'DeploymentGroupBase': { + 'deploymentGroupName': '*', + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'roleConstructId': '*' + }, + 'ServerApplication': { + 'applicationName': '*' + }, + 'ServerDeploymentConfig': { + 'minimumHealthyHosts': '*', + 'zonalConfig': { + 'monitorDuration': '*', + 'minimumHealthyHostsPerZone': '*' + }, + 'deploymentConfigName': '*' + }, + 'ImportedServerDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + } + }, + 'ServerDeploymentGroup': { + 'application': { + 'applicationArn': '*', + 'applicationName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'deploymentGroupName': '*', + 'deploymentConfig': { + 'deploymentConfigName': '*', + 'deploymentConfigArn': '*' + }, + 'autoScalingGroups': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'installAgent': '*', + 'loadBalancer': '*', + 'loadBalancers': '*', + 'ec2InstanceTags': '*', + 'onPremiseInstanceTags': '*', + 'alarms': { + 'alarmArn': '*', + 'alarmName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'ignorePollAlarmsFailure': '*', + 'autoRollback': { + 'failedDeployment': '*', + 'stoppedDeployment': '*', + 'deploymentInAlarm': '*' + }, + 'ignoreAlarmConfiguration': '*', + 'terminationHook': '*' + } + }, + 'aws-cognito.lib': { + 'UserPoolIdentityProviderAmazon': { + 'clientId': '*', + 'clientSecret': '*', + 'scopes': '*', + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + }, + 'UserPoolIdentityProviderApple': { + 'clientId': '*', + 'teamId': '*', + 'keyId': '*', + 'privateKey': '*', + 'privateKeyValue': '*', + 'scopes': '*', + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + }, + 'UserPoolIdentityProviderFacebook': { + 'clientId': '*', + 'clientSecret': '*', + 'scopes': '*', + 'apiVersion': '*', + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + }, + 'UserPoolIdentityProviderGoogle': { + 'clientId': '*', + 'clientSecret': '*', + 'clientSecretValue': '*', + 'scopes': '*', + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + }, + 'UserPoolIdentityProviderOidc': { + 'clientId': '*', + 'clientSecret': '*', + 'issuerUrl': '*', + 'name': '*', + 'scopes': '*', + 'identifiers': '*', + 'attributeRequestMethod': 'OidcAttributeRequestMethod', + 'endpoints': { + 'authorization': '*', + 'token': '*', + 'userInfo': '*', + 'jwksUri': '*' + }, + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + }, + 'UserPoolIdentityProviderSaml': { + 'name': '*', + 'identifiers': '*', + 'metadata': '*', + 'idpSignout': '*', + 'encryptedResponses': '*', + 'requestSigningAlgorithm': 'SigningAlgorithm', + 'idpInitiated': '*', + 'userPool': { + 'userPoolId': '*', + 'userPoolArn': '*', + 'userPoolProviderName': '*', + 'identityProviders': { + 'providerName': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'attributeMapping': { + 'address': '*', + 'custom': '*' + } + } + }, + 'aws-ecs.lib': { + 'ImportedTaskDefinition': { + 'taskDefinitionArn': '*', + 'compatibility': 'Compatibility', + 'networkMode': 'NetworkMode', + 'taskRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'TaskDefinition': { + 'networkMode': 'NetworkMode', + 'placementConstraints': '*', + 'compatibility': 'Compatibility', + 'cpu': '*', + 'memoryMiB': '*', + 'ipcMode': 'IpcMode', + 'pidMode': 'PidMode', + 'inferenceAccelerators': { + 'deviceName': '*', + 'deviceType': '*' + }, + 'ephemeralStorageGiB': '*', + 'runtimePlatform': { + 'cpuArchitecture': '*', + 'operatingSystemFamily': '*' + }, + 'family': '*', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'taskRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'proxyConfiguration': '*', + 'volumes': { + 'host': { + 'sourcePath': '*' + }, + 'name': '*', + 'configuredAtLaunch': '*', + 'dockerVolumeConfiguration': { + 'autoprovision': '*', + 'driver': '*', + 'driverOpts': '*', + 'labels': '*', + 'scope': 'Scope' + }, + 'efsVolumeConfiguration': { + 'fileSystemId': '*', + 'rootDirectory': '*', + 'transitEncryption': '*', + 'transitEncryptionPort': '*', + 'authorizationConfig': { + 'accessPointId': '*', + 'iam': '*' + } + } + }, + 'enableFaultInjection': '*' + }, + 'Ec2Service': { + 'taskDefinition': '*', + 'assignPublicIp': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'placementConstraints': '*', + 'placementStrategies': '*', + 'daemon': '*', + 'cluster': { + 'clusterName': '*', + 'clusterArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'connections': '*', + 'hasEc2Capacity': '*', + 'defaultCloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType' + }, + 'autoscalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + } + }, + 'desiredCount': '*', + 'serviceName': '*', + 'maxHealthyPercent': '*', + 'minHealthyPercent': '*', + 'healthCheckGracePeriod': '*', + 'cloudMapOptions': { + 'name': '*', + 'cloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dnsRecordType': 'DnsRecordType', + 'dnsTtl': '*', + 'failureThreshold': '*', + 'container': '*', + 'containerPort': '*' + }, + 'propagateTags': 'PropagatedTagSource', + 'propagateTaskTagsFrom': 'PropagatedTagSource', + 'enableECSManagedTags': '*', + 'deploymentController': { + 'type': 'DeploymentControllerType' + }, + 'circuitBreaker': { + 'enable': '*', + 'rollback': '*' + }, + 'deploymentAlarms': { + 'alarmNames': '*', + 'behavior': 'AlarmBehavior' + }, + 'capacityProviderStrategies': { + 'capacityProvider': '*', + 'base': '*', + 'weight': '*' + }, + 'enableExecuteCommand': '*', + 'serviceConnectConfiguration': { + 'namespace': '*', + 'services': { + 'portMappingName': '*', + 'discoveryName': '*', + 'dnsName': '*', + 'port': '*', + 'ingressPortOverride': '*', + 'idleTimeout': '*' + }, + 'logDriver': '*' + }, + 'taskDefinitionRevision': '*', + 'volumeConfigurations': '*' + }, + 'Ec2TaskDefinition': { + 'networkMode': 'NetworkMode', + 'placementConstraints': '*', + 'ipcMode': 'IpcMode', + 'pidMode': 'PidMode', + 'inferenceAccelerators': { + 'deviceName': '*', + 'deviceType': '*' + }, + 'family': '*', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'taskRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'proxyConfiguration': '*', + 'volumes': { + 'host': { + 'sourcePath': '*' + }, + 'name': '*', + 'configuredAtLaunch': '*', + 'dockerVolumeConfiguration': { + 'autoprovision': '*', + 'driver': '*', + 'driverOpts': '*', + 'labels': '*', + 'scope': 'Scope' + }, + 'efsVolumeConfiguration': { + 'fileSystemId': '*', + 'rootDirectory': '*', + 'transitEncryption': '*', + 'transitEncryptionPort': '*', + 'authorizationConfig': { + 'accessPointId': '*', + 'iam': '*' + } + } + }, + 'enableFaultInjection': '*' + }, + 'ExternalService': { + 'taskDefinition': '*', + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'cluster': { + 'clusterName': '*', + 'clusterArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'connections': '*', + 'hasEc2Capacity': '*', + 'defaultCloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType' + }, + 'autoscalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + } + }, + 'desiredCount': '*', + 'serviceName': '*', + 'maxHealthyPercent': '*', + 'minHealthyPercent': '*', + 'healthCheckGracePeriod': '*', + 'cloudMapOptions': { + 'name': '*', + 'cloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dnsRecordType': 'DnsRecordType', + 'dnsTtl': '*', + 'failureThreshold': '*', + 'container': '*', + 'containerPort': '*' + }, + 'propagateTags': 'PropagatedTagSource', + 'propagateTaskTagsFrom': 'PropagatedTagSource', + 'enableECSManagedTags': '*', + 'deploymentController': { + 'type': 'DeploymentControllerType' + }, + 'circuitBreaker': { + 'enable': '*', + 'rollback': '*' + }, + 'deploymentAlarms': { + 'alarmNames': '*', + 'behavior': 'AlarmBehavior' + }, + 'capacityProviderStrategies': { + 'capacityProvider': '*', + 'base': '*', + 'weight': '*' + }, + 'enableExecuteCommand': '*', + 'serviceConnectConfiguration': { + 'namespace': '*', + 'services': { + 'portMappingName': '*', + 'discoveryName': '*', + 'dnsName': '*', + 'port': '*', + 'ingressPortOverride': '*', + 'idleTimeout': '*' + }, + 'logDriver': '*' + }, + 'taskDefinitionRevision': '*', + 'volumeConfigurations': '*' + }, + 'ExternalTaskDefinition': { + 'networkMode': 'NetworkMode', + 'family': '*', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'taskRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'proxyConfiguration': '*', + 'volumes': { + 'host': { + 'sourcePath': '*' + }, + 'name': '*', + 'configuredAtLaunch': '*', + 'dockerVolumeConfiguration': { + 'autoprovision': '*', + 'driver': '*', + 'driverOpts': '*', + 'labels': '*', + 'scope': 'Scope' + }, + 'efsVolumeConfiguration': { + 'fileSystemId': '*', + 'rootDirectory': '*', + 'transitEncryption': '*', + 'transitEncryptionPort': '*', + 'authorizationConfig': { + 'accessPointId': '*', + 'iam': '*' + } + } + }, + 'enableFaultInjection': '*' + }, + 'FargateService': { + 'taskDefinition': '*', + 'assignPublicIp': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'platformVersion': 'FargatePlatformVersion', + 'cluster': { + 'clusterName': '*', + 'clusterArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'connections': '*', + 'hasEc2Capacity': '*', + 'defaultCloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType' + }, + 'autoscalingGroup': { + 'autoScalingGroupName': '*', + 'autoScalingGroupArn': '*', + 'osType': 'OperatingSystemType', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + }, + 'executeCommandConfiguration': { + 'kmsKey': { + 'keyArn': '*', + 'keyId': '*' + }, + 'logConfiguration': { + 'cloudWatchEncryptionEnabled': '*', + 'cloudWatchLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*' + }, + 's3Bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'policy': '*', + 'replicationRoleArn': '*' + }, + 's3EncryptionEnabled': '*', + 's3KeyPrefix': '*' + }, + 'logging': 'ExecuteCommandLogging' + } + }, + 'desiredCount': '*', + 'serviceName': '*', + 'maxHealthyPercent': '*', + 'minHealthyPercent': '*', + 'healthCheckGracePeriod': '*', + 'cloudMapOptions': { + 'name': '*', + 'cloudMapNamespace': { + 'namespaceName': '*', + 'namespaceId': '*', + 'namespaceArn': '*', + 'type': 'NamespaceType', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'dnsRecordType': 'DnsRecordType', + 'dnsTtl': '*', + 'failureThreshold': '*', + 'container': '*', + 'containerPort': '*' + }, + 'propagateTags': 'PropagatedTagSource', + 'propagateTaskTagsFrom': 'PropagatedTagSource', + 'enableECSManagedTags': '*', + 'deploymentController': { + 'type': 'DeploymentControllerType' + }, + 'circuitBreaker': { + 'enable': '*', + 'rollback': '*' + }, + 'deploymentAlarms': { + 'alarmNames': '*', + 'behavior': 'AlarmBehavior' + }, + 'capacityProviderStrategies': { + 'capacityProvider': '*', + 'base': '*', + 'weight': '*' + }, + 'enableExecuteCommand': '*', + 'serviceConnectConfiguration': { + 'namespace': '*', + 'services': { + 'portMappingName': '*', + 'discoveryName': '*', + 'dnsName': '*', + 'port': '*', + 'ingressPortOverride': '*', + 'idleTimeout': '*' + }, + 'logDriver': '*' + }, + 'taskDefinitionRevision': '*', + 'volumeConfigurations': '*' + }, + 'FargateTaskDefinition': { + 'cpu': '*', + 'memoryLimitMiB': '*', + 'ephemeralStorageGiB': '*', + 'runtimePlatform': { + 'cpuArchitecture': '*', + 'operatingSystemFamily': '*' + }, + 'pidMode': 'PidMode', + 'family': '*', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'taskRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'proxyConfiguration': '*', + 'volumes': { + 'host': { + 'sourcePath': '*' + }, + 'name': '*', + 'configuredAtLaunch': '*', + 'dockerVolumeConfiguration': { + 'autoprovision': '*', + 'driver': '*', + 'driverOpts': '*', + 'labels': '*', + 'scope': 'Scope' + }, + 'efsVolumeConfiguration': { + 'fileSystemId': '*', + 'rootDirectory': '*', + 'transitEncryption': '*', + 'transitEncryptionPort': '*', + 'authorizationConfig': { + 'accessPointId': '*', + 'iam': '*' + } + } + }, + 'enableFaultInjection': '*' + } + }, + 'aws-elasticloadbalancingv2.lib': { + 'ApplicationListener': { + 'loadBalancer': { + 'loadBalancerArn': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'ipAddressType': 'IpAddressType', + 'listeners': '*', + 'metrics': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'connections': '*' + }, + 'protocol': 'ApplicationProtocol', + 'port': '*', + 'certificateArns': '*', + 'certificates': { + 'certificateArn': '*' + }, + 'sslPolicy': 'SslPolicy', + 'defaultTargetGroups': { + 'metrics': '*', + 'targetGroupName': '*', + 'targetGroupArn': '*', + 'loadBalancerArns': '*', + 'loadBalancerAttached': '*', + 'node': '*' + }, + 'defaultAction': '*', + 'open': '*', + 'mutualAuthentication': { + 'mutualAuthenticationMode': 'MutualAuthenticationMode', + 'trustStore': { + 'trustStoreName': '*', + 'trustStoreArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'ignoreClientCertificateExpiry': '*' + } + }, + 'ImportedApplicationListener': { + 'listenerArn': '*', + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'defaultPort': '*', + 'securityGroupAllowsAllOutbound': '*' + }, + 'LookedUpApplicationListener': { + 'listenerArn': '*', + 'listenerPort': '*', + 'securityGroupIds': '*' + }, + 'ApplicationLoadBalancer': { + 'securityGroup': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'ipAddressType': 'IpAddressType', + 'http2Enabled': '*', + 'idleTimeout': '*', + 'dropInvalidHeaderFields': '*', + 'desyncMitigationMode': 'DesyncMitigationMode', + 'clientKeepAlive': '*', + 'preserveHostHeader': '*', + 'xAmznTlsVersionAndCipherSuiteHeaders': '*', + 'preserveXffClientPort': '*', + 'xffHeaderProcessingMode': 'XffHeaderProcessingMode', + 'wafFailOpen': '*', + 'loadBalancerName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'internetFacing': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'deletionProtection': '*', + 'crossZoneEnabled': '*', + 'denyAllIgwTraffic': '*' + }, + 'ImportedApplicationLoadBalancer': { + 'loadBalancerArn': '*', + 'securityGroupId': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'securityGroupAllowsAllOutbound': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + } + }, + 'LookedUpApplicationLoadBalancer': { + 'loadBalancerArn': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'ipAddressType': 'LoadBalancerIpAddressType', + 'securityGroupIds': '*', + 'vpcId': '*' + }, + 'TrustStoreRevocation': { + 'trustStore': { + 'trustStoreName': '*', + 'trustStoreArn': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'revocationContents': { + 'revocationType': 'RevocationType', + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + } + }, + 'TrustStore': { + 'trustStoreName': '*', + 'bucket': { + 'bucketArn': '*', + 'bucketName': '*', + 'bucketWebsiteUrl': '*', + 'bucketWebsiteDomainName': '*', + 'bucketDomainName': '*', + 'bucketDualStackDomainName': '*', + 'bucketRegionalDomainName': '*', + 'isWebsite': '*', + 'encryptionKey': { + 'keyArn': '*', + 'keyId': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'policy': '*', + 'replicationRoleArn': '*' + }, + 'key': '*', + 'version': '*' + }, + 'NetworkListener': { + 'loadBalancer': { + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'metrics': '*', + 'securityGroups': '*', + 'ipAddressType': 'IpAddressType', + 'enforceSecurityGroupInboundRulesOnPrivateLinkTraffic': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'loadBalancerArn': '*', + 'connections': '*' + }, + 'port': '*', + 'defaultTargetGroups': { + 'metrics': '*', + 'targetGroupName': '*', + 'targetGroupArn': '*', + 'loadBalancerArns': '*', + 'loadBalancerAttached': '*', + 'node': '*' + }, + 'defaultAction': '*', + 'protocol': 'Protocol', + 'certificates': { + 'certificateArn': '*' + }, + 'sslPolicy': 'SslPolicy', + 'alpnPolicy': 'AlpnPolicy', + 'tcpIdleTimeout': '*' + }, + 'NetworkLoadBalancer': { + 'securityGroups': { + 'securityGroupId': '*', + 'allowAllOutbound': '*', + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*', + 'canInlineRule': '*', + 'uniqueId': '*', + 'connections': '*' + }, + 'ipAddressType': 'IpAddressType', + 'clientRoutingPolicy': 'ClientRoutingPolicy', + 'enforceSecurityGroupInboundRulesOnPrivateLinkTraffic': '*', + 'zonalShift': '*', + 'enablePrefixForIpv6SourceNat': '*', + 'loadBalancerName': '*', + 'vpc': { + 'vpcId': '*', + 'vpcArn': '*', + 'vpcCidrBlock': '*', + 'publicSubnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'availabilityZones': '*', + 'vpnGatewayId': '*' + }, + 'internetFacing': '*', + 'vpcSubnets': { + 'subnetType': 'SubnetType', + 'availabilityZones': '*', + 'subnetGroupName': '*', + 'subnetName': '*', + 'onePerAz': '*', + 'subnetFilters': '*', + 'subnets': { + 'availabilityZone': '*', + 'subnetId': '*', + 'internetConnectivityEstablished': '*', + 'ipv4CidrBlock': '*', + 'routeTable': { + 'routeTableId': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + } + }, + 'deletionProtection': '*', + 'crossZoneEnabled': '*', + 'denyAllIgwTraffic': '*' + }, + 'LookedUpNetworkLoadBalancer': { + 'loadBalancerArn': '*', + 'loadBalancerCanonicalHostedZoneId': '*', + 'loadBalancerDnsName': '*', + 'ipAddressType': 'LoadBalancerIpAddressType', + 'securityGroupIds': '*', + 'vpcId': '*' + } + }, + 'aws-iam.lib': { + 'ImmutableRole': { + 'roleArn': '*', + 'roleName': '*', + 'grant': '*', + 'grantPassRole': '*', + 'grantAssumeRole': '*', + 'attachInlinePolicy': '*', + 'addManagedPolicy': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'addToPolicy': '*', + 'addToPrincipalPolicy': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'applyRemovalPolicy': '*', + 'node': '*' + }, + 'ImportedRole': { + 'roleArn': '*', + 'roleName': '*', + 'account': '*', + 'mutable': '*', + 'addGrantsToResources': '*', + 'defaultPolicyName': '*' + }, + 'PrecreatedRole': { + 'role': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'node': '*' + }, + 'assumeRolePolicy': '*', + 'missing': '*', + 'rolePath': '*' + } + }, + 'pipelines.lib': { + 'AssetSingletonRole': { + 'assumedBy': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + }, + 'externalId': '*', + 'externalIds': '*', + 'managedPolicies': { + 'managedPolicyArn': '*' + }, + 'inlinePolicies': '*', + 'path': '*', + 'permissionsBoundary': { + 'managedPolicyArn': '*' + }, + 'roleName': '*', + 'maxSessionDuration': '*', + 'description': '*' + } + } +}; diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts new file mode 100644 index 0000000000000..b8966a5f85085 --- /dev/null +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts @@ -0,0 +1,4028 @@ +/* eslint-disable @cdklabs/no-literal-partition */ +/* eslint-disable quote-props */ +/* eslint-disable @stylistic/comma-dangle */ +/* + * Do not edit this file manually. To prevent misconfiguration, this file + * should only be modified by an automated GitHub workflow, that ensures + * that the ENUMs present in this list + * + */ + +export const AWS_CDK_ENUMS: { [key: string]: any } = { + 'AssetBuildTime': [ + 'all-before-deploy', + 'just-in-time' + ], + 'RequireApproval': [ + 'never', + 'any-change', + 'broadening' + ], + 'LogLevel': [ + 'OFF', + 'ALL', + 'ERROR', + 'FATAL' + ], + 'Command': [ + 'ls', + 'list', + 'diff', + 'bootstrap', + 'deploy', + 'destroy', + 'synthesize', + 'synth', + 'metadata', + 'init', + 'version', + 'watch', + 'gc', + 'rollback', + 'import', + 'acknowledge', + 'ack', + 'notices', + 'migrate', + 'context', + 'docs', + 'doc', + 'doctor' + ], + 'RedirectStatus': [ + '200', + '301', + '302', + '404', + '404-200' + ], + 'Platform': [ + 'x86-64', + 'ARM64' + ], + 'CacheConfigType': [ + 'AMPLIFY_MANAGED', + 'AMPLIFY_MANAGED_NO_COOKIES' + ], + 'TraceConfigurationVendor': [ + 'AWSXRAY' + ], + 'ImageRepositoryType': [ + 'ECR_PUBLIC', + 'ECR' + ], + 'ConfigurationSourceType': [ + 'S3', + 'SECRETS_MANAGER', + 'SSM_PARAMETER', + 'SSM_DOCUMENT', + 'CODE_PIPELINE' + ], + 'HealthCheckProtocolType': [ + 'HTTP', + 'TCP' + ], + 'IpAddressType': [ + 'ipv4', + 'dualstack', + 'dualstack-without-public-ipv4' + ], + 'ConnectionType': [ + 'INTERNET', + 'VPC_LINK' + ], + 'ImageId': [ + 'amazonlinux-2-x86_64', + 'amazonlinux-2023-x86_64', + 'ubuntu-18.04-x86_64', + 'ubuntu-22.04-x86_64' + ], + 'RepositoryVisibility': [ + 0, + 1 + ], + 'RoleMappingMatchType': [ + 'Equals', + 'Contains', + 'StartsWith', + 'NotEqual' + ], + 'IdentityPoolProviderType': [ + 'Facebook', + 'Google', + 'Amazon', + 'Apple', + 'Twitter', + 'OpenId', + 'Saml', + 'UserPool', + 'Custom' + ], + 'AddressFamily': [ + 'IPv4', + 'IPv6' + ], + 'IpamPoolPublicIpSource': [ + 'byoip', + 'amazon' + ], + 'AwsServiceName': [ + 'ec2' + ], + 'IpamScopeType': [ + 'default', + 'custom' + ], + 'NatConnectivityType': [ + 'public', + 'private' + ], + 'OperatingSystem': [ + 'AMAZON_LINUX', + 'AMAZON_LINUX_2', + 'AMAZON_LINUX_2023', + 'WINDOWS_2012', + 'WINDOWS_2016' + ], + 'DeleteOption': [ + 'SAFE_DELETE', + 'FORCE_DELETE', + 'RETAIN' + ], + 'BalancingStrategy': [ + 'SPOT_ONLY', + 'SPOT_PREFERRED', + 'ON_DEMAND_ONLY' + ], + 'PriorityType': [ + 'LATENCY', + 'COST', + 'DESTINATION', + 'LOCATION' + ], + 'Protocol': [ + 'HTTP', + 'HTTPS', + 'TCP', + 'TLS', + 'UDP', + 'TCP_UDP' + ], + 'WorkerType': [ + 'Standard', + 'G.025X', + 'G.1X', + 'G.2X', + 'G.4X', + 'G.8X', + 'Z.2X' + ], + 'JobState': [ + 'SUCCEEDED', + 'FAILED', + 'TIMEOUT', + 'STARTING', + 'RUNNING', + 'STOPPING', + 'STOPPED' + ], + 'MetricType': [ + 'EventCount' + ], + 'ExecutionClass': [ + 'FLEX', + 'STANDARD' + ], + 'GlueVersion': [ + '0.9', + '1.0', + '2.0', + '3.0', + '4.0', + '5.0' + ], + 'JobLanguage': [ + 'scala', + 'python' + ], + 'PythonVersion': [ + '2', + '3', + '3.9' + ], + 'Runtime': [ + 'nodejs18.x', + 'python3.9', + 'python3.10', + 'python3.11' + ], + 'JobType': [ + 'glueetl', + 'gluestreaming', + 'pythonshell', + 'glueray' + ], + 'MaxCapacity': [ + 0.0625, + 1 + ], + 'PredicateLogical': [ + 'AND', + 'ANY' + ], + 'ConditionLogicalOperator': [ + 'EQUALS' + ], + 'CrawlerState': [ + 'RUNNING', + 'CANCELLING', + 'CANCELLED', + 'SUCCEEDED', + 'FAILED', + 'ERROR' + ], + 'TableEncryption': [ + 'AWS_OWNED', + 'CUSTOMER_MANAGED', + 'AWS_MANAGED' + ], + 'S3EncryptionMode': [ + 'SSE-S3', + 'SSE-KMS' + ], + 'CloudWatchEncryptionMode': [ + 'SSE-KMS' + ], + 'JobBookmarksEncryptionMode': [ + 'CSE-KMS' + ], + 'CompressionType': [ + 'None', + 'Gzip' + ], + 'InvalidCharHandlingAction': [ + 'DISABLED', + 'FAIL', + 'SET_TO_NULL', + 'DROP_ROW', + 'REPLACE' + ], + 'NumericOverflowHandlingAction': [ + 'DISABLED', + 'FAIL', + 'SET_TO_NULL', + 'DROP_ROW' + ], + 'SurplusBytesHandlingAction': [ + 'SET_TO_NULL', + 'DISABLED', + 'FAIL', + 'DROP_ROW', + 'TRUNCATE' + ], + 'SurplusCharHandlingAction': [ + 'SET_TO_NULL', + 'DISABLED', + 'FAIL', + 'DROP_ROW', + 'TRUNCATE' + ], + 'ColumnCountMismatchHandlingAction': [ + 'DISABLED', + 'FAIL', + 'SET_TO_NULL', + 'DROP_ROW' + ], + 'WriteParallel': [ + 'on', + 'off' + ], + 'OrcColumnMappingType': [ + 'name', + 'position' + ], + 'StorageParameters': [ + 'skip.header.line.count', + 'data_cleansing_enabled', + 'compression_type', + 'invalid_char_handling', + 'replacement_char', + 'numeric_overflow_handling', + 'surplus_bytes_handling', + 'surplus_char_handling', + 'column_count_mismatch_handling', + 'num_rows', + 'serialization.null.format', + 'orc.schema.resolution', + 'write.parallel', + 'write.maxfilesize.mb', + 'write.kms.key.id' + ], + 'FirehoseRecordSeparator': [ + '\n', + '\t', + '\r\n', + ',' + ], + 'MqttQualityOfService': [ + 0, + 1 + ], + 'SnsActionMessageFormat': [ + 'RAW', + 'JSON' + ], + 'AuditCheck': [ + 'AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK', + 'CA_CERTIFICATE_EXPIRING_CHECK', + 'CA_CERTIFICATE_KEY_QUALITY_CHECK', + 'CONFLICTING_CLIENT_IDS_CHECK', + 'DEVICE_CERTIFICATE_EXPIRING_CHECK', + 'DEVICE_CERTIFICATE_KEY_QUALITY_CHECK', + 'DEVICE_CERTIFICATE_SHARED_CHECK', + 'IOT_POLICY_OVERLY_PERMISSIVE_CHECK', + 'IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK', + 'IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK', + 'LOGGING_DISABLED_CHECK', + 'REVOKED_CA_CERTIFICATE_STILL_ACTIVE_CHECK', + 'REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK', + 'UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK' + ], + 'DayOfWeek': [ + 'SUN', + 'MON', + 'TUE', + 'WED', + 'THU', + 'FRI', + 'SAT' + ], + 'Frequency': [ + 'DAILY', + 'WEEKLY', + 'BIWEEKLY', + 'MONTHLY' + ], + 'EventEvaluation': [ + 'BATCH', + 'SERIAL' + ], + 'LatencyMode': [ + 'LOW', + 'NORMAL' + ], + 'ChannelType': [ + 'STANDARD', + 'BASIC', + 'ADVANCED_SD', + 'ADVANCED_HD' + ], + 'Preset': [ + 'CONSTRAINED_BANDWIDTH_DELIVERY', + 'HIGHER_BANDWIDTH_DELIVERY' + ], + 'RenditionSelection': [ + 'ALL', + 'NONE', + 'CUSTOM' + ], + 'RecordingMode': [ + 'INTERVAL', + 'DISABLED' + ], + 'Storage': [ + 'SEQUENTIAL', + 'LATEST' + ], + 'Resolution': [ + 'FULL_HD', + 'HD', + 'SD', + 'LOWEST_RESOLUTION' + ], + 'MetricsLevel': [ + 'APPLICATION', + 'TASK', + 'OPERATOR', + 'PARALLELISM' + ], + 'StreamEncryptionType': [ + 0, + 1, + 2 + ], + 'BackupMode': [ + 0, + 1 + ], + 'DependenciesFile': [ + 'requirements.txt', + 'poetry.lock', + 'Pipfile.lock', + '' + ], + 'CustomLayer': [ + 'POI' + ], + 'Style': [ + 'VectorEsriNavigation', + 'RasterEsriImagery', + 'VectorEsriLightGrayCanvas', + 'VectorEsriTopographic', + 'VectorEsriStreets', + 'VectorEsriDarkGrayCanvas', + 'VectorHereExplore', + 'RasterHereExploreSatellite', + 'HybridHereExploreSatellite', + 'VectorHereContrast', + 'VectorHereExploreTruck', + 'VectorGrabStandardLight', + 'VectorGrabStandardDark', + 'VectorOpenDataStandardLight', + 'VectorOpenDataStandardDark', + 'VectorOpenDataVisualizationLight', + 'VectorOpenDataVisualizationDark' + ], + 'PoliticalView': [ + 'IND' + ], + 'IntendedUse': [ + 'SingleUse', + 'Storage' + ], + 'PositionFiltering': [ + 'TimeBased', + 'DistanceBased', + 'AccuracyBased' + ], + 'DataSource': [ + 'Esri', + 'Grab', + 'Here' + ], + 'StorageMode': [ + 'LOCAL', + 'TIERED' + ], + 'ClusterMonitoringLevel': [ + 'DEFAULT', + 'PER_BROKER', + 'PER_TOPIC_PER_BROKER', + 'PER_TOPIC_PER_PARTITION' + ], + 'ClientBrokerEncryption': [ + 'TLS', + 'TLS_PLAINTEXT', + 'PLAINTEXT' + ], + 'TemplateType': [ + 'Text', + 'Object' + ], + 'IncludeExecutionData': [ + 'ALL' + ], + 'S3OutputFormat': [ + 'plain', + 'json', + 'w3c' + ], + 'DesiredState': [ + 'RUNNING', + 'STOPPED' + ], + 'PipeVariable': [ + '', + '', + '', + '', + '', + '', + '', + '' + ], + 'OnPartialBatchItemFailure': [ + 'AUTOMATIC_BISECT' + ], + 'KinesisStartingPosition': [ + 'TRIM_HORIZON', + 'LATEST', + 'AT_TIMESTAMP' + ], + 'DynamoDBStartingPosition': [ + 'TRIM_HORIZON', + 'LATEST' + ], + 'LambdaFunctionInvocationType': [ + 'FIRE_AND_FORGET', + 'REQUEST_RESPONSE' + ], + 'StateMachineInvocationType': [ + 'FIRE_AND_FORGET', + 'REQUEST_RESPONSE' + ], + 'NodeType': [ + 'Standard', + 'GPU', + 'INFERENTIA', + 'TRAINIUM' + ], + 'ClusterType': [ + 'single-node', + 'multi-node' + ], + 'ResourceAction': [ + 'pause-cluster', + 'resume-cluster', + 'failover-primary-compute' + ], + 'TableAction': [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + 'TableDistStyle': [ + 'AUTO', + 'EVEN', + 'KEY', + 'ALL' + ], + 'TableSortStyle': [ + 'AUTO', + 'COMPOUND', + 'INTERLEAVED' + ], + 'ColumnEncoding': [ + 'AUTO', + 'RAW', + 'AZ64', + 'BYTEDICT', + 'DELTA', + 'DELTA32K', + 'LZO', + 'MOSTLY8', + 'MOSTLY16', + 'MOSTLY32', + 'RUNLENGTH', + 'TEXT255', + 'TEXT32K', + 'ZSTD' + ], + 'InvocationHttpResponseCode': [ + 'Invocation4XXErrors', + 'Invocation5XXErrors' + ], + 'SharePermission': [ + 0, + 1 + ], + 'SynthesisMessageLevel': [ + 'info', + 'warning', + 'error' + ], + 'Partition': [ + 'aws', + 'aws-cn', + 'aws-us-gov', + 'aws-iso', + 'aws-iso-b', + 'aws-iso-f', + 'aws-iso-e' + ], + 'TemplateSourceOptions': [ + 'path', + 'stack', + 'scan' + ], + 'ScanStatus': [ + 'IN_PROGRESS', + 'COMPLETE', + 'FAILED' + ], + 'FilterType': [ + 'resource-identifier', + 'resource-type-prefix', + 'tag-key', + 'tag-value' + ], + 'FromScan': [ + 0, + 1, + 2 + ], + 'SubnetType': [ + 'Isolated', + 'Deprecated_Isolated', + 'Private', + 'Deprecated_Private_NAT', + 'Deprecated_Private', + 'Public' + ], + 'DeploymentState': [ + 'pending', + 'queued', + 'deploying', + 'completed', + 'failed', + 'skipped' + ], + 'SecurityPolicy': [ + 'TLS_1_0', + 'TLS_1_2' + ], + 'ContentHandling': [ + 'CONVERT_TO_BINARY', + 'CONVERT_TO_TEXT' + ], + 'IntegrationType': [ + 'AWS', + 'AWS_PROXY', + 'HTTP', + 'HTTP_PROXY', + 'MOCK' + ], + 'PassthroughBehavior': [ + 'WHEN_NO_MATCH', + 'NEVER', + 'WHEN_NO_TEMPLATES' + ], + 'JsonSchemaVersion': [ + 'http://json-schema.org/draft-04/schema#', + 'http://json-schema.org/draft-07/schema#' + ], + 'JsonSchemaType': [ + 'null', + 'boolean', + 'object', + 'array', + 'number', + 'integer', + 'string' + ], + 'AuthorizationType': [ + 'API_KEY', + 'BASIC', + 'OAUTH_CLIENT_CREDENTIALS' + ], + 'ApiKeySourceType': [ + 'HEADER', + 'AUTHORIZER' + ], + 'EndpointType': [ + 'EDGE', + 'REGIONAL' + ], + 'MethodLoggingLevel': [ + 'OFF', + 'ERROR', + 'INFO' + ], + 'Period': [ + 'DAY', + 'WEEK', + 'MONTH' + ], + 'UsagePlanKeyType': [ + 'API_KEY' + ], + 'ConfigurationType': [ + 'AWS.Freeform', + 'AWS.AppConfig.FeatureFlags' + ], + 'ValidatorType': [ + 'JSON_SCHEMA', + 'LAMBDA' + ], + 'GrowthType': [ + 'LINEAR', + 'EXPONENTIAL' + ], + 'MonitorType': [ + 0, + 1 + ], + 'ActionPoint': [ + 'PRE_CREATE_HOSTED_CONFIGURATION_VERSION', + 'PRE_START_DEPLOYMENT', + 'ON_DEPLOYMENT_START', + 'ON_DEPLOYMENT_STEP', + 'ON_DEPLOYMENT_BAKING', + 'ON_DEPLOYMENT_COMPLETE', + 'ON_DEPLOYMENT_ROLLED_BACK', + 'AT_DEPLOYMENT_TICK' + ], + 'SourceType': [ + 'lambda', + 'sqs', + 'sns', + 'events' + ], + 'DeletionProtectionCheck': [ + 'ACCOUNT_DEFAULT', + 'APPLY', + 'BYPASS' + ], + 'ServiceNamespace': [ + 'ecs', + 'elasticmapreduce', + 'ec2', + 'appstream', + 'dynamodb', + 'rds', + 'sagemaker', + 'custom-resource', + 'lambda', + 'comprehend', + 'kafka', + 'elasticache', + 'neptune' + ], + 'AdjustmentType': [ + 'ChangeInCapacity', + 'PercentChangeInCapacity', + 'ExactCapacity' + ], + 'MetricAggregationType': [ + 'Average', + 'Minimum', + 'Maximum' + ], + 'PredefinedMetric': [ + 'ASGAverageCPUUtilization', + 'ASGAverageNetworkIn', + 'ASGAverageNetworkOut', + 'ALBRequestCountPerTarget' + ], + 'HttpRouteMethod': [ + 'GET', + 'HEAD', + 'POST', + 'PUT', + 'DELETE', + 'CONNECT', + 'OPTIONS', + 'TRACE', + 'PATCH' + ], + 'TlsMode': [ + 'STRICT', + 'PERMISSIVE', + 'DISABLED' + ], + 'MeshFilterType': [ + 'ALLOW_ALL', + 'DROP_ALL' + ], + 'HttpRouteProtocol': [ + 'http', + 'https' + ], + 'HttpRetryEvent': [ + 'server-error', + 'gateway-error', + 'client-error', + 'stream-error' + ], + 'TcpRetryEvent': [ + 'connection-error' + ], + 'GrpcRetryEvent': [ + 'cancelled', + 'deadline-exceeded', + 'internal', + 'resource-exhausted', + 'unavailable' + ], + 'IpPreference': [ + 'IPv4_ONLY', + 'IPv4_PREFERRED', + 'IPv6_ONLY', + 'IPv6_PREFERRED' + ], + 'DnsResponseType': [ + 'LOADBALANCER', + 'ENDPOINTS' + ], + 'Visibility': [ + 'GLOBAL', + 'PRIVATE' + ], + 'UserPoolDefaultAction': [ + 'ALLOW', + 'DENY' + ], + 'FieldLogLevel': [ + 'NONE', + 'ERROR', + 'INFO', + 'DEBUG', + 'ALL' + ], + 'IntrospectionConfig': [ + 'ENABLED', + 'DISABLED' + ], + 'FunctionRuntimeFamily': [ + 'APPSYNC_JS' + ], + 'MergeType': [ + 'MANUAL_MERGE', + 'AUTO_MERGE' + ], + 'Monitoring': [ + 0, + 1 + ], + 'OnDemandAllocationStrategy': [ + 'prioritized', + 'lowest-price' + ], + 'SpotAllocationStrategy': [ + 'lowest-price', + 'capacity-optimized', + 'capacity-optimized-prioritized', + 'price-capacity-optimized' + ], + 'CapacityDistributionStrategy': [ + 'balanced-only', + 'balanced-best-effort' + ], + 'UpdateType': [ + 'None', + 'Replace', + 'RollingUpdate' + ], + 'ScalingEvent': [ + 'autoscaling:EC2_INSTANCE_LAUNCH', + 'autoscaling:EC2_INSTANCE_TERMINATE', + 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR', + 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR', + 'autoscaling:TEST_NOTIFICATION' + ], + 'ScalingProcess': [ + 'Launch', + 'Terminate', + 'HealthCheck', + 'ReplaceUnhealthy', + 'AZRebalance', + 'AlarmNotification', + 'ScheduledActions', + 'AddToLoadBalancer', + 'InstanceRefresh' + ], + 'HealthCheckType': [ + 'HTTP', + 'HTTPS', + 'TCP' + ], + 'DefaultResult': [ + 'CONTINUE', + 'ABANDON' + ], + 'LifecycleTransition': [ + 'autoscaling:EC2_INSTANCE_LAUNCHING', + 'autoscaling:EC2_INSTANCE_TERMINATING' + ], + 'TerminationPolicy': [ + 'AllocationStrategy', + 'ClosestToNextInstanceHour', + 'Default', + 'NewestInstance', + 'OldestInstance', + 'OldestLaunchConfiguration', + 'OldestLaunchTemplate', + 'CustomLambdaFunction' + ], + 'EbsDeviceVolumeType': [ + 'standard', + 'io1', + 'io2', + 'gp2', + 'gp3', + 'st1', + 'sc1', + 'gp2', + 'gp3', + 'io1', + 'io2', + 'st1', + 'sc1', + 'standard' + ], + 'PoolState': [ + 'Hibernated', + 'Running', + 'Stopped' + ], + 'TagOperation': [ + 'STRINGEQUALS', + 'dummy' + ], + 'BackupVaultEvents': [ + 'BACKUP_JOB_STARTED', + 'BACKUP_JOB_COMPLETED', + 'BACKUP_JOB_SUCCESSFUL', + 'BACKUP_JOB_FAILED', + 'BACKUP_JOB_EXPIRED', + 'RESTORE_JOB_STARTED', + 'RESTORE_JOB_COMPLETED', + 'RESTORE_JOB_SUCCESSFUL', + 'RESTORE_JOB_FAILED', + 'COPY_JOB_STARTED', + 'COPY_JOB_SUCCESSFUL', + 'COPY_JOB_FAILED', + 'RECOVERY_POINT_MODIFIED', + 'BACKUP_PLAN_CREATED', + 'BACKUP_PLAN_MODIFIED', + 'S3_BACKUP_OBJECT_FAILED', + 'S3_RESTORE_OBJECT_FAILED' + ], + 'UlimitName': [ + 'core', + 'cpu', + 'data', + 'fsize', + 'locks', + 'memlock', + 'msgqueue', + 'nice', + 'nofile', + 'nproc', + 'rss', + 'rtprio', + 'rttime', + 'sigpending', + 'stack' + ], + 'Compatibility': [ + 0, + 1, + 2, + 3 + ], + 'ImagePullPolicy': [ + 'Always', + 'IfNotPresent', + 'Never' + ], + 'EmptyDirMediumType': [ + '', + 'Memory' + ], + 'DnsPolicy': [ + 'Default', + 'ClusterFirst', + 'ClusterFirstWithHostNet' + ], + 'Action': [ + 'allow', + 'deny' + ], + 'JobStateTimeLimitActionsAction': [ + 'CANCEL' + ], + 'JobStateTimeLimitActionsReason': [ + 'CAPACITY:INSUFFICIENT_INSTANCE_CAPACITY', + 'MISCONFIGURATION:COMPUTE_ENVIRONMENT_MAX_RESOURCE', + 'MISCONFIGURATION:JOB_RESOURCE_REQUIREMENT' + ], + 'JobStateTimeLimitActionsState': [ + 'RUNNABLE' + ], + 'DevicePermission': [ + 'read', + 'write', + 'mknod' + ], + 'TmpfsMountOption': [ + 'defaults', + 'ro', + 'rw', + 'suid', + 'nosuid', + 'dev', + 'nodev', + 'exec', + 'noexec', + 'sync', + 'async', + 'dirsync', + 'remount', + 'mand', + 'nomand', + 'atime', + 'noatime', + 'diratime', + 'nodiratime', + 'bind', + 'rbind', + 'unbindable', + 'runbindable', + 'private', + 'rprivate', + 'shared', + 'rshared', + 'slave', + 'rslave', + 'relatime', + 'norelatime', + 'strictatime', + 'nostrictatime', + 'mode', + 'uid', + 'gid', + 'nr_inodes', + 'nr_blocks', + 'mpol' + ], + 'EcsMachineImageType': [ + 'ECS_AL2', + 'ECS_AL2023', + 'ECS_AL2_NVIDIA' + ], + 'EksMachineImageType': [ + 'EKS_AL2', + 'EKS_AL2_NVIDIA' + ], + 'AllocationStrategy': [ + 'BEST_FIT', + 'BEST_FIT_PROGRESSIVE', + 'SPOT_CAPACITY_OPTIMIZED', + 'SPOT_PRICE_CAPACITY_OPTIMIZED' + ], + 'ValidationMethod': [ + 'EMAIL', + 'DNS' + ], + 'LoggingLevel': [ + 'ERROR', + 'INFO', + 'NONE' + ], + 'CloudFormationCapabilities': [ + '', + 'CAPABILITY_IAM', + 'CAPABILITY_NAMED_IAM', + 'CAPABILITY_AUTO_EXPAND' + ], + 'HttpVersion': [ + 'http1.1', + 'http2', + 'http2and3', + 'http3' + ], + 'PriceClass': [ + 'PriceClass_100', + 'PriceClass_200', + 'PriceClass_All' + ], + 'ViewerProtocolPolicy': [ + 'https-only', + 'redirect-to-https', + 'allow-all' + ], + 'OriginProtocolPolicy': [ + 'http-only', + 'match-viewer', + 'https-only' + ], + 'SSLMethod': [ + 'sni-only', + 'vip' + ], + 'SecurityPolicyProtocol': [ + 'SSLv3', + 'TLSv1', + 'TLSv1_2016', + 'TLSv1.1_2016', + 'TLSv1.2_2018', + 'TLSv1.2_2019', + 'TLSv1.2_2021' + ], + 'LambdaEdgeEventType': [ + 'origin-request', + 'origin-response', + 'viewer-request', + 'viewer-response' + ], + 'FunctionEventType': [ + 'viewer-request', + 'viewer-response' + ], + 'AccessLevel': [ + 'READ', + 'LIST', + 'WRITE', + 'DELETE' + ], + 'OriginAccessControlOriginType': [ + 's3', + 'lambda', + 'mediastore', + 'mediapackagev2' + ], + 'SigningBehavior': [ + 'always', + 'never', + 'no-override' + ], + 'SigningProtocol': [ + 'sigv4' + ], + 'HeadersFrameOption': [ + 'DENY', + 'SAMEORIGIN' + ], + 'HeadersReferrerPolicy': [ + 'no-referrer', + 'no-referrer-when-downgrade', + 'origin', + 'origin-when-cross-origin', + 'same-origin', + 'strict-origin', + 'strict-origin-when-cross-origin', + 'unsafe-url' + ], + 'FailoverStatusCode': [ + 403, + 404, + 500, + 502, + 503, + 504 + ], + 'OriginSslPolicy': [ + 'SSLv3', + 'TLSv1', + 'TLSv1.1', + 'TLSv1.2' + ], + 'CloudFrontAllowedMethods': [ + 'GH', + 'GHO', + 'ALL' + ], + 'CloudFrontAllowedCachedMethods': [ + 'GH', + 'GHO' + ], + 'ReadWriteType': [ + 'ReadOnly', + 'WriteOnly', + 'All', + 'None' + ], + 'ManagementEventSources': [ + 'kms.amazonaws.com', + 'rdsdata.amazonaws.com' + ], + 'DataResourceType': [ + 'AWS::Lambda::Function', + 'AWS::S3::Object' + ], + 'AlarmState': [ + 'ALARM', + 'OK', + 'INSUFFICIENT_DATA' + ], + 'Operator': [ + 'AND', + 'OR', + 'NOT' + ], + 'AlarmStatusWidgetSortBy': [ + 'default', + 'stateUpdatedTimestamp', + 'timestamp' + ], + 'ComparisonOperator': [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38 + ], + 'TreatMissingData': [ + 'breaching', + 'notBreaching', + 'ignore', + 'missing' + ], + 'PeriodOverride': [ + 'auto', + 'inherit' + ], + 'GraphWidgetView': [ + 'timeSeries', + 'bar', + 'pie' + ], + 'TableLayout': [ + 'horizontal', + 'vertical' + ], + 'TableSummaryColumn': [ + 'MIN', + 'MAX', + 'SUM', + 'AVG' + ], + 'Shading': [ + 'none', + 'above', + 'below' + ], + 'VerticalShading': [ + 'none', + 'before', + 'after' + ], + 'LegendPosition': [ + 'bottom', + 'right', + 'hidden' + ], + 'LogQueryVisualizationType': [ + 'table', + 'line', + 'stackedarea', + 'bar', + 'pie' + ], + 'Statistic': [ + 'SampleCount', + 'Average', + 'Sum', + 'Minimum', + 'Maximum' + ], + 'Unit': [ + 'Seconds', + 'Microseconds', + 'Milliseconds', + 'Bytes', + 'Kilobytes', + 'Megabytes', + 'Gigabytes', + 'Terabytes', + 'Bits', + 'Kilobits', + 'Megabits', + 'Gigabits', + 'Terabits', + 'Percent', + 'Count', + 'Bytes/Second', + 'Kilobytes/Second', + 'Megabytes/Second', + 'Gigabytes/Second', + 'Terabytes/Second', + 'Bits/Second', + 'Kilobits/Second', + 'Megabits/Second', + 'Gigabits/Second', + 'Terabits/Second', + 'Count/Second', + 'None' + ], + 'TextWidgetBackground': [ + 'solid', + 'transparent' + ], + 'VariableInputType': [ + 'input', + 'radio', + 'select' + ], + 'VariableType': [ + 'property', + 'pattern' + ], + 'Ec2InstanceAction': [ + 'stop', + 'terminate', + 'recover', + 'reboot' + ], + 'OpsItemSeverity': [ + '1', + '2', + '3', + '4' + ], + 'OpsItemCategory': [ + 'Availability', + 'Cost', + 'Performance', + 'Recovery', + 'Security' + ], + 'LocalCacheMode': [ + 'LOCAL_SOURCE_CACHE', + 'LOCAL_DOCKER_LAYER_CACHE', + 'LOCAL_CUSTOM_CACHE' + ], + 'ComputeType': [ + 'BUILD_GENERAL1_SMALL', + 'BUILD_GENERAL1_MEDIUM', + 'BUILD_GENERAL1_LARGE', + 'BUILD_GENERAL1_XLARGE', + 'BUILD_GENERAL1_2XLARGE', + 'BUILD_LAMBDA_1GB', + 'BUILD_LAMBDA_2GB', + 'BUILD_LAMBDA_4GB', + 'BUILD_LAMBDA_8GB', + 'BUILD_LAMBDA_10GB' + ], + 'EnvironmentType': [ + 'ARM_CONTAINER', + 'LINUX_CONTAINER', + 'LINUX_GPU_CONTAINER', + 'WINDOWS_SERVER_2019_CONTAINER', + 'WINDOWS_SERVER_2022_CONTAINER', + 'MAC_ARM', + 'LINUX_EC2', + 'ARM_EC2', + 'WINDOWS_EC2' + ], + 'FleetComputeType': [ + 'BUILD_GENERAL1_SMALL', + 'BUILD_GENERAL1_MEDIUM', + 'BUILD_GENERAL1_LARGE', + 'BUILD_GENERAL1_XLARGE', + 'BUILD_GENERAL1_2XLARGE' + ], + 'ImagePullPrincipalType': [ + 'CODEBUILD', + 'SERVICE_ROLE' + ], + 'WindowsImageType': [ + 'WINDOWS_CONTAINER', + 'WINDOWS_SERVER_2019_CONTAINER', + 'WINDOWS_SERVER_2022_CONTAINER' + ], + 'BuildEnvironmentVariableType': [ + 'PLAINTEXT', + 'PARAMETER_STORE', + 'SECRETS_MANAGER' + ], + 'ProjectVisibility': [ + 'PUBLIC_READ', + 'PRIVATE' + ], + 'ProjectNotificationEvents': [ + 'codebuild-project-build-state-failed', + 'codebuild-project-build-state-succeeded', + 'codebuild-project-build-state-in-progress', + 'codebuild-project-build-state-stopped', + 'codebuild-project-build-phase-failure', + 'codebuild-project-build-phase-success' + ], + 'ReportGroupType': [ + 'TEST', + 'CODE_COVERAGE' + ], + 'EventAction': [ + 'PUSH', + 'PULL_REQUEST_CREATED', + 'PULL_REQUEST_UPDATED', + 'PULL_REQUEST_CLOSED', + 'PULL_REQUEST_MERGED', + 'PULL_REQUEST_REOPENED', + 'RELEASED', + 'PRERELEASED', + 'WORKFLOW_JOB_QUEUED' + ], + 'WebhookFilterTypes': [ + 'FILE_PATH', + 'COMMIT_MESSAGE', + 'HEAD_REF', + 'ACTOR_ACCOUNT_ID', + 'BASE_REF', + 'REPOSITORY_NAME' + ], + 'RepositoryEventTrigger': [ + 'all', + 'updateReference', + 'createReference', + 'deleteReference' + ], + 'RepositoryNotificationEvents': [ + 'codecommit-repository-comments-on-commits', + 'codecommit-repository-comments-on-pull-requests', + 'codecommit-repository-approvals-status-changed', + 'codecommit-repository-approvals-rule-override', + 'codecommit-repository-pull-request-created', + 'codecommit-repository-pull-request-source-updated', + 'codecommit-repository-pull-request-status-changed', + 'codecommit-repository-pull-request-merged', + 'codecommit-repository-branches-and-tags-created', + 'codecommit-repository-branches-and-tags-deleted', + 'codecommit-repository-branches-and-tags-updated' + ], + 'ComputePlatform': [ + 'AWSLambda', + 'Default' + ], + 'ActionCategory': [ + 'Source', + 'Build', + 'Test', + 'Approval', + 'Deploy', + 'Invoke' + ], + 'PipelineNotificationEvents': [ + 'codepipeline-pipeline-pipeline-execution-failed', + 'codepipeline-pipeline-pipeline-execution-canceled', + 'codepipeline-pipeline-pipeline-execution-started', + 'codepipeline-pipeline-pipeline-execution-resumed', + 'codepipeline-pipeline-pipeline-execution-succeeded', + 'codepipeline-pipeline-pipeline-execution-superseded', + 'codepipeline-pipeline-stage-execution-started', + 'codepipeline-pipeline-stage-execution-succeeded', + 'codepipeline-pipeline-stage-execution-resumed', + 'codepipeline-pipeline-stage-execution-canceled', + 'codepipeline-pipeline-stage-execution-failed', + 'codepipeline-pipeline-action-execution-succeeded', + 'codepipeline-pipeline-action-execution-failed', + 'codepipeline-pipeline-action-execution-canceled', + 'codepipeline-pipeline-action-execution-started', + 'codepipeline-pipeline-manual-approval-failed', + 'codepipeline-pipeline-manual-approval-needed', + 'codepipeline-pipeline-manual-approval-succeeded' + ], + 'PipelineType': [ + 'V1', + 'V2' + ], + 'ExecutionMode': [ + 'QUEUED', + 'SUPERSEDED', + 'PARALLEL' + ], + 'GitPullRequestEvent': [ + 'OPEN', + 'UPDATED', + 'CLOSED' + ], + 'ProviderType': [ + 'CodeStarSourceConnection' + ], + 'DetailType': [ + 'BASIC', + 'FULL' + ], + 'VerificationEmailStyle': [ + 'CONFIRM_WITH_CODE', + 'CONFIRM_WITH_LINK' + ], + 'LambdaVersion': [ + 'V1_0', + 'V2_0' + ], + 'Mfa': [ + 'OFF', + 'OPTIONAL', + 'ON' + ], + 'AccountRecovery': [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + 'AdvancedSecurityMode': [ + 'ENFORCED', + 'AUDIT', + 'OFF' + ], + 'FeaturePlan': [ + 'LITE', + 'ESSENTIALS', + 'PLUS' + ], + 'MaximumExecutionFrequency': [ + 'One_Hour', + 'Three_Hours', + 'Six_Hours', + 'Twelve_Hours', + 'TwentyFour_Hours' + ], + 'EventSource': [ + 'aws.config' + ], + 'MessageType': [ + 'ConfigurationItemChangeNotification', + 'OversizedConfigurationItemChangeNotification', + 'ScheduledNotification', + 'ConfigurationSnapshotDeliveryCompleted' + ], + 'StorageType': [ + 'standard', + 'gp2', + 'gp3', + 'io1', + 'io2' + ], + 'CapacityMode': [ + 'FIXED', + 'AUTOSCALED' + ], + 'Operation': [ + 'GetItem', + 'BatchGetItem', + 'Scan', + 'Query', + 'GetRecords', + 'PutItem', + 'DeleteItem', + 'UpdateItem', + 'BatchWriteItem', + 'TransactWriteItems', + 'TransactGetItems', + 'ExecuteTransaction', + 'BatchExecuteStatement', + 'ExecuteStatement' + ], + 'AttributeType': [ + 'B', + 'N', + 'S' + ], + 'BillingMode': [ + 'PAY_PER_REQUEST', + 'PROVISIONED' + ], + 'ProjectionType': [ + 'KEYS_ONLY', + 'INCLUDE', + 'ALL' + ], + 'TableClass': [ + 'STANDARD', + 'STANDARD_INFREQUENT_ACCESS' + ], + 'StreamViewType': [ + 'NEW_IMAGE', + 'OLD_IMAGE', + 'NEW_AND_OLD_IMAGES', + 'KEYS_ONLY' + ], + 'InputCompressionType': [ + 'GZIP', + 'ZSTD', + 'NONE' + ], + 'ApproximateCreationDateTimePrecision': [ + 'MILLISECOND', + 'MICROSECOND' + ], + 'ServiceManager': [ + 0, + 1, + 2 + ], + 'TransportProtocol': [ + 'tcp', + 'udp' + ], + 'VpnPort': [ + 443, + 1194 + ], + 'ClientVpnSessionTimeout': [ + 8, + 10, + 12, + 24 + ], + 'InstanceClass': [ + 'standard3', + 'm3', + 'standard4', + 'm4', + 'standard5', + 'm5', + 'standard5-nvme-drive', + 'm5d', + 'standard5-amd', + 'm5a', + 'standard5-amd-nvme-drive', + 'm5ad', + 'standard5-high-performance', + 'm5n', + 'standard5-nvme-drive-high-performance', + 'm5dn', + 'standard5-high-compute', + 'm5zn', + 'memory3', + 'r3', + 'memory4', + 'r4', + 'memory5', + 'r5', + 'memory6-amd', + 'r6a', + 'memory6-intel', + 'r6i', + 'memory6-intel-nvme-drive', + 'r6id', + 'memory6-intel-high-performance', + 'r6in', + 'memory6-intel-nvme-drive-high-performance', + 'r6idn', + 'memory5-high-performance', + 'r5n', + 'memory5-nvme-drive', + 'r5d', + 'memory5-nvme-drive-high-performance', + 'r5dn', + 'memory5-amd', + 'r5a', + 'memory5-amd-nvme-drive', + 'r5ad', + 'high-memory-3tb-1', + 'u-3tb1', + 'high-memory-6tb-1', + 'u-6tb1', + 'high-memory-9tb-1', + 'u-9tb1', + 'high-memory-12tb-1', + 'u-12tb1', + 'high-memory-18tb-1', + 'u-18tb1', + 'high-memory-24tb-1', + 'u-24tb1', + 'high-memory-6tb-7', + 'u7i-6tb', + 'high-memory-8tb-7', + 'u7i-8tb', + 'high-memory-12tb-7', + 'u7i-12tb', + 'high-memory-high-network-16tb-7', + 'u7in-16tb', + 'high-memory-high-network-24tb-7', + 'u7in-24tb', + 'high-memory-high-network-32tb-7', + 'u7in-32tb', + 'high-memory-high-network-hpe-32tb-7', + 'u7inh-32tb', + 'memory5-ebs-optimized', + 'r5b', + 'memory6-graviton', + 'r6g', + 'memory6-graviton2-nvme-drive', + 'r6gd', + 'memory7-graviton', + 'r7g', + 'memory7-graviton3-nvme-drive', + 'r7gd', + 'memory7-intel-base', + 'r7i', + 'memory7-intel', + 'r7iz', + 'memory7-amd', + 'r7a', + 'memory8-graviton', + 'r8g', + 'compute3', + 'c3', + 'compute4', + 'c4', + 'compute5', + 'c5', + 'compute5-nvme-drive', + 'c5d', + 'compute5-amd', + 'c5a', + 'compute5-amd-nvme-drive', + 'c5ad', + 'compute5-high-performance', + 'c5n', + 'compute6-intel', + 'c6i', + 'compute6-intel-nvme-drive', + 'c6id', + 'compute6-intel-high-performance', + 'c6in', + 'compute6-amd', + 'c6a', + 'compute6-graviton2', + 'c6g', + 'compute7-graviton3', + 'c7g', + 'compute8-graviton4', + 'c8g', + 'compute6-graviton2-nvme-drive', + 'c6gd', + 'compute7-graviton3-nvme-drive', + 'c7gd', + 'compute6-graviton2-high-network-bandwidth', + 'c6gn', + 'compute7-graviton3-high-network-bandwidth', + 'c7gn', + 'compute7-intel', + 'c7i', + 'compute7-intel-flex', + 'c7i-flex', + 'compute7-amd', + 'c7a', + 'storage2', + 'd2', + 'storage3', + 'd3', + 'storage3-enhanced-network', + 'd3en', + 'storage-compute-1', + 'h1', + 'training-accelerator1', + 'trn1', + 'training-accelerator1-enhanced-network', + 'trn1n', + 'training-accelerator2', + 'trn2', + 'training-accelerator2-ultraserver', + 'trn2u', + 'io3', + 'i3', + 'io3-dense-nvme-drive', + 'i3en', + 'io4_intel', + 'i4i', + 'storage4_graviton', + 'i4g', + 'storage4-graviton-network-optimized', + 'im4gn', + 'storage4-graviton-network-storage-optimized', + 'is4gen', + 'storage7-intel-storage-optimized', + 'i7ie', + 'storage8-graviton', + 'i8g', + 'burstable2', + 't2', + 'burstable3', + 't3', + 'burstable3-amd', + 't3a', + 'burstable4-graviton', + 't4g', + 'memory-intensive-1', + 'x1', + 'memory-intensive-1-extended', + 'x1e', + 'memory-intensive-2-graviton2', + 'x2g', + 'memory-intensive-2-graviton2-nvme-drive', + 'x2gd', + 'memory_intensive_2_xt_intel', + 'x2iedn', + 'memory_intensive_2_intel', + 'x2idn', + 'memory_intensive_2_xtz_intel', + 'x2iezn', + 'memory-intensive-8-graviton', + 'x8g', + 'fpga1', + 'f1', + 'fpga2', + 'f2', + 'graphics3-small', + 'g3s', + 'graphics3', + 'g3', + 'graphics4-nvme-drive-high-performance', + 'g4dn', + 'graphics4-amd-nvme-drive', + 'g4ad', + 'graphics5', + 'g5', + 'graphics5-graviton2', + 'g5g', + 'graphics6', + 'g6', + 'graphics6-efficient', + 'g6e', + 'graphics-ram-6', + 'gr6', + 'parallel2', + 'p2', + 'parallel3', + 'p3', + 'parallel3-nvme-drive-high-performance', + 'p3dn', + 'parallel4-nvme-drive-extended', + 'p4de', + 'parallel4', + 'p4d', + 'parallel5', + 'p5', + 'parallel5-extended', + 'p5e', + 'parallel5-extended-network', + 'p5en', + 'arm1', + 'a1', + 'standard6-graviton', + 'm6g', + 'standard6-intel', + 'm6i', + 'standard6-intel-nvme-drive', + 'm6id', + 'standard6-intel-high-performance', + 'm6in', + 'standard6-intel-nvme-drive-high-performance', + 'm6idn', + 'standard6-amd', + 'm6a', + 'standard6-graviton2-nvme-drive', + 'm6gd', + 'standard7-graviton', + 'm7g', + 'standard8-graviton', + 'm8g', + 'standard7-graviton3-nvme-drive', + 'm7gd', + 'standard7-intel', + 'm7i', + 'standard7-intel-flex', + 'm7i-flex', + 'standard7-amd', + 'm7a', + 'high-compute-memory1', + 'z1d', + 'inference1', + 'inf1', + 'inference2', + 'inf2', + 'macintosh1-intel', + 'mac1', + 'macintosh2-m1', + 'mac2', + 'macintosh2-m2', + 'mac2-m2', + 'macintosh2-m2-pro', + 'mac2-m2pro', + 'macintosh2-m1-ultra', + 'mac2-m1ultra', + 'video-transcoding1', + 'vt1', + 'high-performance-computing6-amd', + 'hpc6a', + 'high-performance-computing6-intel-nvme-drive', + 'hpc6id', + 'high-performance-computing7-amd', + 'hpc7a', + 'high-performance-computing7-graviton', + 'hpc7g', + 'deep-learning1', + 'dl1', + 'deep-learning2-qualcomm', + 'dl2q' + ], + 'InstanceArchitecture': [ + 'arm64', + 'x86_64' + ], + 'InstanceSize': [ + 'nano', + 'micro', + 'small', + 'medium', + 'large', + 'xlarge', + '2xlarge', + '3xlarge', + '4xlarge', + '6xlarge', + '8xlarge', + '9xlarge', + '10xlarge', + '12xlarge', + '16xlarge', + '18xlarge', + '24xlarge', + '32xlarge', + '48xlarge', + '56xlarge', + '96xlarge', + '112xlarge', + '224xlarge', + '480xlarge', + 'metal', + 'metal-16xl', + 'metal-24xl', + 'metal-32xl', + 'metal-48xl' + ], + 'KeyPairFormat': [ + 'ppk', + 'pem' + ], + 'KeyPairType': [ + 'rsa', + 'ed25519' + ], + 'CpuCredits': [ + 'standard', + 'unlimited' + ], + 'InstanceInitiatedShutdownBehavior': [ + 'stop', + 'terminate' + ], + 'SpotInstanceInterruption': [ + 'stop', + 'terminate', + 'hibernate' + ], + 'SpotRequestType': [ + 'one-time', + 'persistent' + ], + 'LaunchTemplateHttpTokens': [ + 'optional', + 'required' + ], + 'NatTrafficDirection': [ + 'OUTBOUND_ONLY', + 'INBOUND_AND_OUTBOUND', + 'NONE' + ], + 'TrafficDirection': [ + 0, + 1 + ], + 'PlacementGroupSpreadLevel': [ + 'host', + 'rack' + ], + 'PlacementGroupStrategy': [ + 'cluster', + 'partition', + 'spread' + ], + 'VpcEndpointType': [ + 'Interface', + 'Gateway' + ], + 'FlowLogTrafficType': [ + 'ACCEPT', + 'ALL', + 'REJECT' + ], + 'FlowLogDestinationType': [ + 'cloud-watch-logs', + 's3', + 'kinesis-data-firehose' + ], + 'FlowLogFileFormat': [ + 'plain-text', + 'parquet' + ], + 'FlowLogMaxAggregationInterval': [ + 60, + 600 + ], + 'IpProtocol': [ + 'Ipv4_Only', + 'Dual_Stack' + ], + 'DefaultInstanceTenancy': [ + 'default', + 'dedicated' + ], + 'RouterType': [ + 'CarrierGateway', + 'EgressOnlyInternetGateway', + 'Gateway', + 'Instance', + 'LocalGateway', + 'NatGateway', + 'NetworkInterface', + 'TransitGateway', + 'VpcPeeringConnection', + 'VpcEndpoint' + ], + 'VpnConnectionType': [ + 'ipsec.1', + 'dummy' + ], + 'WindowsVersion': [ + 'Windows_Server-2019-English-Core-EKS_Optimized-1.22', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.22', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.23', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.23', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.24', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.24', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.25', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.25', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.26', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.26', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.27', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.27', + 'Windows_Server-2019-English-Core-EKS_Optimized-1.28', + 'Windows_Server-2019-English-Full-EKS_Optimized-1.28', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.23', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.23', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.24', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.24', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.25', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.25', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.26', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.26', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.27', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.27', + 'Windows_Server-2022-English-Core-EKS_Optimized-1.28', + 'Windows_Server-2022-English-Full-EKS_Optimized-1.28', + 'Windows_Server-1709-English-Core-ContainersLatest', + 'Windows_Server-1709-English-Core-Base', + 'Windows_Server-1803-English-Core-Base', + 'Windows_Server-1803-English-Core-ContainersLatest', + 'Windows_Server-1809-English-Core-Base', + 'Windows_Server-1809-English-Core-ContainersLatest', + 'Windows_Server-2003-R2_SP2-Language_Packs-32Bit-Base', + 'Windows_Server-2003-R2_SP2-English-64Bit-SQL_2005_SP4_Express', + 'Windows_Server-2003-R2_SP2-Language_Packs-64Bit-SQL_2005_SP4_Standard', + 'Windows_Server-2003-R2_SP2-English-32Bit-Base', + 'Windows_Server-2003-R2_SP2-English-64Bit-Base', + 'Windows_Server-2003-R2_SP2-Language_Packs-64Bit-SQL_2005_SP4_Express', + 'Windows_Server-2003-R2_SP2-English-64Bit-SQL_2005_SP4_Standard', + 'Windows_Server-2003-R2_SP2-Language_Packs-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Language_Packs-64Bit-Base', + 'Windows_Server-2008-SP2-English-64Bit-SQL_2008_SP4_Express', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2008_R2_SP3_Web', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2012_SP4_Express', + 'Windows_Server-2008-R2_SP1-Korean-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Chinese_Hong_Kong_SAR-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Chinese_PRC-64Bit-Base', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2008_R2_SP3_Express', + 'Windows_Server-2008-SP2-English-32Bit-Base', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2012_SP4_Web', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-Base', + 'Windows_Server-2008-SP2-English-64Bit-SQL_2008_SP4_Standard', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-SQL_2012_SP4_Express', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-SQL_2008_R2_SP3_Web', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-SQL_2012_SP4_Standard', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-SQL_2008_R2_SP3_Standard', + 'Windows_Server-2008-SP2-English-64Bit-Base', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2012_SP4_Enterprise', + 'Windows_Server-2008-R2_SP1-Japanese-64Bit-SQL_2008_R2_SP3_Express', + 'Windows_Server-2008-R2_SP1-Portuguese_Brazil-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Portugese_Brazil-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Language_Packs-64Bit-SQL_2008_R2_SP3_Standard', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2012_RTM_SP2_Enterprise', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2012_SP4_Standard', + 'Windows_Server-2008-SP2-Portuguese_Brazil-32Bit-Base', + 'Windows_Server-2008-SP2-Portugese_Brazil-32Bit-Base', + 'Windows_Server-2008-R2_SP1-English-64Bit-Base', + 'Windows_Server-2008-R2_SP1-Language_Packs-64Bit-SQL_2008_R2_SP3_Express', + 'Windows_Server-2008-R2_SP1-English-64Bit-Core_SQL_2012_SP4_Standard', + 'Windows_Server-2008-R2_SP1-English-64Bit-Core', + 'Windows_Server-2008-R2_SP1-English-64Bit-SQL_2008_R2_SP3_Standard', + 'Windows_Server-2008-R2_SP1-English-64Bit-SharePoint_2010_SP2_Foundation', + 'Windows_Server-2012-R2_RTM-Chinese_Simplified-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Chinese_Traditional-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Dutch-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP2_Enterprise', + 'Windows_Server-2012-R2_RTM-Hungarian-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2008_R2_SP3_Express', + 'Windows_Server-2008-R2_SP1-Portuguese_Brazil-64Bit-Core', + 'Windows_Server-2008-R2_SP1-Portugese_Brazil-64Bit-Core', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP2_Standard', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP2_Express', + 'Windows_Server-2012-RTM-Italian-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP1_Express', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP2_Web', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP3_Standard', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP2_Express', + 'Windows_Server-2012-R2_RTM-English-Deep-Learning', + 'Windows_Server-2012-R2_RTM-German-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP1_Express', + 'Windows_Server-2012-R2_RTM-Russian-64Bit-Base', + 'Windows_Server-2012-RTM-Chinese_Traditional_Hong_Kong_SAR-64Bit-Base', + 'Windows_Server-2012-RTM-Hungarian-64Bit-Base', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP3_Standard', + 'Windows_Server-2012-RTM-French-64Bit-Base', + 'Windows_Server-2012-R2_RTM-French-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Polish-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2012_SP4_Express', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP3_Standard', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2012_SP4_Standard', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP2_Express', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP3_Web', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP1_Web', + 'Windows_Server-2012-R2_RTM-English-64Bit-Core', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP2_Web', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP3_Enterprise', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP2_Standard', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP3_Web', + 'Windows_Server-2012-RTM-Swedish-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Portuguese_Brazil-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Portugese_Brazil-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Portuguese_Portugal-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Portugese_Portugal-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Swedish-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2012_SP4_Enterprise', + 'Windows_Server-2012-RTM-Chinese_Traditional-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP2_Standard', + 'Windows_Server-2012-RTM-Czech-64Bit-Base', + 'Windows_Server-2012-RTM-Turkish-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-HyperV', + 'Windows_Server-2012-RTM-Korean-64Bit-Base', + 'Windows_Server-2012-RTM-Russian-64Bit-Base', + 'Windows_Server-2012_R2_RTM-English-Full-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP2_Standard', + 'Windows_Server-2012-R2_RTM-Italian-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2008_R2_SP3_Standard', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP1_Standard', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2008_R2_SP3_Web', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP2_Web', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP2_Express', + 'Windows_Server-2012-R2_RTM-Czech-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP1_Standard', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2014_SP2_Express', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2012_SP4_Standard', + 'Windows_Server-2008-SP2-Portuguese_Brazil-64Bit-Base', + 'Windows_Server-2008-SP2-Portugese_Brazil-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP1_Web', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2014_SP3_Express', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP2_Enterprise', + 'Windows_Server-2012-RTM-Japanese-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP1_Enterprise', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP2_Express', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP3_Express', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP2_Standard', + 'Windows_Server-2012_RTM-English-Full-Base', + 'Windows_Server-2012-R2-English-STIG-Full', + 'Windows_Server-2012-RTM-Portuguese_Portugal-64Bit-Base', + 'Windows_Server-2012-RTM-Portugese_Portugal-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP1_Enterprise', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2014_SP2_Web', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2008_R2_SP3_Express', + 'Windows_Server-2012-R2_RTM-English-64Bit-Base', + 'Windows_Server-2012-RTM-Portuguese_Brazil-64Bit-Base', + 'Windows_Server-2012-RTM-Portugese_Brazil-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-P3', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2014_SP3_Standard', + 'Windows_Server-2012-R2_RTM-Spanish-64Bit-Base', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP3_Express', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP3_Standard', + 'Windows_Server-2012-R2-English-STIG-Core', + 'Windows_Server-2012-R2_RTM-Turkish-64Bit-Base', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2012_SP4_Web', + 'Windows_Server-2012-RTM-Polish-64Bit-Base', + 'Windows_Server-2012-RTM-Spanish-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP2_Web', + 'Windows_Server-2012-R2_RTM-Korean-64Bit-Base', + 'Windows_Server-2012-RTM-Dutch-64Bit-Base', + 'Windows_Server-2012-R2_RTM-Chinese_Traditional_Hong_Kong-64Bit-Base', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2014_SP3_Express', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP2_Enterprise', + 'Windows_Server-2012-RTM-Chinese_Simplified-64Bit-Base', + 'Windows_Server-2012-RTM-English-64Bit-SQL_2012_SP4_Web', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2014_SP3_Web', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP3_Express', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP3_Web', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP3_Standard', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP3_Express', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP3_Web', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2014_SP2_Standard', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2012_SP4_Express', + 'Windows_Server-2012-R2_RTM-Japanese-64Bit-SQL_2016_SP3_Enterprise', + 'Windows_Server-2012-R2_RTM-English-64Bit-SQL_2016_SP3_Enterprise', + 'Windows_Server-2016-English-Core-Containers', + 'Windows_Server-2016-English-Core-SQL_2016_SP1_Web', + 'Windows_Server-2016-German-Full-Base', + 'Windows_Server-2016-Germal-Full-Base', + 'Windows_Server-2016-English-Core-SQL_2016_SP1_Express', + 'Windows_Server-2016-English-Deep-Learning', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Web', + 'Windows_Server-2016-Korean-Full-Base', + 'Windows_Server-2016-Korean-Full-SQL_2016_SP2_Standard', + 'Windows_Server-2016-Polish-Full-Base', + 'Windows_Server-2016-English-Full-Containers', + 'Windows_Server-2016-English-Full-SQL_2016_SP1_Standard', + 'Windows_Server-2016-Russian-Full-Base', + 'Windows_Server-2016-English-Core-SQL_2016_SP2_Enterprise', + 'Windows_Server-2016-English-Full-SQL_2016_SP1_Express', + 'Windows_Server-2016-Italian-Full-Base', + 'Windows_Server-2016-Spanish-Full-Base', + 'Windows_Server-2012-RTM-German-64Bit-Base', + 'Windows_Server-2012-RTM-Japanese-64Bit-SQL_2008_R2_SP3_Standard', + 'Windows_Server-2016-English-Full-SQL_2016_SP2_Standard', + 'Windows_Server-2016-English-Full-SQL_2016_SP2_Enterprise', + 'Windows_Server-2016-English-Full-HyperV', + 'Windows_Server-2016-English-Core-ContainersLatest', + 'Windows_Server-2016-Dutch-Full-Base', + 'Windows_Server-2016-English-Full-SQL_2016_SP2_Express', + 'Windows_Server-2016-English-Full-SQL_2017_Enterprise', + 'Windows_Server-2016-Hungarian-Full-Base', + 'Windows_Server-2016-Korean-Full-SQL_2016_SP1_Standard', + 'Windows_Server-2016-English-Core-Base', + 'Windows_Server-2016-English-Full-Base', + 'Windows_Server-2016-English-Full-SQL_2017_Web', + 'Windows_Server-2016-English-Core-SQL_2016_SP1_Enterprise', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP1_Web', + 'Windows_Server-2016-Swedish-Full-Base', + 'Windows_Server-2016-Turkish-Full-Base', + 'Windows_Server-2016-Portuguese_Brazil-Full-Base', + 'Windows_Server-2016-Portugese_Brazil-Full-Base', + 'Windows_Server-2016-English-Full-SQL_2019_Standard', + 'Windows_Server-2016-English-Full-SQL_2014_SP3_Standard', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Enterprise', + 'Windows_Server-2016-English-64Bit-SQL_2012_SP4_Enterprise', + 'Windows_Server-2016-English-Core-SQL_2016_SP1_Standard', + 'Windows_Server-2016-English-Core-SQL_2016_SP2_Express', + 'Windows_Server-2016-English-Core-SQL_2016_SP2_Web', + 'Windows_Server-2016-English-Full-SQL_2017_Standard', + 'Windows_Server-2016-Portuguese_Portugal-Full-Base', + 'Windows_Server-2016-Portugese_Portugal-Full-Base', + 'Windows_Server-2016-English-Full-SQL_2014_SP3_Enterprise', + 'Windows_Server-2016-English-Full-SQL_2019_Enterprise', + 'Windows_Server-2016-Japanese-Full-SQL_2017_Standard', + 'Windows_Server-2016-English-Full-SQL_2019_Express', + 'Windows_Server-2016-Japanese-Full-SQL_2017_Web', + 'Windows_Server-2016-English-Core-SQL_2016_SP3_Web', + 'Windows_Server-2016-English-Full-SQL_2016_SP3_Enterprise', + 'Windows_Server-2016-English-STIG-Core', + 'Windows_Server-2016-Korean-Full-SQL_2016_SP3_Standard', + 'Windows_Server-2016-English-Full-ECS_Optimized', + 'Windows_Server-2016-English-Full-SQL_2016_SP3_Standard', + 'Windows_Server-2016-Japanese-Full-SQL_2017_Enterprise', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Express', + 'Windows_Server-2016-Japanese-Full-SQL_2019_Web', + 'Windows_Server-2016-English-Full-SQL_2016_SP3_Web', + 'Windows_Server-2016-English-Full-SQL_2016_SP1_Web', + 'Windows_Server-2016-English-P3', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP1_Enterprise', + 'Windows_Server-2016-Japanese-Full-Base', + 'Windows_Server-2016-Chinese_Simplified-Full-Base', + 'Windows_Server-2016-French-Full-Base', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Enterprise', + 'Windows_Server-2016-Czech-Full-Base', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP1_Standard', + 'Windows_Server-2016-English-Core-SQL_2016_SP2_Standard', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP2_Standard', + 'Windows_Server-2016-Chinese_Traditional-Full-Base', + 'Windows_Server-2016-English-Full-SQL_2016_SP2_Web', + 'Windows_Server-2016-English-Full-SQL_2017_Express', + 'Windows_Server-2016-English-Full-SQL_2019_Web', + 'Windows_Server-2016-English-Core-SQL_2016_SP3_Express', + 'Windows_Server-2016-Japanese-Full-SQL_2019_Standard', + 'Windows_Server-2016-English-Tesla', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Express', + 'Windows_Server-2016-English-STIG-Full', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Standard', + 'Windows_Server-2016-Japanese-Full-SQL_2019_Enterprise', + 'Windows_Server-2016-English-Core-SQL_2016_SP3_Enterprise', + 'Windows_Server-2016-English-Full-SQL_2016_SP3_Express', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Web', + 'Windows_Server-2016-English-Core-SQL_2016_SP3_Standard', + 'Windows_Server-2016-Japanese-Full-SQL_2016_SP1_Express', + 'Windows_Server-2016-English-Full-SQL_2016_SP1_Enterprise', + 'Windows_Server-2019-English-Full-SQL_2017_Web', + 'Windows_Server-2019-French-Full-Base', + 'Windows_Server-2019-Korean-Full-Base', + 'Windows_Server-2019-Italian-Full-Base', + 'Windows_Server-2019-Chinese_Simplified-Full-Base', + 'Windows_Server-2019-English-Full-SQL_2016_SP2_Web', + 'Windows_Server-2019-English-Full-HyperV', + 'Windows_Server-2019-English-Full-SQL_2016_SP2_Standard', + 'Windows_Server-2019-Hungarian-Full-Base', + 'Windows_Server-2019-English-Full-SQL_2016_SP2_Express', + 'Windows_Server-2019-Turkish-Full-Base', + 'Windows_Server-2019-English-Full-SQL_2019_Standard', + 'Windows_Server-2019-English-Full-SQL_2017_Standard', + 'Windows_Server-2019-English-Core-ContainersLatest', + 'Windows_Server-2019-English-Full-SQL_2017_Express', + 'Windows_Server-2019-Japanese-Full-Base', + 'Windows_Server-2019-Russian-Full-Base', + 'Windows_Server-2019-Chinese_Traditional-Full-Base', + 'Windows_Server-2019-English-Core-Base', + 'Windows_Server-2019-English-Full-Base', + 'Windows_Server-2019-Japanese-Full-SQL_2022_Standard', + 'Windows_Server-2019-Japanese-Full-SQL_2022_Enterprise', + 'Windows_Server-2019-English-Tesla', + 'Windows_Server-2019-English-Full-SQL_2019_Enterprise', + 'Windows_Server-2019-Spanish-Full-Base', + 'Windows_Server-2019-English-Full-SQL_2022_Enterprise', + 'Windows_Server-2019-English-STIG-Full', + 'Windows_Server-2019-English-Full-SQL_2016_SP3_Web', + 'Windows_Server-2019-English-Full-SQL_2016_SP3_Standard', + 'Windows_Server-2019-Japanese-Full-SQL_2017_Enterprise', + 'Windows_Server-2019-English-Full-SQL_2016_SP2_Enterprise', + 'Windows_Server-2019-Portuguese_Portugal-Full-Base', + 'Windows_Server-2019-Portugese_Portugal-Full-Base', + 'Windows_Server-2019-Swedish-Full-Base', + 'Windows_Server-2019-English-Full-SQL_2022_Express', + 'Windows_Server-2019-Japanese-Full-SQL_2022_Web', + 'Windows_Server-2019-English-Full-SQL_2016_SP3_Enterprise', + 'Windows_Server-2019-English-Full-SQL_2022_Web', + 'Windows_Server-2019-English-Full-SQL_2019_Web', + 'Windows_Server-2019-Portuguese_Brazil-Full-Base', + 'Windows_Server-2019-Portugese_Brazil-Full-Base', + 'Windows_Server-2019-English-Full-ContainersLatest', + 'Windows_Server-2019-English-Full-SQL_2017_Enterprise', + 'Windows_Server-2019-Japanese-Full-SQL_2019_Enterprise', + 'Windows_Server-2019-English-Full-SQL_2019_Express', + 'Windows_Server-2019-Japanese-Full-SQL_2017_Web', + 'Windows_Server-2019-English-Full-SQL_2016_SP3_Express', + 'Windows_Server-2019-English-STIG-Core', + 'Windows_Server-2019-English-Core-ECS_Optimized', + 'Windows_Server-2019-English-Full-SQL_2022_Standard', + 'Windows_Server-2019-Japanese-Full-SQL_2017_Standard', + 'Windows_Server-2019-Japanese-Full-SQL_2019_Web', + 'Windows_Server-2019-English-Full-ECS_Optimized', + 'Windows_Server-2019-English-Deep-Learning', + 'Windows_Server-2019-Japanese-Full-SQL_2019_Standard', + 'Windows_Server-2019-Czech-Full-Base', + 'Windows_Server-2019-Polish-Full-Base', + 'Windows_Server-2019-German-Full-Base', + 'Windows_Server-2019-Dutch-Full-Base', + 'Windows_Server-2022-English-STIG-Full', + 'Windows_Server-2022-Japanese-Full-SQL_2022_Web', + 'Windows_Server-2022-English-Full-SQL_2022_Web', + 'Windows_Server-2022-English-STIG-Core', + 'Windows_Server-2022-Japanese-Full-SQL_2019_Enterprise', + 'Windows_Server-2022-Portuguese_Brazil-Full-Base', + 'Windows_Server-2022-Italian-Full-Base', + 'Windows_Server-2022-English-Full-ContainersLatest', + 'Windows_Server-2022-Russian-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2019_Express', + 'Windows_Server-2022-Polish-Full-Base', + 'Windows_Server-2022-English-Core-Base', + 'Windows_Server-2022-Hungarian-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2017_Express', + 'Windows_Server-2022-German-Full-Base', + 'Windows_Server-2022-English-Core-ContainersLatest', + 'Windows_Server-2022-English-Full-SQL_2019_Standard', + 'Windows_Server-2022-Japanese-Full-SQL_2017_Web', + 'Windows_Server-2022-English-Full-SQL_2017_Web', + 'Windows_Server-2022-Japanese-Full-Base', + 'Windows_Server-2022-Korean-Full-Base', + 'Windows_Server-2022-Japanese-Full-SQL_2017_Enterprise', + 'Windows_Server-2022-Japanese-Full-SQL_2019_Standard', + 'Windows_Server-2022-Chinese_Simplified-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2019_Web', + 'Windows_Server-2022-Spanish-Full-Base', + 'Windows_Server-2022-English-Core-ECS_Optimized', + 'Windows_Server-2022-English-Full-SQL_2017_Standard', + 'Windows_Server-2022-Chinese_Traditional-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2019_Enterprise', + 'Windows_Server-2022-French-Full-Base', + 'Windows_Server-2022-Japanese-Full-SQL_2017_Standard', + 'Windows_Server-2022-English-Full-Base', + 'Windows_Server-2022-Japanese-Full-SQL_2019_Web', + 'Windows_Server-2022-Turkish-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2017_Enterprise', + 'Windows_Server-2022-Portuguese_Portugal-Full-Base', + 'Windows_Server-2022-Czech-Full-Base', + 'Windows_Server-2022-English-Full-ECS_Optimized', + 'Windows_Server-2022-Dutch-Full-Base', + 'Windows_Server-2022-Swedish-Full-Base', + 'Windows_Server-2022-English-Full-SQL_2022_Enterprise', + 'Windows_Server-2022-English-Full-SQL_2022_Express', + 'Windows_Server-2022-English-Full-SQL_2022_Standard', + 'Windows_Server-2022-Japanese-Full-SQL_2022_Standard', + 'Windows_Server-2022-Japanese-Full-SQL_2022_Enterprise' + ], + 'TagStatus': [ + 'any', + 'tagged', + 'untagged' + ], + 'CountType': [ + 'imageCountMoreThan', + 'sinceImagePushed' + ], + 'TagMutability': [ + 'MUTABLE', + 'IMMUTABLE' + ], + 'AmiHardwareType': [ + 'Standard', + 'GPU', + 'ARM64', + 'Neuron' + ], + 'WindowsOptimizedVersion': [ + '2022', + '2019', + '2016' + ], + 'BottlerocketEcsVariant': [ + 'aws-ecs-1', + 'aws-ecs-1-nvidia', + 'aws-ecs-2', + 'aws-ecs-2-nvidia' + ], + 'MachineImageType': [ + 0, + 1 + ], + 'ContainerInsights': [ + 'enabled', + 'disabled', + 'enhanced' + ], + 'ExecuteCommandLogging': [ + 'NONE', + 'DEFAULT', + 'OVERRIDE' + ], + 'ContainerDependencyCondition': [ + 'START', + 'COMPLETE', + 'SUCCESS', + 'HEALTHY' + ], + 'EnvironmentFileType': [ + 's3' + ], + 'FirelensLogRouterType': [ + 'fluentbit', + 'fluentd' + ], + 'FirelensConfigFileType': [ + 's3', + 'file' + ], + 'Capability': [ + 'ALL', + 'AUDIT_CONTROL', + 'AUDIT_WRITE', + 'BLOCK_SUSPEND', + 'CHOWN', + 'DAC_OVERRIDE', + 'DAC_READ_SEARCH', + 'FOWNER', + 'FSETID', + 'IPC_LOCK', + 'IPC_OWNER', + 'KILL', + 'LEASE', + 'LINUX_IMMUTABLE', + 'MAC_ADMIN', + 'MAC_OVERRIDE', + 'MKNOD', + 'NET_ADMIN', + 'NET_BIND_SERVICE', + 'NET_BROADCAST', + 'NET_RAW', + 'SETFCAP', + 'SETGID', + 'SETPCAP', + 'SETUID', + 'SYS_ADMIN', + 'SYS_BOOT', + 'SYS_CHROOT', + 'SYS_MODULE', + 'SYS_NICE', + 'SYS_PACCT', + 'SYS_PTRACE', + 'SYS_RAWIO', + 'SYS_RESOURCE', + 'SYS_TIME', + 'SYS_TTY_CONFIG', + 'SYSLOG', + 'WAKE_ALARM' + ], + 'BinPackResource': [ + 'CPU', + 'MEMORY' + ], + 'LifecyclePolicy': [ + 'AFTER_1_DAY', + 'AFTER_7_DAYS', + 'AFTER_14_DAYS', + 'AFTER_30_DAYS', + 'AFTER_60_DAYS', + 'AFTER_90_DAYS', + 'AFTER_180_DAYS', + 'AFTER_270_DAYS', + 'AFTER_365_DAYS' + ], + 'OutOfInfrequentAccessPolicy': [ + 'AFTER_1_ACCESS' + ], + 'PerformanceMode': [ + 'generalPurpose', + 'maxIO' + ], + 'ThroughputMode': [ + 'bursting', + 'provisioned', + 'elastic' + ], + 'ReplicationOverwriteProtection': [ + 'ENABLED', + 'DISABLED' + ], + 'ClientAction': [ + 'elasticfilesystem:ClientMount', + 'elasticfilesystem:ClientWrite', + 'elasticfilesystem:ClientRootAccess' + ], + 'AccessScopeType': [ + 'namespace', + 'cluster' + ], + 'AccessEntryType': [ + 'STANDARD', + 'FARGATE_LINUX', + 'EC2_LINUX', + 'EC2_WINDOWS' + ], + 'AlbScheme': [ + 'internal', + 'internet-facing' + ], + 'ClusterLoggingTypes': [ + 'api', + 'audit', + 'authenticator', + 'controllerManager', + 'scheduler' + ], + 'IpFamily': [ + 'ipv4', + 'ipv6' + ], + 'AuthenticationMode': [ + 'CONFIG_MAP', + 'API_AND_CONFIG_MAP', + 'API' + ], + 'CpuArch': [ + 'arm64', + 'x86_64' + ], + 'CoreDnsComputeType': [ + 'ec2', + 'fargate' + ], + 'DefaultCapacityType': [ + 0, + 1 + ], + 'PatchType': [ + 'json', + 'merge', + 'strategic' + ], + 'NodegroupAmiType': [ + 'AL2_x86_64', + 'AL2_x86_64_GPU', + 'AL2_ARM_64', + 'BOTTLEROCKET_ARM_64', + 'BOTTLEROCKET_x86_64', + 'BOTTLEROCKET_ARM_64_NVIDIA', + 'BOTTLEROCKET_x86_64_NVIDIA', + 'WINDOWS_CORE_2019_x86_64', + 'WINDOWS_CORE_2022_x86_64', + 'WINDOWS_FULL_2019_x86_64', + 'WINDOWS_FULL_2022_x86_64', + 'AL2023_x86_64_STANDARD', + 'AL2023_x86_64_NEURON', + 'AL2023_x86_64_NVIDIA', + 'AL2023_ARM_64_STANDARD' + ], + 'CapacityType': [ + 'SPOT', + 'ON_DEMAND' + ], + 'TaintEffect': [ + 'NO_SCHEDULE', + 'PREFER_NO_SCHEDULE', + 'NO_EXECUTE' + ], + 'IdentityType': [ + 'IRSA', + 'POD_IDENTITY' + ], + 'LifecycleLabel': [ + 'OnDemand', + 'Ec2Spot' + ], + 'LoadBalancingProtocol': [ + 'tcp', + 'ssl', + 'http', + 'https' + ], + 'TLSSecurityPolicy': [ + 'Policy-Min-TLS-1-0-2019-07', + 'Policy-Min-TLS-1-2-2019-07', + 'Policy-Min-TLS-1-2-PFS-2023-10' + ], + 'HttpMethod': [ + 'GET', + 'POST', + 'PUT', + 'DELETE', + 'PATCH', + 'HEAD', + 'OPTIONS' + ], + 'InputType': [ + 0, + 1 + ], + 'FileSystemTypeVersion': [ + '2.10', + '2.12', + '2.15' + ], + 'LustreDeploymentType': [ + 'SCRATCH_1', + 'SCRATCH_2', + 'PERSISTENT_1', + 'PERSISTENT_2' + ], + 'LustreAutoImportPolicy': [ + 'NONE', + 'NEW', + 'NEW_CHANGED', + 'NEW_CHANGED_DELETED' + ], + 'DriveCacheType': [ + 'NONE', + 'READ' + ], + 'LustreDataCompressionType': [ + 'NONE', + 'LZ4' + ], + 'Weekday': [ + '1', + '2', + '3', + '4', + '5', + '6', + '7' + ], + 'HealthCheckProtocol': [ + 'TCP', + 'HTTP', + 'HTTPS' + ], + 'ConnectionProtocol': [ + 'TCP', + 'UDP' + ], + 'ClientAffinity': [ + 'NONE', + 'SOURCE_IP' + ], + 'AccessKeyStatus': [ + 'Active', + 'Inactive' + ], + 'Effect': [ + 'Unknown', + 'Allow', + 'Deny' + ], + 'StreamEncryption': [ + 'NONE', + 'KMS', + 'MANAGED' + ], + 'StreamMode': [ + 'PROVISIONED', + 'ON_DEMAND' + ], + 'KeySpec': [ + 'SYMMETRIC_DEFAULT', + 'RSA_2048', + 'RSA_3072', + 'RSA_4096', + 'ECC_NIST_P256', + 'ECC_NIST_P384', + 'ECC_NIST_P521', + 'ECC_SECG_P256K1', + 'HMAC_224', + 'HMAC_256', + 'HMAC_384', + 'HMAC_512', + 'SM2' + ], + 'KeyUsage': [ + 'ENCRYPT_DECRYPT', + 'SIGN_VERIFY', + 'GENERATE_VERIFY_MAC', + 'KEY_AGREEMENT' + ], + 'AdotLambdaLayerType': [ + 'JAVA_SDK', + 'JAVA_AUTO_INSTRUMENTATION', + 'JAVASCRIPT_SDK', + 'PYTHON_SDK', + 'GENERIC' + ], + 'AdotLambdaExecWrapper': [ + '/opt/otel-handler', + '/opt/otel-proxy-handler', + '/opt/otel-stream-handler', + '/opt/otel-instrument', + '/opt/otel-sqs-handler' + ], + 'UntrustedArtifactOnDeployment': [ + 'Enforce', + 'Warn' + ], + 'DestinationType': [ + 'Failure', + 'Success' + ], + 'StartingPosition': [ + 'TRIM_HORIZON', + 'LATEST', + 'AT_TIMESTAMP' + ], + 'FunctionUrlAuthType': [ + 'AWS_IAM', + 'NONE' + ], + 'InvokeMode': [ + 'BUFFERED', + 'RESPONSE_STREAM' + ], + 'Tracing': [ + 'Active', + 'PassThrough', + 'Disabled' + ], + 'SystemLogLevel': [ + 'INFO', + 'DEBUG', + 'WARN' + ], + 'ApplicationLogLevel': [ + 'INFO', + 'DEBUG', + 'WARN', + 'TRACE', + 'ERROR', + 'FATAL' + ], + 'LogFormat': [ + 'Text', + 'JSON' + ], + 'LoggingFormat': [ + 'Text', + 'JSON' + ], + 'RecursiveLoop': [ + 'Allow', + 'Terminate' + ], + 'ParamsAndSecretsVersions': [ + '1.0.103' + ], + 'ParamsAndSecretsLogLevel': [ + 'debug', + 'info', + 'warn', + 'error', + 'none' + ], + 'RuntimeFamily': [ + 0, + 1, + 2 + ], + 'AuthenticationMethod': [ + 'SASL_SCRAM_512_AUTH', + 'SASL_SCRAM_256_AUTH', + 'BASIC_AUTH', + 'CLIENT_CERTIFICATE_TLS_AUTH' + ], + 'LockFile': [ + 'package-lock.json', + 'yarn.lock', + 'bun.lockb', + 'pnpm-lock.yaml' + ], + 'OutputFormat': [ + 'cjs', + 'esm' + ], + 'SourceMapMode': [ + 'default', + 'external', + 'inline', + 'both' + ], + 'Charset': [ + 'ascii', + 'utf8' + ], + 'RetentionDays': [ + 1, + 3, + 5, + 7, + 14, + 30, + 60, + 90, + 120, + 150, + 180, + 365, + 400, + 545, + 731, + 1096, + 1827, + 2192, + 2557, + 2922, + 3288, + 3653, + 9999 + ], + 'LogGroupClass': [ + 'STANDARD', + 'INFREQUENT_ACCESS' + ], + 'Distribution': [ + 'ByLogStream', + 'Random' + ], + 'InstanceType': [ + 'PROVISIONED', + 'SERVERLESS_V2' + ], + 'DBClusterStorageType': [ + 'aurora', + 'aurora-iopt1' + ], + 'InstanceUpdateBehaviour': [ + 'BULK', + 'ROLLING' + ], + 'ClusterScalabilityType': [ + 'standard', + 'limitless' + ], + 'ClusterScailabilityType': [ + 'standard', + 'limitless' + ], + 'LicenseModel': [ + 'license-included', + 'bring-your-own-license', + 'general-public-license' + ], + 'NetworkType': [ + 'IPV4', + 'DUAL' + ], + 'PerformanceInsightRetention': [ + 7, + 31, + 62, + 93, + 124, + 155, + 186, + 217, + 248, + 279, + 310, + 341, + 372, + 403, + 434, + 465, + 496, + 527, + 558, + 589, + 620, + 651, + 682, + 713, + 731 + ], + 'ClientPasswordAuthType': [ + 'MYSQL_NATIVE_PASSWORD', + 'POSTGRES_SCRAM_SHA_256', + 'POSTGRES_MD5', + 'SQL_SERVER_AUTHENTICATION' + ], + 'AuroraCapacityUnit': [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 192, + 256, + 384 + ], + 'TimeoutAction': [ + 'ForceApplyCapacityChange', + 'RollbackCapacityChange' + ], + 'Continent': [ + 'AF', + 'AN', + 'AS', + 'EU', + 'OC', + 'NA', + 'SA' + ], + 'InsufficientDataHealthStatusEnum': [ + 'Healthy', + 'Unhealthy', + 'LastKnownStatus' + ], + 'KeySigningKeyStatus': [ + 'ACTIVE', + 'INACTIVE' + ], + 'RecordType': [ + 'A', + 'AAAA', + 'CAA', + 'CNAME', + 'DS', + 'HTTPS', + 'MX', + 'NAPTR', + 'NS', + 'PTR', + 'SOA', + 'SPF', + 'SRV', + 'SSHFP', + 'SVCB', + 'TLSA', + 'TXT' + ], + 'CaaTag': [ + 'issue', + 'issuewild', + 'iodef' + ], + 'HttpMethods': [ + 'GET', + 'POST', + 'PUT', + 'DELETE', + 'PATCH', + 'HEAD' + ], + 'RedirectProtocol': [ + 'http', + 'https' + ], + 'InventoryFormat': [ + 'CSV', + 'Parquet', + 'ORC' + ], + 'InventoryFrequency': [ + 'Daily', + 'Weekly' + ], + 'InventoryObjectVersion': [ + 'All', + 'Current' + ], + 'ObjectOwnership': [ + 'BucketOwnerEnforced', + 'BucketOwnerPreferred', + 'ObjectWriter' + ], + 'PartitionDateSource': [ + 'EventTime', + 'DeliveryTime' + ], + 'TransitionDefaultMinimumObjectSize': [ + 'all_storage_classes_128K', + 'varies_by_storage_class' + ], + 'BucketEncryption': [ + 'UNENCRYPTED', + 'KMS_MANAGED', + 'S3_MANAGED', + 'KMS', + 'DSSE_MANAGED', + 'DSSE' + ], + 'EventType': [ + 's3:ObjectCreated:*', + 's3:ObjectCreated:Put', + 's3:ObjectCreated:Post', + 's3:ObjectCreated:Copy', + 's3:ObjectCreated:CompleteMultipartUpload', + 's3:ObjectRemoved:*', + 's3:ObjectRemoved:Delete', + 's3:ObjectRemoved:DeleteMarkerCreated', + 's3:ObjectRestore:Post', + 's3:ObjectRestore:Completed', + 's3:ObjectRestore:Delete', + 's3:ReducedRedundancyLostObject', + 's3:Replication:OperationFailedReplication', + 's3:Replication:OperationMissedThreshold', + 's3:Replication:OperationReplicatedAfterThreshold', + 's3:Replication:OperationNotTracked', + 's3:LifecycleExpiration:*', + 's3:LifecycleExpiration:Delete', + 's3:LifecycleExpiration:DeleteMarkerCreated', + 's3:LifecycleTransition', + 's3:IntelligentTiering', + 's3:ObjectTagging:*', + 's3:ObjectTagging:Put', + 's3:ObjectTagging:Delete', + 's3:ObjectAcl:Put' + ], + 'BucketAccessControl': [ + 'Private', + 'PublicRead', + 'PublicReadWrite', + 'AuthenticatedRead', + 'LogDeliveryWrite', + 'BucketOwnerRead', + 'BucketOwnerFullControl', + 'AwsExecRead' + ], + 'ObjectLockMode': [ + 'GOVERNANCE', + 'COMPLIANCE' + ], + 'BucketNotificationDestinationType': [ + 0, + 1, + 2 + ], + 'ServerSideEncryption': [ + 'AES256', + 'aws:kms' + ], + 'StorageClass': [ + 'STANDARD', + 'REDUCED_REDUNDANCY', + 'STANDARD_IA', + 'ONEZONE_IA', + 'INTELLIGENT_TIERING', + 'GLACIER', + 'DEEP_ARCHIVE' + ], + 'AttachmentTargetType': [ + 'AWS::RDS::DBInstance', + 'deprecated_AWS::RDS::DBInstance', + 'AWS::RDS::DBCluster', + 'deprecated_AWS::RDS::DBCluster', + 'AWS::RDS::DBProxy', + 'AWS::Redshift::Cluster', + 'AWS::DocDB::DBInstance', + 'AWS::DocDB::DBCluster' + ], + 'MessageLanguage': [ + 'en', + 'jp', + 'zh' + ], + 'NamespaceType': [ + 'HTTP', + 'DNS_PRIVATE', + 'DNS_PUBLIC' + ], + 'DiscoveryType': [ + 'API', + 'DNS_AND_API' + ], + 'DnsRecordType': [ + 'A', + 'AAAA', + 'A, AAAA', + 'SRV', + 'CNAME' + ], + 'RoutingPolicy': [ + 'WEIGHTED', + 'MULTIVALUE' + ], + 'EmailSendingEvent': [ + 'send', + 'reject', + 'bounce', + 'complaint', + 'delivery', + 'open', + 'click', + 'renderingFailure', + 'deliveryDelay', + 'subscription' + ], + 'CloudWatchDimensionSource': [ + 'emailHeader', + 'linkTag', + 'messageTag' + ], + 'ConfigurationSetTlsPolicy': [ + 'REQUIRE', + 'OPTIONAL' + ], + 'SuppressionReasons': [ + 'BOUNCES_AND_COMPLAINTS', + 'BOUNCES_ONLY', + 'COMPLAINTS_ONLY' + ], + 'ScalingMode': [ + 'STANDARD', + 'MANAGED' + ], + 'MailFromBehaviorOnMxFailure': [ + 'USE_DEFAULT_VALUE', + 'REJECT_MESSAGE' + ], + 'EasyDkimSigningKeyLength': [ + 'RSA_1024_BIT', + 'RSA_2048_BIT' + ], + 'ReceiptFilterPolicy': [ + 'Allow', + 'Block' + ], + 'TlsPolicy': [ + 'Optional', + 'Require' + ], + 'LambdaInvocationType': [ + 'RequestResponse', + 'Event', + 'DryRun' + ], + 'EmailEncoding': [ + 'Base64', + 'UTF-8' + ], + 'BackoffFunction': [ + 'ARITHMETIC', + 'EXPONENTIAL', + 'GEOMETRIC', + 'LINEAR' + ], + 'SubscriptionProtocol': [ + 'http', + 'https', + 'email', + 'email-json', + 'sms', + 'sqs', + 'application', + 'lambda', + 'firehose' + ], + 'FilterOrPolicyType': [ + 0, + 1 + ], + 'LoggingProtocol': [ + 'http/s', + 'sqs', + 'lambda', + 'firehose', + 'application' + ], + 'TracingConfig': [ + 'PassThrough', + 'Active' + ], + 'QueueEncryption': [ + 'NONE', + 'KMS_MANAGED', + 'KMS', + 'SQS_MANAGED' + ], + 'DeduplicationScope': [ + 'messageGroup', + 'queue' + ], + 'FifoThroughputLimit': [ + 'perQueue', + 'perMessageGroupId' + ], + 'RedrivePermission': [ + 'allowAll', + 'denyAll', + 'byQueue' + ], + 'ParameterValueType': [ + 'String', + 'AWS::EC2::AvailabilityZone::Name', + 'AWS::EC2::Image::Id', + 'AWS::EC2::Instance::Id', + 'AWS::EC2::KeyPair::KeyName', + 'AWS::EC2::SecurityGroup::GroupName', + 'AWS::EC2::SecurityGroup::Id', + 'AWS::EC2::Subnet::Id', + 'AWS::EC2::Volume::Id', + 'AWS::EC2::VPC::Id', + 'AWS::Route53::HostedZone::Id' + ], + 'ParameterType': [ + 'String', + 'SecureString', + 'StringList', + 'AWS::EC2::Image::Id' + ], + 'ParameterDataType': [ + 'text', + 'aws:ec2:image' + ], + 'ParameterTier': [ + 'Advanced', + 'Intelligent-Tiering', + 'Standard' + ], + 'CompoundOperator': [ + 0, + 1 + ], + 'StateMachineType': [ + 'EXPRESS', + 'STANDARD' + ], + 'ServiceIntegrationPattern': [ + 'FIRE_AND_FORGET', + 'SYNC', + 'WAIT_FOR_TASK_TOKEN' + ], + 'JitterType': [ + 'FULL', + 'NONE' + ], + 'ProcessorMode': [ + 'INLINE', + 'DISTRIBUTED' + ], + 'ProcessorType': [ + 'STANDARD', + 'EXPRESS' + ], + 'Cleanup': [ + 'nothing', + 'lambda' + ], + 'ArtifactsEncryptionMode': [ + 'SSE_S3', + 'SSE_KMS' + ], + 'ArnFormat': [ + 'arn:aws:service:region:account:resource', + 'arn:aws:service:region:account:resource:resourceName', + 'arn:aws:service:region:account:resource/resourceName', + 'arn:aws:service:region:account:/resource/resourceName' + ], + 'AssetHashType': [ + 'source', + 'bundle', + 'output', + 'custom' + ], + 'FileAssetPackaging': [ + 'zip', + 'file' + ], + 'BundlingOutput': [ + 'archived', + 'not-archived', + 'auto-discover', + 'single-file' + ], + 'BundlingFileAccess': [ + 'VOLUME_COPY', + 'BIND_MOUNT' + ], + 'DockerVolumeConsistency': [ + 'consistent', + 'delegated', + 'cached' + ], + 'CfnCapabilities': [ + '', + 'CAPABILITY_IAM', + 'CAPABILITY_NAMED_IAM', + 'CAPABILITY_AUTO_EXPAND' + ], + 'CfnTrafficRoutingType': [ + 'AllAtOnce', + 'TimeBasedCanary', + 'TimeBasedLinear' + ], + 'CfnDynamicReferenceService': [ + 'ssm', + 'ssm-secure', + 'secretsmanager' + ], + 'CfnDeletionPolicy': [ + 'Delete', + 'Retain', + 'RetainExceptOnCreate', + 'Snapshot' + ], + 'TagType': [ + 'StandardTag', + 'AutoScalingGroupTag', + 'StringToStringMap', + 'KeyValue', + 'NotTaggable' + ], + 'DependencyOperation': [ + 0, + 1 + ], + 'MetadataType': [ + 'aws:cdk:analytics:construct', + 'aws:cdk:analytics:method', + 'aws:cdk:analytics:featureflag' + ], + 'RemovalPolicy': [ + 'destroy', + 'retain', + 'snapshot', + 'retain-on-update-or-delete' + ], + 'SizeRoundingBehavior': [ + 0, + 1, + 2 + ], + 'ResolutionTypeHint': [ + 'string', + 'number', + 'string-list' + ], + 'DockerCredentialUsage': [ + 'SYNTH', + 'SELF_UPDATE', + 'ASSET_PUBLISHING' + ], + 'InvocationType': [ + 'RequestResponse', + 'Event', + 'DryRun' + ], + 'TriggerInvalidation': [ + 'WHEN_FUNCTION_CHANGES' + ], + 'HotswapMode': [ + 'fall-back', + 'hotswap-only', + 'full-deployment' + ], + 'StackActivityProgress': [ + 'bar', + 'events' + ], + 'ResourceImpact': [ + 'WILL_UPDATE', + 'WILL_CREATE', + 'WILL_REPLACE', + 'MAY_REPLACE', + 'WILL_DESTROY', + 'WILL_ORPHAN', + 'WILL_IMPORT', + 'NO_CHANGE' + ], + 'ComponentType': [ + 'Function', + 'SingletonFunction', + 'CustomResourceProvider', + 'NoOp' + ], + 'LoadBalancerIpAddressType': [ + 'ipv4', + 'dualstack', + 'dualstack-without-public-ipv4' + ], + 'VpcSubnetGroupType': [ + 'Public', + 'Private', + 'Isolated' + ], + 'FlagType': [ + 0, + 1, + 2, + 3 + ], + 'DiagnosticReason': [ + 'NO_SNAPSHOT', + 'TEST_FAILED', + 'TEST_ERROR', + 'SNAPSHOT_FAILED', + 'SNAPSHOT_ERROR', + 'SNAPSHOT_SUCCESS', + 'TEST_SUCCESS', + 'ASSERTION_FAILED' + ], + 'LogType': [ + 'None', + 'Tail' + ], + 'DefaultSelection': [ + 'none', + 'single', + 'main', + 'all' + ], + 'ExtendedStackSelection': [ + 'none', + 'upstream', + 'downstream' + ], + 'Mode': [ + 'SingleModel', + 'MultiModel' + ], + 'FollowMode': [ + 'never', + 'always', + 'external', + 'internal-only' + ], + 'CorsHttpMethod': [ + '*', + 'DELETE', + 'GET', + 'HEAD', + 'OPTIONS', + 'PATCH', + 'POST', + 'PUT' + ], + 'HttpAuthorizerType': [ + 'AWS_IAM', + 'JWT', + 'REQUEST' + ], + 'AuthorizerPayloadVersion': [ + '1.0', + '2.0' + ], + 'HttpIntegrationType': [ + 'HTTP_PROXY', + 'AWS_PROXY' + ], + 'HttpIntegrationSubtype': [ + 'EventBridge-PutEvents', + 'SQS-SendMessage', + 'SQS-ReceiveMessage', + 'SQS-DeleteMessage', + 'SQS-PurgeQueue', + 'AppConfig-GetConfiguration', + 'Kinesis-PutRecord', + 'StepFunctions-StartExecution', + 'StepFunctions-StartSyncExecution', + 'StepFunctions-StopExecution' + ], + 'HttpConnectionType': [ + 'VPC_LINK', + 'INTERNET' + ], + 'HttpRouteAuthorizationType': [ + 'AWS_IAM', + 'JWT', + 'CUSTOM', + 'NONE' + ], + 'WebSocketAuthorizerType': [ + 'REQUEST', + 'AWS_IAM' + ], + 'WebSocketIntegrationType': [ + 'AWS_PROXY', + 'MOCK', + 'AWS' + ], + 'HttpLambdaResponseType': [ + 0, + 1 + ], + 'CustomLambdaDeploymentConfigType': [ + 'Canary', + 'Linear' + ], + 'AutoRollbackEvent': [ + 'DEPLOYMENT_FAILURE', + 'DEPLOYMENT_STOP_ON_ALARM', + 'DEPLOYMENT_STOP_ON_REQUEST' + ], + 'LoadBalancerGeneration': [ + 0, + 1 + ], + 'StackSetOrganizationsAutoDeployment': [ + 'Enabled', + 'Disabled', + 'EnabledWithStackRetention' + ], + 'CodeBuildActionType': [ + 0, + 1 + ], + 'CodeCommitTrigger': [ + 'None', + 'Poll', + 'Events' + ], + 'GitHubTrigger': [ + 'None', + 'Poll', + 'WebHook' + ], + 'JenkinsActionType': [ + 0, + 1 + ], + 'S3Trigger': [ + 'None', + 'Poll', + 'Events' + ], + 'OidcAttributeRequestMethod': [ + 'GET', + 'POST' + ], + 'SigningAlgorithm': [ + 'rsa-sha256' + ], + 'UserPoolIdentityProviderSamlMetadataType': [ + 'url', + 'file' + ], + 'AmazonLinuxGeneration': [ + 'amzn', + 'amzn2', + 'al2022', + 'al2023' + ], + 'OperatingSystemType': [ + 0, + 1, + 2 + ], + 'AmazonLinuxCpuType': [ + 'arm64', + 'x86_64' + ], + 'AmazonLinuxEdition': [ + 'standard', + 'minimal' + ], + 'AmazonLinuxVirt': [ + 'hvm', + 'pv' + ], + 'AmazonLinuxStorage': [ + 'ebs', + 's3', + 'gp2' + ], + 'AmazonLinuxKernel': [ + 'kernel-5.10', + 'kernel-6.1' + ], + 'InitElementType': [ + 'PACKAGE', + 'GROUP', + 'USER', + 'SOURCE', + 'FILE', + 'COMMAND', + 'SERVICE' + ], + 'InitPlatform': [ + 'WINDOWS', + 'LINUX' + ], + 'AlarmBehavior': [ + 'ROLLBACK_ON_ALARM', + 'FAIL_ON_ALARM' + ], + 'LaunchType': [ + 'EC2', + 'FARGATE', + 'EXTERNAL' + ], + 'DeploymentControllerType': [ + 'ECS', + 'CODE_DEPLOY', + 'EXTERNAL' + ], + 'PropagatedTagSource': [ + 'SERVICE', + 'TASK_DEFINITION', + 'NONE' + ], + 'FileSystemType': [ + 'ext3', + 'ext4', + 'xfs' + ], + 'EbsPropagatedTagSource': [ + 'SERVICE', + 'TASK_DEFINITION' + ], + 'NetworkMode': [ + 'none', + 'bridge', + 'awsvpc', + 'host', + 'nat' + ], + 'IpcMode': [ + 'none', + 'host', + 'task' + ], + 'PidMode': [ + 'host', + 'task' + ], + 'Scope': [ + 'task', + 'shared' + ], + 'FargatePlatformVersion': [ + 'LATEST', + '1.4.0', + '1.3.0', + '1.2.0', + '1.1.0', + '1.0.0' + ], + 'AwsLogDriverMode': [ + 'blocking', + 'non-blocking' + ], + 'GelfCompressionType': [ + 'gzip', + 'zlib', + 'none' + ], + 'SplunkLogFormat': [ + 'inline', + 'json', + 'raw' + ], + 'ApplicationLoadBalancedServiceRecordType': [ + 0, + 1, + 2 + ], + 'NetworkLoadBalancedServiceRecordType': [ + 0, + 1, + 2 + ], + 'UnauthenticatedAction': [ + 'deny', + 'allow', + 'authenticate' + ], + 'ContentType': [ + 'text/plain', + 'text/css', + 'text/html', + 'application/javascript', + 'application/json' + ], + 'MutualAuthenticationMode': [ + 'off', + 'passthrough', + 'verify' + ], + 'XffHeaderProcessingMode': [ + 'append', + 'preserve', + 'remove' + ], + 'HttpCodeElb': [ + 'HTTPCode_ELB_3XX_Count', + 'HTTPCode_ELB_4XX_Count', + 'HTTPCode_ELB_5XX_Count', + 'HTTPCode_ELB_500_Count', + 'HTTPCode_ELB_502_Count', + 'HTTPCode_ELB_503_Count', + 'HTTPCode_ELB_504_Count' + ], + 'HttpCodeTarget': [ + 'HTTPCode_Target_2XX_Count', + 'HTTPCode_Target_3XX_Count', + 'HTTPCode_Target_4XX_Count', + 'HTTPCode_Target_5XX_Count' + ], + 'RevocationType': [ + 'CRL' + ], + 'ClientRoutingPolicy': [ + 'availability_zone_affinity', + 'partial_availability_zone_affinity', + 'any_availability_zone' + ], + 'TargetGroupIpAddressType': [ + 'ipv4', + 'ipv6' + ], + 'ApplicationProtocol': [ + 'HTTP', + 'HTTPS' + ], + 'ApplicationProtocolVersion': [ + 'GRPC', + 'HTTP1', + 'HTTP2' + ], + 'SslPolicy': [ + 'ELBSecurityPolicy-TLS13-1-2-2021-06', + 'ELBSecurityPolicy-2016-08', + 'ELBSecurityPolicy-TLS13-1-2-Res-2021-06', + 'ELBSecurityPolicy-TLS13-1-2-Ext1-2021-06', + 'ELBSecurityPolicy-TLS13-1-2-Ext2-2021-06', + 'ELBSecurityPolicy-TLS13-1-0-2021-06', + 'ELBSecurityPolicy-TLS13-1-1-2021-06', + 'ELBSecurityPolicy-TLS13-1-3-2021-06', + 'ELBSecurityPolicy-TLS13-1-3-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-2-Res-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-2-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-2-Ext0-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-2-Ext1-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-2-Ext2-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-1-FIPS-2023-04', + 'ELBSecurityPolicy-TLS13-1-0-FIPS-2023-04', + 'ELBSecurityPolicy-FS-1-2-Res-2020-10', + 'ELBSecurityPolicy-FS-1-2-Res-2019-08', + 'ELBSecurityPolicy-FS-1-2-2019-08', + 'ELBSecurityPolicy-FS-1-1-2019-08', + 'ELBSecurityPolicy-FS-2018-06', + 'ELBSecurityPolicy-TLS-1-2-2017-01', + 'ELBSecurityPolicy-TLS-1-2-Ext-2018-06', + 'ELBSecurityPolicy-TLS-1-1-2017-01', + 'ELBSecurityPolicy-TLS-1-0-2015-04' + ], + 'TargetType': [ + 'instance', + 'ip', + 'lambda', + 'alb' + ], + 'AlpnPolicy': [ + 'HTTP1Only', + 'HTTP2Only', + 'HTTP2Optional', + 'HTTP2Preferred', + 'None' + ], + 'TargetGroupLoadBalancingAlgorithmType': [ + 'round_robin', + 'least_outstanding_requests', + 'weighted_random' + ], + 'DesyncMitigationMode': [ + 'monitor', + 'defensive', + 'strictest' + ], + 'IntegrationPattern': [ + 'REQUEST_RESPONSE', + 'RUN_JOB', + 'WAIT_FOR_TASK_TOKEN' + ], + 'AuthType': [ + 'NO_AUTH', + 'IAM_ROLE', + 'RESOURCE_POLICY' + ], + 'EncryptionOption': [ + 'SSE_S3', + 'SSE_KMS', + 'CSE_KMS' + ], + 'DynamoConsumedCapacity': [ + 'INDEXES', + 'TOTAL', + 'NONE' + ], + 'DynamoItemCollectionMetrics': [ + 'SIZE', + 'NONE' + ], + 'DynamoReturnValues': [ + 'NONE', + 'ALL_OLD', + 'UPDATED_OLD', + 'ALL_NEW', + 'UPDATED_NEW' + ], + 'ActionOnFailure': [ + 'TERMINATE_CLUSTER', + 'CANCEL_AND_WAIT', + 'CONTINUE' + ], + 'ContainerProviderTypes': [ + 'EKS' + ], + 'ActionAfterCompletion': [ + 'NONE', + 'DELETE' + ], + 'URLEncodingFormat': [ + 'BRACKETS', + 'COMMAS', + 'DEFAULT', + 'INDICES', + 'NONE', + 'REPEAT' + ], + 'S3DataType': [ + 'ManifestFile', + 'S3Prefix', + 'AugmentedManifestFile' + ], + 'S3DataDistributionType': [ + 'FullyReplicated', + 'ShardedByS3Key' + ], + 'RecordWrapperType': [ + 'None', + 'RecordIO' + ], + 'InputMode': [ + 'Pipe', + 'File', + 'FastFile' + ], + 'BatchStrategy': [ + 'MultiRecord', + 'SingleRecord' + ], + 'SplitType': [ + 'None', + 'Line', + 'RecordIO', + 'TFRecord' + ], + 'AssembleWith': [ + 'None', + 'Line' + ], + 'MessageAttributeDataType': [ + 'String', + 'String.Array', + 'Number', + 'Binary' + ], + 'CustomResourceProviderRuntime': [ + 'nodejs12.x', + 'deprecated_nodejs12.x', + 'nodejs14.x', + 'nodejs16.x', + 'nodejs18.x', + 'nodejs20.x' + ], + 'SymlinkFollowMode': [ + 'never', + 'always', + 'external', + 'internal-only' + ], + 'IgnoreMode': [ + 'glob', + 'git', + 'docker' + ], + 'CfnParsingContext': [ + 0, + 1 + ], + 'ReferenceRendering': [ + 0, + 1 + ], + 'PolicyValidationReportStatusBeta1': [ + 'success', + 'failure' + ], + 'AssetType': [ + 'file', + 'docker-image' + ], + 'CodeBuildProjectType': [ + 'SYNTH', + 'ASSETS', + 'SELF_MUTATE', + 'STEP' + ], + 'HandlerName': [ + 'user', + 'table', + 'user-table-privileges' + ], + 'CfnUtilsResourceType': [ + 'Custom::AWSCDKCfnJson', + 'Custom::AWSCDKCfnJsonStringify' + ], + 'StackSelectionStrategy': [ + 'ALL_STACKS', + 'MAIN_ASSEMBLY', + 'ONLY_SINGLE', + 'PATTERN_MATCH', + 'PATTERN_MUST_MATCH', + 'PATTERN_MUST_MATCH_SINGLE' + ], + 'RollbackChoice': [ + 0, + 1, + 2, + 3 + ], + 'CsvHeaderLocation': [ + 'FIRST_ROW', + 'GIVEN' + ], + 'StateType': [ + 'Pass', + 'Task', + 'Choice', + 'Wait', + 'Succeed', + 'Fail', + 'Parallel', + 'Map' + ], + 'DynamoMethod': [ + 'Get', + 'Put', + 'Delete', + 'Update' + ], + 'AssertionType': [ + 'equals', + 'objectLike', + 'arrayWith' + ], + 'Status': [ + 'pass', + 'fail' + ] +}; diff --git a/packages/aws-cdk-lib/core/lib/constants.ts b/packages/aws-cdk-lib/core/lib/constants.ts new file mode 100644 index 0000000000000..43e30e265a6ad --- /dev/null +++ b/packages/aws-cdk-lib/core/lib/constants.ts @@ -0,0 +1,12 @@ +/** + * Resource symbol for re-usability. + */ +export const RESOURCE_SYMBOL = Symbol.for('@aws-cdk/core.Resource'); + +/** + * Symbol for accessing jsii runtime information + * + * Introduced in jsii 1.19.0, cdk 1.90.0. + */ +export const JSII_RUNTIME_SYMBOL = Symbol.for('jsii.rtti'); + diff --git a/packages/aws-cdk-lib/core/lib/custom-resource.ts b/packages/aws-cdk-lib/core/lib/custom-resource.ts index 134cefab3c505..833dc84bea1f3 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 { addConstructMetadata } from './metadata-resource'; import { RemovalPolicy } from './removal-policy'; import { Resource } from './resource'; import { Token } from './token'; @@ -137,6 +138,8 @@ export class CustomResource extends Resource { constructor(scope: Construct, id: string, props: CustomResourceProps) { super(scope, id); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); const type = renderResourceType(props.resourceType); const pascalCaseProperties = props.pascalCaseProperties ?? false; 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..cef81f7d5e3cd --- /dev/null +++ b/packages/aws-cdk-lib/core/lib/metadata-resource.ts @@ -0,0 +1,176 @@ +import { Construct, IConstruct } from 'constructs'; +import { AWS_CDK_CONSTRUCTOR_PROPS } from './analytics-data-source/classes'; +import { AWS_CDK_ENUMS } from './analytics-data-source/enums'; +import { Annotations } from './annotations'; +import { RESOURCE_SYMBOL, JSII_RUNTIME_SYMBOL } from './constants'; +import { FeatureFlags } from './feature-flags'; +import { Resource } from './resource'; +import { Token } from './token'; +import { ENABLE_ADDITIONAL_METADATA_COLLECTION } from '../../cx-api'; + +/** + * 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_FLAG = 'aws:cdk:analytics:featureflag', +} + +export function addConstructMetadata(scope: Construct, props: any): void { + try { + addMetadata(scope, MetadataType.CONSTRUCT, props); + } catch (e) { + /** + * Errors are ignored here. + * We do not want the metadata parsing to block users to synth or + * deploy their CDK application. + * + * Without this, it will just fall back to the previous metadata + * collection strategy. + */ + Annotations.of(scope).addWarningV2('@aws-cdk/core:addConstructMetadataFailed', `Failed to add construct metadata for node [${scope.node.id}]. Reason: ${e}`); + } +} + +function addMetadata(scope: Construct, type: MetadataType, props: any): void { + const telemetryEnabled = FeatureFlags.of(scope).isEnabled(ENABLE_ADDITIONAL_METADATA_COLLECTION) ?? false; + if (!telemetryEnabled) { + return; + } + const fqn: string = Object.getPrototypeOf(scope).constructor[JSII_RUNTIME_SYMBOL].fqn; + scope.node.addMetadata(type, redactMetadata(fqn, props)); +} + +/** + * 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. + */ +export function isResource(construct: IConstruct): construct is Resource { + return construct !== null && typeof(construct) === 'object' && RESOURCE_SYMBOL in construct; +} + +/** + * Redact values from dictionary values other than Boolean and ENUM-type values. + * @TODO we will build a JSON blueprint of ENUM-type values in the codebase and + * do not redact the ENUM-type values if it match any key in the blueprint. + */ +export function redactMetadata(fqn: string, data: any): any { + // A valid fqn is consists of 3 parts, i.e. `aws-cdk-lib.aws-lambda.Function`. + const fqnParts = fqn.replace(/[-_]/g, '-').split('.'); + if (fqnParts.length !== 3) { + return '*'; + } + const module = fqnParts.slice(0, 2).join('.'); + const name = fqnParts[2]; + if (!Object.keys(AWS_CDK_CONSTRUCTOR_PROPS).includes(module)) { + // redact if the module is not in the blueprint + return '*'; + } + + if (!Object.keys(AWS_CDK_CONSTRUCTOR_PROPS[module]).includes(name)) { + // redact if class is not found in module in blueprint + return '*'; + } + + const allowedKeys = AWS_CDK_CONSTRUCTOR_PROPS[module][name]; + return redactTelemetryDataHelper(allowedKeys, data); +} + +export function redactTelemetryDataHelper(allowedKeys: any, data: any): any { + // If no key is allowed + if (allowedKeys === undefined) { + return '*'; + } + + // Return boolean as is + if (typeof data === 'boolean') { + return data; + } + + // Do not redact boolean value + if (isEnumValue(allowedKeys, data)) { + return data; + } + + // Redact string value or number value + if (typeof data === 'string' || typeof data === 'number') { + return '*'; + } + + // Redact unresolved token + if (data && Token.isUnresolved(data)) { + return '*'; + } + + if (Array.isArray(data)) { + // Handle arrays by recursively redacting each element + return data.map((item) => redactTelemetryDataHelper(allowedKeys, item)); + } + + // Handle objects by iterating over their key-value pairs + if (data && Object.keys(data).length > 0 && typeof data === 'object') { + // If object is any construct, redact it to avoid duplication + if (Construct.isConstruct(data)) { + return '*'; + } + + const redactedResult: Record = {}; + for (const [key, value] of Object.entries(data)) { + // if key is unresolved token, we skip the key entirely + if (key && Token.isUnresolved(key)) { + continue; + } + + // Redact any keys that do not exist in the blueprint + if (allowedKeys && typeof allowedKeys === 'object') { + if (!Object.keys(allowedKeys).includes(key)) { + continue; + } + + // Redact any value is the value is customer input + const allowedValue = allowedKeys[key]; + if (allowedValue === '*') { + redactedResult[key] = '*'; + continue; + } + + redactedResult[key] = redactTelemetryDataHelper(allowedKeys[key], value); + } + } + return redactedResult; + } + + // Redact any other type of data + return '*'; +} + +/** + * Check if a value is an ENUM and matches the ENUM blueprint. + */ +export function isEnumValue(allowedKeys: any, value: any): boolean { + if (typeof allowedKeys !== 'string' || allowedKeys === '*') { + return false; + } + + if (!Object.keys(AWS_CDK_ENUMS).includes(allowedKeys)) { + return false; + } + + return AWS_CDK_ENUMS[allowedKeys].includes(value); +} 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..c26555d4a3159 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,6 @@ -import { IConstruct } from 'constructs'; +import { IConstruct, MetadataEntry } from 'constructs'; import { App } from '../app'; +import { isResource, MetadataType } from '../metadata-resource'; import { Stack } from '../stack'; import { Stage } from '../stage'; import { IPolicyValidationPluginBeta1 } from '../validation'; @@ -24,6 +25,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 +34,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) ? filterMetadataType(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 +46,23 @@ 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 filterMetadataType(metadata: MetadataEntry[]): Record[] { + const validTypes = new Set([ + MetadataType.CONSTRUCT, + MetadataType.METHOD, + MetadataType.FEATURE_FLAG, + ]); + + return metadata + .filter((entry) => validTypes.has(entry.type as MetadataType)) + .map((entry) => entry.data as Record); +} + /** * Add analytics data for any validation plugins that are used. * Since validation plugins are not constructs we have to handle them @@ -106,14 +129,21 @@ 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()); } /** diff --git a/packages/aws-cdk-lib/core/lib/resource.ts b/packages/aws-cdk-lib/core/lib/resource.ts index ee79dc233fdb8..89d1c83ac6d89 100644 --- a/packages/aws-cdk-lib/core/lib/resource.ts +++ b/packages/aws-cdk-lib/core/lib/resource.ts @@ -1,5 +1,6 @@ import { ArnComponents, ArnFormat } from './arn'; import { CfnResource } from './cfn-resource'; +import { RESOURCE_SYMBOL } from './constants'; import { IStringProducer, Lazy } from './lazy'; import { generatePhysicalName, isGeneratedWhenNeededMarker } from './private/physical-name-generator'; import { Reference } from './reference'; @@ -12,8 +13,6 @@ import { Token, Tokenization } from './token'; // eslint-disable-next-line import/order import { Construct, IConstruct } from 'constructs'; -const RESOURCE_SYMBOL = Symbol.for('@aws-cdk/core.Resource'); - /** * Represents the environment a given resource lives in. * Used as the return value for the `IResource.env` property. 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 646fe770c1c16..4bffacc71b96f 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,10 @@ 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 { Queue } from '../../aws-sqs'; +import { ENABLE_ADDITIONAL_METADATA_COLLECTION } from '../../cx-api'; +import { App, Stack, IPolicyValidationPluginBeta1, IPolicyValidationContextBeta1, Stage, PolicyValidationPluginReportBeta1, FeatureFlags, Duration } from '../lib'; +import { MetadataType } from '../lib/metadata-resource'; import { formatAnalytics } from '../lib/private/metadata-resource'; import { ConstructInfo } from '../lib/private/runtime-info'; @@ -49,6 +53,72 @@ describe('MetadataResource', () => { expect(stackTemplate.Resources?.CDKMetadata?.Condition).toBeDefined(); }); + 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 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('enable additional metadata with metadata', () => { + const myApp = new App({ + analyticsReporting: true, + postCliContext: { + [ENABLE_ADDITIONAL_METADATA_COLLECTION]: true, + }, + }); + + const myStack = new Stack(myApp, 'EnableTelemtryStack'); + const queueProp = { + visibilityTimeout: Duration.seconds(300), + }; + const queue = new Queue(myStack, '01234test', queueProp); + queue.node.addMetadata(MetadataType.CONSTRUCT, queueProp); + + const funcProp = { + runtime: Runtime.PYTHON_3_9, + handler: 'index.handler', + code: Code.fromInline('def handler(event, context):\n\tprint(\'The function has been invoked.\')'), + }; + new Function(myStack, 'MyFunction', funcProp); + + const template = myApp.synth().getStackByName('EnableTelemtryStack').template; + expect(template.Resources?.CDKMetadata).toBeDefined(); + }); + 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 +232,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/metadata.test.ts b/packages/aws-cdk-lib/core/test/metadata.test.ts new file mode 100644 index 0000000000000..39af66c577b9f --- /dev/null +++ b/packages/aws-cdk-lib/core/test/metadata.test.ts @@ -0,0 +1,151 @@ +import * as metadata from '../lib/metadata-resource'; +import { Token } from '../lib/token'; + +describe('redactMetadata', () => { + jest.mock('../lib/analytics-data-source/classes', () => ({ + AWS_CDK_CONSTRUCTOR_PROPS: { + 'aws-cdk-lib.aws-lambda': { + Function: { key1: '*', key2: '*' }, + }, + 'aws-cdk-lib.aws-s3': { + Bucket: { key1: '*', key2: '*' }, + }, + }, + })); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should redact when fqn does not have 3 parts', () => { + const data = { key1: 'value1' }; + const spy = jest.spyOn(metadata, 'redactTelemetryDataHelper'); + expect(metadata.redactMetadata('invalid-fqn', data)).toBe('*'); + expect(spy).not.toHaveBeenCalled(); + spy.mockRestore(); + }); + + it('should redact when module is not in AWS_CDK_CONSTRUCTOR_PROPS', () => { + const data = { key1: 'value1' }; + const spy = jest.spyOn(metadata, 'redactTelemetryDataHelper'); + expect(metadata.redactMetadata('aws-cdk-lib.aws-unknown.Function', data)).toBe('*'); + expect(spy).not.toHaveBeenCalled(); + spy.mockRestore(); + }); + + it('should redact when class name is not found in module', () => { + const data = { key1: 'value1' }; + const spy = jest.spyOn(metadata, 'redactTelemetryDataHelper'); + expect(metadata.redactMetadata('aws-cdk-lib.aws-lambda.UnknownClass', data)).toBe('*'); + expect(spy).not.toHaveBeenCalled(); + spy.mockRestore(); + }); +}); + +jest.mock('../lib/token', () => ({ + Token: { + isUnresolved: jest.fn(), + asString: jest.fn(), + asList: jest.fn(), + asNumber: jest.fn(), + }, +})); + +describe('redactTelemetryDataHelper', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should return boolean values as is', () => { + expect(metadata.redactTelemetryDataHelper({}, true)).toBe(true); + expect(metadata.redactTelemetryDataHelper({}, false)).toBe(false); + }); + + it('should redact strings and numbers', () => { + expect(metadata.redactTelemetryDataHelper({}, 'test')).toBe('*'); + expect(metadata.redactTelemetryDataHelper({}, 123)).toBe('*'); + }); + + it('should redact unresolved tokens', () => { + (Token.isUnresolved as jest.Mock).mockReturnValue(true); + expect(metadata.redactTelemetryDataHelper({}, { foo: 'bar' })).toBe('*'); + expect(Token.isUnresolved).toHaveBeenCalledWith({ foo: 'bar' }); + }); + + it('should recursively redact array elements', () => { + const data = [true, 'secret', 42]; + expect(metadata.redactTelemetryDataHelper({}, data)).toEqual([true, '*', '*']); + }); + + it('should redact constructs as "*"', () => { + const constructMock = {}; + expect(metadata.redactTelemetryDataHelper({}, constructMock)).toBe('*'); + }); + + it('should redact keys and values not in allowedKeys', () => { + const allowedKeys = { key1: '*' }; + const data = { key1: 'value1', key2: 'value2' }; + expect(metadata.redactTelemetryDataHelper(allowedKeys, data)).toEqual({ key1: '*' }); + }); + + it('should skip unresolved token keys', () => { + (Token.isUnresolved as jest.Mock).mockReturnValue(true); + const allowedKeys = { key1: '*' }; + const data = { key1: 'value1', unresolvedKey: 'value2' }; + expect(metadata.redactTelemetryDataHelper(allowedKeys, data)).toEqual('*'); + }); + + it('should handle nested objects according to allowedKeys', () => { + const allowedKeys = { key1: { subKey1: '*' } }; + const data = { key1: { subKey1: 'value1', subKey2: 'value2' }, key2: 'value3' }; + expect(metadata.redactTelemetryDataHelper(allowedKeys, data)).toEqual({ + key1: { subKey1: '*' }, + }); + }); + + it('should redact any other type of data as "*"', () => { + expect(metadata.redactTelemetryDataHelper({}, null)).toBe('*'); + expect(metadata.redactTelemetryDataHelper({}, undefined)).toBe('*'); + expect(metadata.redactTelemetryDataHelper({}, () => {})).toBe('*'); + }); +}); + +jest.mock('../lib/analytics-data-source/enums', () => ({ + AWS_CDK_ENUMS: { + ExampleEnum: ['VALUE_ONE', 'VALUE_TWO', 'VALUE_THREE'], + AnotherEnum: ['OPTION_A', 'OPTION_B', 'OPTION_C'], + }, +})); + +describe('isEnumValue', () => { + test('returns true for valid enum value', () => { + expect(metadata.isEnumValue('ExampleEnum', 'VALUE_ONE')).toBe(true); + }); + + test('returns false for invalid enum value', () => { + expect(metadata.isEnumValue('ExampleEnum', 'INVALID_VALUE')).toBe(false); + }); + + test('returns false for non-existent enum type', () => { + expect(metadata.isEnumValue('NonExistentEnum', 'VALUE_ONE')).toBe(false); + }); + + test('returns false if allowedKeys is "*" (wildcard)', () => { + expect(metadata.isEnumValue('*', 'VALUE_ONE')).toBe(false); + }); + + test('returns false if allowedKeys is not a string', () => { + expect(metadata.isEnumValue(123, 'VALUE_ONE')).toBe(false); + expect(metadata.isEnumValue(null, 'VALUE_ONE')).toBe(false); + expect(metadata.isEnumValue(undefined, 'VALUE_ONE')).toBe(false); + expect(metadata.isEnumValue({}, 'VALUE_ONE')).toBe(false); + }); + + test('returns false if value is not included in the enum values', () => { + expect(metadata.isEnumValue('AnotherEnum', 'NOT_AN_OPTION')).toBe(false); + }); + + test('returns true for another valid enum value', () => { + expect(metadata.isEnumValue('AnotherEnum', 'OPTION_A')).toBe(true); + }); +}); 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..f2a855c31e780 --- /dev/null +++ b/packages/aws-cdk-lib/core/test/private/runtime-info.test.ts @@ -0,0 +1,60 @@ +import { MetadataEntry } from 'constructs'; +import { Code, Function, Runtime } from '../../../aws-lambda'; +import { Stack, App } from '../../lib'; +import { MetadataType, redactMetadata } from '../../lib/metadata-resource'; +import { + constructInfoFromConstruct, + filterMetadataType, +} from '../../lib/private/runtime-info'; + +test('test constructInfoFromConstruct can correctly get metadata information', () => { + const app = new App(); + app.node.setContext('@aws-cdk/core:enableAdditionalMetadataCollection', true); + const stack = new Stack(app); + 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 constructInfo = constructInfoFromConstruct(myFunction); + expect(constructInfo?.metadata).toMatchObject(['*']); +}); + +test('test filterMetadataType correct filter', () => { + const metadata: MetadataEntry[] = [ + { type: MetadataType.CONSTRUCT, data: { hello: 'world' } }, + { + type: MetadataType.METHOD, + data: { + bool: true, + nested: { foo: 'bar' }, + arr: [1, 2, 3], + str: 'foo', + arrOfObjects: [{ foo: { hello: 'world' } }], + }, + }, + { + type: 'hello', + data: { bool: true, nested: { foo: 'bar' }, arr: [1, 2, 3], str: 'foo' }, + }, + { + type: MetadataType.FEATURE_FLAG, + data: 'foobar', + }, + ]; + + expect(filterMetadataType(metadata)).toEqual([ + { hello: 'world' }, + { + bool: true, + nested: { foo: 'bar' }, + arr: [1, 2, 3], + str: 'foo', + arrOfObjects: [{ foo: { hello: 'world' } }], + }, + 'foobar', + ]); +}); diff --git a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md index 0be5bb67c2864..5fd98168d8681 100644 --- a/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +++ b/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md @@ -88,6 +88,7 @@ Flags come in three types: | [@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 | 2.176.0 | (fix) | | [@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections](#aws-cdkaws-iamoidcrejectunauthorizedconnections) | When enabled, the default behaviour of OIDC provider will reject unauthorized connections | 2.177.0 | (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) | @@ -163,7 +164,8 @@ The following json shows the current recommended set of flags, as `cdk init` wou "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": true, "@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": true, "@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": true, - "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true + "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true, + "@aws-cdk/core:enableAdditionalMetadataCollection": true } } ``` @@ -1670,4 +1672,20 @@ thumbprints from unsecure connections. **Compatibility with old behavior:** Disable the feature flag to allow unsecure OIDC connection. +### @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/cx-api/README.md b/packages/aws-cdk-lib/cx-api/README.md index 7c9457aec56f2..41d80f0c71a15 100644 --- a/packages/aws-cdk-lib/cx-api/README.md +++ b/packages/aws-cdk-lib/cx-api/README.md @@ -594,3 +594,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 + } +} +``` \ No newline at end of file diff --git a/packages/aws-cdk-lib/cx-api/lib/features.ts b/packages/aws-cdk-lib/cx-api/lib/features.ts index dad5bd59cf811..4493ecd7b3463 100644 --- a/packages/aws-cdk-lib/cx-api/lib/features.ts +++ b/packages/aws-cdk-lib/cx-api/lib/features.ts @@ -122,6 +122,7 @@ export const Enable_IMDS_Blocking_Deprecated_Feature = '@aws-cdk/aws-ecs:enableI 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 IAM_OIDC_REJECT_UNAUTHORIZED_CONNECTIONS = '@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections'; +export const ENABLE_ADDITIONAL_METADATA_COLLECTION = '@aws-cdk/core:enableAdditionalMetadataCollection'; export const FLAGS: Record = { ////////////////////////////////////////////////////////////////////// @@ -1371,6 +1372,20 @@ export const FLAGS: Record = { recommendedValue: true, compatibilityWithOldBehaviorMd: 'Disable the feature flag to allow unsecure OIDC connection.', }, + + ////////////////////////////////////////////////////////////////////// + [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 efb2eac4fe303..aa60880b897dd 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -499,6 +499,7 @@ "./cloudformation-include": "./cloudformation-include/index.js", "./core": "./core/index.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/pipelines/lib/private/asset-singleton-role.ts b/packages/aws-cdk-lib/pipelines/lib/private/asset-singleton-role.ts index 49a45e1804b68..e97926c9e49d8 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 { addConstructMetadata } from '../../../core/lib/metadata-resource'; /** * Role which will be reused across asset jobs @@ -15,6 +16,8 @@ export class AssetSingletonRole extends iam.Role { constructor(scope: Construct, id: string, props: iam.RoleProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); // Logging permissions this.addToPolicy(new iam.PolicyStatement({ diff --git a/packages/aws-cdk-lib/recommended-feature-flags.json b/packages/aws-cdk-lib/recommended-feature-flags.json index 4e9774c6af5e5..c600491d18e2a 100644 --- a/packages/aws-cdk-lib/recommended-feature-flags.json +++ b/packages/aws-cdk-lib/recommended-feature-flags.json @@ -63,5 +63,6 @@ "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": true, "@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": true, "@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": true, - "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true + "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": true, + "@aws-cdk/core:enableAdditionalMetadataCollection": true } \ No newline at end of file diff --git a/packages/aws-cdk-lib/triggers/lib/trigger-function.ts b/packages/aws-cdk-lib/triggers/lib/trigger-function.ts index 9fce160934c9d..4087e0ad20185 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 { addConstructMetadata } from '../../core/lib/metadata-resource'; /** * Props for `InvokeFunction`. @@ -19,6 +20,8 @@ export class TriggerFunction extends lambda.Function implements ITrigger { constructor(scope: Construct, id: string, props: TriggerFunctionProps) { super(scope, id, props); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); this.trigger = new Trigger(this, 'Trigger', { ...props, diff --git a/tools/@aws-cdk/construct-metadata-updater/.gitignore b/tools/@aws-cdk/construct-metadata-updater/.gitignore new file mode 100644 index 0000000000000..bef31def37928 --- /dev/null +++ b/tools/@aws-cdk/construct-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/construct-metadata-updater/LICENSE b/tools/@aws-cdk/construct-metadata-updater/LICENSE new file mode 100644 index 0000000000000..d645695673349 --- /dev/null +++ b/tools/@aws-cdk/construct-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/construct-metadata-updater/README.md b/tools/@aws-cdk/construct-metadata-updater/README.md new file mode 100644 index 0000000000000..356af9345abf8 --- /dev/null +++ b/tools/@aws-cdk/construct-metadata-updater/README.md @@ -0,0 +1,7 @@ +# CDK Metadata Updater + +This tool updates will parse the entire `aws-cdk` repository and does the following things: + +1. For any L2 construct class, add `addConstructMetadata` method call to track analytics usage and add necessary import statements if missing +2. Generate a JSON Blueprint file in `packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts` that contains all L2 construct class's props +3. Generate a JSON Blueprint file in `packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts` that gets all ENUMs type in `aws-cdk` repo. \ No newline at end of file diff --git a/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata b/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata new file mode 100755 index 0000000000000..c3483bf973ee4 --- /dev/null +++ b/tools/@aws-cdk/construct-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/construct-metadata-updater/bin/update-construct-metadata.ts b/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata.ts new file mode 100755 index 0000000000000..4bfa022ac9a63 --- /dev/null +++ b/tools/@aws-cdk/construct-metadata-updater/bin/update-construct-metadata.ts @@ -0,0 +1,4 @@ +#!/usr/bin/env node +import { main } from '../lib'; + +main(); \ No newline at end of file diff --git a/tools/@aws-cdk/construct-metadata-updater/jest.config.js b/tools/@aws-cdk/construct-metadata-updater/jest.config.js new file mode 100644 index 0000000000000..9a7e1a9cb0b61 --- /dev/null +++ b/tools/@aws-cdk/construct-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/construct-metadata-updater/lib/index.ts b/tools/@aws-cdk/construct-metadata-updater/lib/index.ts new file mode 100644 index 0000000000000..3162c3b3e9099 --- /dev/null +++ b/tools/@aws-cdk/construct-metadata-updater/lib/index.ts @@ -0,0 +1,14 @@ +import { PropertyUpdater, ConstructsUpdater, EnumsUpdater } from './metadata-updater'; + +export function main() { + const dir = '../../../../packages/' + + new PropertyUpdater(dir).execute(); + console.log('Property updater finished.') + + new ConstructsUpdater(dir).execute(); + console.log('Constructs updater finished.'); + + new EnumsUpdater(dir).execute(); + console.log('Enums updater finished.'); +} \ No newline at end of file diff --git a/tools/@aws-cdk/construct-metadata-updater/lib/metadata-updater.ts b/tools/@aws-cdk/construct-metadata-updater/lib/metadata-updater.ts new file mode 100644 index 0000000000000..f2dd5bf064169 --- /dev/null +++ b/tools/@aws-cdk/construct-metadata-updater/lib/metadata-updater.ts @@ -0,0 +1,499 @@ +import { ClassDeclaration, Project, QuoteKind, SourceFile, Symbol, SyntaxKind } 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", +]; + +interface ResourceClass { + sourceFile: SourceFile; + filePath: string; + node: ClassDeclaration; + className: string; + fqnClassName: string; +} + +export abstract class MetadataUpdater { + protected 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 abstract execute(): void; + + /** + * 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. + */ + protected getCdkResourceClasses(filePath: string): ResourceClass[] { + const sourceFile = this.project.getSourceFile(filePath); + if (!sourceFile) return []; + + const resourceClasses: ResourceClass[] = []; + + sourceFile.forEachChild((node) => { + if (node instanceof ClassDeclaration) { + const symbol = node.getSymbol(); + if (symbol) { + const className = symbol.getName(); // Correct way to get the name + const fqnClassName = symbol.getFullyQualifiedName(); + + // Check if the class is abstract by inspecting modifiers + const isAbstract = node.getModifiers()?.some((mod) => mod.getText() === "abstract"); + if (isAbstract) { + return; + } + + // Check if the class or its subclasses extends Resource + const type = node.getType(); + if (this.isDescendantOfResource(type)) { + resourceClasses.push({ sourceFile, filePath, node, className, fqnClassName }); + } + } + } + }); + + return resourceClasses; + } +} + +export class ConstructsUpdater extends MetadataUpdater { + constructor(dir: string) { + super(dir); + } + + public execute() { + // Process each file in the project + this.project.getSourceFiles().forEach((sourceFile) => { + const classes = this.getCdkResourceClasses(sourceFile.getFilePath()); + for (const resource of classes) { + this.addImportAndMetadataStatement(resource.sourceFile, resource.filePath, resource.node); + } + }); + } + + + /** + * 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'))) { + return; + } + + // Create the new import statement + sourceFile.addImportDeclaration({ + moduleSpecifier: relativePath, + namedImports: [{ name: "addConstructMetadata" }], + }); + + 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('addConstructMetadata(') + ); + + if (hasMetadataCall) { + return true; + } + + // Find the super() call, if it exists + const superCall = constructor.getStatements().find(statement => + statement.getText().includes('super(') + ); + + const propName = parameters[2].getName(); + // 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(' // Enhanced CDK Analytics Telemetry\n'); + writer.write(` addConstructMetadata(this, ${propName});`); + }); + console.log(`Added 'addConstructMetadata();' 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(' // Enhanced CDK Analytics Telemetry\n'); + writer.write(` addConstructMetadata(this, ${propName});`); + }); + 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; + } +} + +export class PropertyUpdater extends MetadataUpdater { + private classProps: Record>; + constructor(dir: string) { + super(dir); + + this.classProps = {}; + } + + public execute(): void { + // Process each file in the project + this.project.getSourceFiles().forEach((sourceFile) => { + const classes = this.getCdkResourceClasses(sourceFile.getFilePath()); + + for (const resource of classes) { + this.extractConstructorProps(resource.filePath, resource.node, resource.className) + } + }); + + this.generateFileContent(); + } + + + private extractConstructorProps(filePath: string, node: ClassDeclaration, className: string) { + // Get module name from file path + const moduleName = this.getModuleName(filePath); + + // Parse Constructor parameters + const props = this.parseConstructorProps(node, className); + + if (!props) { + return; + } + + const content = this.classProps[moduleName] || {}; + this.classProps[moduleName] = { + ...content, + ...props, + }; + } + + private generateFileContent() { + const template = `/* eslint-disable quote-props */ +/* eslint-disable @stylistic/comma-dangle */ +/* + * Do not edit this file manually. To prevent misconfiguration, this file + * should only be modified by an automated GitHub workflow, that ensures + * that the regions present in this list correspond to all the regions + * where we have the AWS::CDK::Metadata handler deployed. + * + * See: https://github.com/aws/aws-cdk/issues/27189 + */ + +export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = $PROPS; +`; + + // Convert the enums object to a JSON string + const jsonContent = JSON.stringify(this.classProps, null, 2).replace(/"/g, "'"); + + // Replace the placeholder with the JSON object + const content = template.replace("$PROPS", jsonContent); + + const outputPath = path.resolve( + __dirname, + "../../../../packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts" + ); + + // Write the generated file + fs.writeFileSync(outputPath, content); + console.log(`Metadata file written to: ${outputPath}`); + } + + // Helper method to extract module name from file path + private getModuleName(filePath: string): string { + const pathParts = filePath.split('/'); + // Assuming file paths are like '/packages/aws-cdk-lib/aws-lambda/Function.ts' + const moduleName = pathParts.slice(pathParts.length - 4, pathParts.length - 2).join('.'); + return moduleName; + } + + private getPropertyType(type: any, processedTypes: Set = new Set()): any { + if (type.isUnion()) { + // Get all types in the union and find the first non-undefined type + // CDK doesn't support complex union type so we can safely get the first + // non-undefined type + const unionTypes = type.getUnionTypes(); + type = unionTypes.find((t: any) => t.getText() !== 'undefined') || type; + + if (type.isLiteral() && (type.getText() === 'true' || type.getText() === 'false')) { + return '*'; + } + } + + const symbol = type.getSymbol(); + if (symbol) { + const declarations = symbol.getDeclarations(); + if (declarations.length > 0) { + const decl = declarations[0]; + // Check if the type is an Enum Member + if (decl.getKindName() === 'EnumMember') { + const parent = decl.getParent(); // Get the parent of the Enum Member + if (parent && parent.getKindName() === 'EnumDeclaration') { + const enumDecl = parent.asKindOrThrow(SyntaxKind.EnumDeclaration); + const enumName = enumDecl.getName(); + return enumName; // Return the name of the parent enum + } + } + } + } + + if (type.isArray()) { + // If it's an array, get the type of the array elements + const elementType = type.getArrayElementType(); + if (elementType) { + return this.getPropertyType(elementType, processedTypes); // Recursively resolve the element type + } + return '*'; + } + + if (type.isClass() || type.isInterface()) { + // Generate a unique identifier for the type to track its processed state + const typeId = type?.getSymbol()?.getFullyQualifiedName(); + + // If the type has already been processed, avoid recursion (cycle detection) + if (typeId && processedTypes.has(typeId)) { + // TODO: maybe use the cache instead + return undefined; + } + + // Add this type to the processed set + if (typeId) { + processedTypes.add(typeId); + } + + if (type.isClass()) { + // Redact class object + return '*' + } else { + // Handle the case where the type is a class or interface + return this.resolveInterfaceType(type, processedTypes); + } + } + + return '*'; + } + + private resolveInterfaceType(type: any, processedTypes: Set): any { + // If it's a reference to another interface type, resolve its properties recursively + const symbol = type.getSymbol(); + + if (symbol) { + const declarations = symbol.getDeclarations(); + if (declarations.length > 0) { + const firstDeclaration = declarations[0]; + const members = firstDeclaration.getType().getProperties(); + const resolvedObject: Record = {}; + + members.forEach((member: Symbol) => { + const memberType = member.getValueDeclaration()?.getType() || member.getDeclaredType(); + if (memberType.getCallSignatures().length > 0) { + return; + } + const propName = member.getName(); + const nestedType = this.getPropertyType(memberType, processedTypes); + if (nestedType) { + resolvedObject[propName] = nestedType; + } + }); + + return Object.keys(resolvedObject).length === 0 ? '*' : resolvedObject; + } + } + return undefined; // If unable to resolve, return undefined + } + + private parseConstructorProps(node: ClassDeclaration, className: string) { + const constructor = node.getConstructors()?.[0]; + + if (constructor) { + const parameters = constructor.getParameters(); + const props = parameters[2]; + + if (props) { + const type = props.getType(); + + if (type?.isObject()) { + const properties = type.getProperties(); + const propertyTypes: Record = {}; + + properties.forEach((property: Symbol) => { + const propName = property.getName(); + const nestedType = this.getPropertyType(property.getValueDeclaration()?.getType()); + if (nestedType) { + propertyTypes[propName] = nestedType; + } + }); + + return { [className]: propertyTypes }; + } + } + } + return undefined; + } +} + +export class EnumsUpdater extends MetadataUpdater { + constructor(dir: string) { + super(dir); + } + + /** + * Parse the repository for any enum type values and generate a JSON blueprint. + */ + public execute() { + const enumBlueprint: Record = {}; + + this.project.getSourceFiles().forEach((sourceFile) => { + sourceFile.forEachChild((node) => { + if (node.getKindName() === "EnumDeclaration") { + const enumDeclaration = node.asKindOrThrow(SyntaxKind.EnumDeclaration); + const enumName = enumDeclaration.getName(); + // Directly access the values of the enum members + const enumValues = enumDeclaration.getMembers() + .map((member) => member.getValue()) // Access the enum value directly + .filter((value) => value !== undefined); // Filter out undefined values + + // Add to the blueprint + enumBlueprint[enumName] = enumValues; + } + }); + }); + + // Generate the file content + const content = this.generateFileContent(enumBlueprint); + const outputPath = path.resolve( + __dirname, + "../../../../packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts" + ); + + // Write the generated file + fs.writeFileSync(outputPath, content); + console.log(`Metadata file written to: ${outputPath}`); + } + + /** + * Generate the file content for the enum metadats. + */ + private generateFileContent(enums: Record = {}): string { + const template = `/* eslint-disable quote-props */ +/* eslint-disable @stylistic/comma-dangle */ +/* eslint-disable @cdklabs/no-literal-partition */ +/* + * Do not edit this file manually. To prevent misconfiguration, this file + * should only be modified by an automated GitHub workflow, that ensures + * that the ENUMs present in this list + * + */ + +export const AWS_CDK_ENUMS: { [key: string]: any } = $ENUMS; +`; + + const jsonContent = JSON.stringify(enums, null, 2).replace(/"/g, "'"); + + // Replace the placeholder with the JSON object + return template.replace("$ENUMS", jsonContent); + } +} \ No newline at end of file diff --git a/tools/@aws-cdk/construct-metadata-updater/package.json b/tools/@aws-cdk/construct-metadata-updater/package.json new file mode 100644 index 0000000000000..08723e3c24805 --- /dev/null +++ b/tools/@aws-cdk/construct-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 --coverage=false", + "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/construct-metadata-updater/test/metadata-updater.test.ts b/tools/@aws-cdk/construct-metadata-updater/test/metadata-updater.test.ts new file mode 100644 index 0000000000000..7035bcce66416 --- /dev/null +++ b/tools/@aws-cdk/construct-metadata-updater/test/metadata-updater.test.ts @@ -0,0 +1,397 @@ +import { ConstructsUpdater, PropertyUpdater } 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: ConstructsUpdater; + 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 ConstructsUpdater('./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('getCdkResourceClasses', () => { + beforeEach(() => { + mockClassDeclaration = { + getSymbol: jest.fn().mockReturnValue({ getName: () => 'TestClass', getFullyQualifiedName: () => 'test.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 ConstructsUpdater('./test-dir'); + (updater as any).isDescendantOfResource = jest.fn(); + }); + + it('should skip abstract classes', () => { + mockClassDeclaration.getModifiers.mockReturnValue([{ getText: () => 'abstract' } as any]); + (updater as any).getCdkResourceClasses('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).getCdkResourceClasses('test.ts'); + expect((updater as any).isDescendantOfResource).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, { getName: () => 'prop' }]), + 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(); + }); + }); +}); + +describe('PropertyUpdater', () => { + let propertyUpdater: PropertyUpdater; + + beforeEach(() => { + // Clear all mocks before each test + jest.clearAllMocks(); + propertyUpdater = new PropertyUpdater('/mock/dir'); + }); + + describe('execute', () => { + it('should process source files and generate content', () => { + // Mock the source files + const mockSourceFiles = [ + { + getFilePath: () => '/packages/aws-cdk-lib/aws-lambda/Function.ts' + } + ] as any; + + // Mock getCdkResourceClasses to return test data + const mockClasses = [{ + filePath: '/packages/aws-cdk-lib/aws-lambda/Function.ts', + node: { + getConstructors: () => [{ + getParameters: () => [] + }] + }, + className: 'Function' + }]; + + // Setup spies + const getSourceFilesSpy = jest.spyOn(propertyUpdater['project'], 'getSourceFiles') + .mockReturnValue(mockSourceFiles); + const getCdkResourceClassesSpy = jest.spyOn(propertyUpdater as any, 'getCdkResourceClasses') + .mockReturnValue(mockClasses); + const extractConstructorPropsSpy = jest.spyOn(propertyUpdater as any, 'extractConstructorProps'); + const generateFileContentSpy = jest.spyOn(propertyUpdater as any, 'generateFileContent'); + + // Execute the method + propertyUpdater.execute(); + + // Assertions + expect(getSourceFilesSpy).toHaveBeenCalled(); + expect(getCdkResourceClassesSpy).toHaveBeenCalledWith('/packages/aws-cdk-lib/aws-lambda/Function.ts'); + expect(extractConstructorPropsSpy).toHaveBeenCalled(); + expect(generateFileContentSpy).toHaveBeenCalled(); + }); + }); + + describe('getModuleName', () => { + it('should extract correct module name from file path', () => { + const testCases = [ + { + input: 'packages/aws-cdk-lib/aws-lambda/lib/function.ts', + expected: 'aws-cdk-lib.aws-lambda' + }, + { + input: 'packages/aws-cdk-lib/core/lib/resource.ts', + expected: 'aws-cdk-lib.core' + } + ]; + + testCases.forEach(({ input, expected }) => { + const result = propertyUpdater['getModuleName'](input); + expect(result).toBe(expected); + }); + }); + }); + + describe('generateFileContent', () => { + it('should generate correct file content and write to file', () => { + // Mock the classProps + propertyUpdater['classProps'] = { + 'aws-cdk-lib.aws-lambda': { + Function: { + handler: '*', + runtime: '*' + } + } + }; + + // Mock path.resolve + (path.resolve as jest.Mock).mockReturnValue('/mock/output/path'); + + // Execute the method + propertyUpdater['generateFileContent'](); + + // Verify file write + expect(fs.writeFileSync).toHaveBeenCalledWith( + '/mock/output/path', + expect.stringContaining('AWS_CDK_CONSTRUCTOR_PROPS') + ); + + // Verify content format + const writeCall = (fs.writeFileSync as jest.Mock).mock.calls[0]; + const content = writeCall[1]; + + expect(content).toContain('eslint-disable'); + expect(content).toContain('AWS_CDK_CONSTRUCTOR_PROPS'); + expect(content).toContain("'aws-cdk-lib.aws-lambda'"); + }); + }); + + describe('extractConstructorProps', () => { + it('should extract and store constructor props correctly', () => { + // Mock the necessary data + const mockFilePath = '/packages/aws-cdk-lib/aws-lambda/lib/Function.ts'; + const mockNode = { + getConstructors: () => [{ + getParameters: () => [{ + getType: () => ({ + getProperties: () => [] + }) + }] + }] + }; + const mockClassName = 'Function'; + + // Mock parseConstructorProps to return some test data + jest.spyOn(propertyUpdater as any, 'parseConstructorProps') + .mockReturnValue({ + Function: { prop1: '*', prop2: '*' } + }); + + // Execute the method + propertyUpdater['extractConstructorProps'](mockFilePath, mockNode as any, mockClassName); + + // Verify the classProps were updated correctly + expect(propertyUpdater['classProps']['aws-cdk-lib.aws-lambda']).toEqual({ + Function: { prop1: '*', prop2: '*' } + }); + }); + + it('should handle case when parseConstructorProps returns undefined', () => { + const mockFilePath = '/packages/aws-cdk-lib/aws-lambda/Function.ts'; + const mockNode = { + getConstructors: () => [] + }; + const mockClassName = 'Function'; + + // Mock parseConstructorProps to return undefined + jest.spyOn(propertyUpdater as any, 'parseConstructorProps') + .mockReturnValue(undefined); + + // Execute the method + propertyUpdater['extractConstructorProps'](mockFilePath, mockNode as any, mockClassName); + + // Verify the classProps weren't updated + expect(propertyUpdater['classProps']['aws-cdk-lib.aws-lambda']).toBeUndefined(); + }); + }); + + describe('getPropertyType', () => { + it('should handle union types', () => { + const mockType = { + isUnion: () => true, + getUnionTypes: () => [{ + getText: () => 'true', + isLiteral: () => true, + isArray: () => false, + isClass: () => false, + isInterface: () => false, + }, { + getText: () => 'undefined', + isLiteral: () => true, + isArray: () => false, + isClass: () => false, + isInterface: () => false, + }], + }; + + const result = propertyUpdater['getPropertyType'](mockType); + expect(result).toBe('*'); + }); + + it('should handle array types', () => { + const mockType = { + isUnion: () => false, + isArray: () => true, + getSymbol: () => false, + getArrayElementType: () => ({ + getText: () => 'string', + isUnion: () => false, + getSymbol: () => false, + isLiteral: () => false, + isArray: () => false, + isClass: () => false, + isInterface: () => false, + }) + }; + + const result = propertyUpdater['getPropertyType'](mockType); + expect(result).toBe('*'); + }); + + it('should handle cycle detection', () => { + const processedTypes = new Set(['TestType']); + const mockType = { + isUnion: () => false, + isArray: () => false, + isClass: () => true, + getSymbol: () => ({ + getFullyQualifiedName: () => 'TestType', + getDeclarations: () => [] + }) + }; + + const result = propertyUpdater['getPropertyType'](mockType, processedTypes); + expect(result).toBeUndefined(); + }); + }); +}); diff --git a/tools/@aws-cdk/construct-metadata-updater/tsconfig.json b/tools/@aws-cdk/construct-metadata-updater/tsconfig.json new file mode 100644 index 0000000000000..26a4b348983d4 --- /dev/null +++ b/tools/@aws-cdk/construct-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/construct-metadata-updater/yarn.lock b/tools/@aws-cdk/construct-metadata-updater/yarn.lock new file mode 100644 index 0000000000000..dfe1d87392c3a --- /dev/null +++ b/tools/@aws-cdk/construct-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== diff --git a/tools/@aws-cdk/prlint/lint.ts b/tools/@aws-cdk/prlint/lint.ts index d44f8134fec6e..6b53eff7c9eab 100644 --- a/tools/@aws-cdk/prlint/lint.ts +++ b/tools/@aws-cdk/prlint/lint.ts @@ -240,7 +240,11 @@ export class PullRequestLinter extends PullRequestLinterBase { validationCollector.validateRuleSet({ exemption: (pr) => pr.user?.login === 'aws-cdk-automation', - testRuleSet: [{ test: noMetadataChanges }], + testRuleSet: [ + { test: noMetadataChanges }, + { test: noAnalyticsClassesChanges }, + { test: noAnalyticsEnumsChanges }, + ], }); validationCollector.validateRuleSet({ @@ -548,6 +552,20 @@ function noMetadataChanges(_pr: GitHubPr, files: GitHubFile[]): TestResult { return result; } +function noAnalyticsClassesChanges(_pr: GitHubPr, files: GitHubFile[]): TestResult { + const result = new TestResult(); + const condition = files.some(file => file.filename === 'packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts'); + result.assessFailure(condition, 'Manual changes to the classes.ts file are not allowed.'); + return result; +} + +function noAnalyticsEnumsChanges(_pr: GitHubPr, files: GitHubFile[]): TestResult { + const result = new TestResult(); + const condition = files.some(file => file.filename === 'packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts'); + result.assessFailure(condition, 'Manual changes to the enums.ts file are not allowed.'); + return result; +} + require('make-runnable/custom')({ printOutputFrame: false, });