From b273693d198245075cfcfd847008ea0d9d09e3b3 Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Tue, 18 Jan 2022 15:15:09 +0100 Subject: [PATCH 1/7] add missing safe actions to perms BUCKET_PUT_ACTIONS and s3:PutObjectVersionAcl to BUCKET_PUT_ACL_ACTIONS --- packages/@aws-cdk/aws-s3/lib/perms.ts | 5 +++ packages/@aws-cdk/aws-s3/test/bucket.test.ts | 39 ++++++++++++++++++- .../integ.bucket-sharing.lit.expected.json | 4 ++ .../aws-s3/test/integ.bucket.expected.json | 4 ++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-s3/lib/perms.ts b/packages/@aws-cdk/aws-s3/lib/perms.ts index f57b97153f27c..abfb00d852f6e 100644 --- a/packages/@aws-cdk/aws-s3/lib/perms.ts +++ b/packages/@aws-cdk/aws-s3/lib/perms.ts @@ -16,11 +16,16 @@ export const LEGACY_BUCKET_PUT_ACTIONS = [ export const BUCKET_PUT_ACTIONS = [ 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ]; export const BUCKET_PUT_ACL_ACTIONS = [ 's3:PutObjectAcl', + 's3:PutObjectVersionAcl', ]; export const BUCKET_DELETE_ACTIONS = [ diff --git a/packages/@aws-cdk/aws-s3/test/bucket.test.ts b/packages/@aws-cdk/aws-s3/test/bucket.test.ts index 574d0d38e4755..dbbd49420c493 100644 --- a/packages/@aws-cdk/aws-s3/test/bucket.test.ts +++ b/packages/@aws-cdk/aws-s3/test/bucket.test.ts @@ -809,6 +809,10 @@ describe('bucket', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -1084,6 +1088,10 @@ describe('bucket', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -1117,6 +1125,10 @@ describe('bucket', () => { 'Action': [ 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -1184,6 +1196,10 @@ describe('bucket', () => { 'Action': [ 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -1217,6 +1233,10 @@ describe('bucket', () => { { 'Action': [ 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -1247,8 +1267,23 @@ describe('bucket', () => { const resources = Template.fromStack(stack).toJSON().Resources; const actions = (id: string) => resources[id].Properties.PolicyDocument.Statement[0].Action; - expect(actions('WriterDefaultPolicyDC585BCE')).toEqual(['s3:DeleteObject*', 's3:PutObject', 's3:Abort*']); - expect(actions('PutterDefaultPolicyAB138DD3')).toEqual(['s3:PutObject', 's3:Abort*']); + expect(actions('WriterDefaultPolicyDC585BCE')).toEqual([ + 's3:DeleteObject*', + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ]); + expect(actions('PutterDefaultPolicyAB138DD3')).toEqual([ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ]); expect(actions('DeleterDefaultPolicyCD33B8A0')).toEqual('s3:DeleteObject*'); }); diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json index 4197e9179b4ff..85ece6ae7bf15 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json @@ -38,6 +38,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json index 58cd3c5760961..6a8b1e6567a0e 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json @@ -89,6 +89,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", From 53303898bf98559dc9e9554d742383463d814419 Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Tue, 18 Jan 2022 16:56:53 +0100 Subject: [PATCH 2/7] fix bucket integ tests --- ...g.bucket-auto-delete-objects.expected.json | 36 +++++++++---------- .../test/integ.bucket-inventory.expected.json | 2 +- .../integ.bucket-sharing.lit.expected.json | 8 ++--- .../aws-s3/test/integ.bucket.expected.json | 8 ++--- .../test/integ.bucket.url.lit.expected.json | 12 +++++-- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket-auto-delete-objects.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket-auto-delete-objects.expected.json index f5cf756e8a75d..da2c8cf503fe6 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket-auto-delete-objects.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket-auto-delete-objects.expected.json @@ -110,7 +110,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709S3Bucket2C6C817C" + "Ref": "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824S3Bucket09A62232" }, "S3Key": { "Fn::Join": [ @@ -123,7 +123,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709S3VersionKeyFA215BD6" + "Ref": "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824S3VersionKeyA28118BE" } ] } @@ -136,7 +136,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709S3VersionKeyFA215BD6" + "Ref": "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824S3VersionKeyA28118BE" } ] } @@ -228,7 +228,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfS3BucketE1985B35" + "Ref": "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6S3BucketB51EC107" }, "S3Key": { "Fn::Join": [ @@ -241,7 +241,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfS3VersionKey610C6DE2" + "Ref": "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6S3VersionKey2B267DB5" } ] } @@ -254,7 +254,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfS3VersionKey610C6DE2" + "Ref": "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6S3VersionKey2B267DB5" } ] } @@ -297,29 +297,29 @@ } }, "Parameters": { - "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709S3Bucket2C6C817C": { + "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824S3Bucket09A62232": { "Type": "String", - "Description": "S3 bucket for asset \"84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709\"" + "Description": "S3 bucket for asset \"be270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824\"" }, - "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709S3VersionKeyFA215BD6": { + "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824S3VersionKeyA28118BE": { "Type": "String", - "Description": "S3 key for asset version \"84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709\"" + "Description": "S3 key for asset version \"be270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824\"" }, - "AssetParameters84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709ArtifactHash17D48178": { + "AssetParametersbe270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824ArtifactHash76F8FCF2": { "Type": "String", - "Description": "Artifact hash for asset \"84e9b89449fe2573e51d08cc143e21116ed4608c6db56afffcb4ad85c8130709\"" + "Description": "Artifact hash for asset \"be270bbdebe0851c887569796e3997437cca54ce86893ed94788500448e92824\"" }, - "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfS3BucketE1985B35": { + "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6S3BucketB51EC107": { "Type": "String", - "Description": "S3 bucket for asset \"618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abf\"" + "Description": "S3 bucket for asset \"31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6\"" }, - "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfS3VersionKey610C6DE2": { + "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6S3VersionKey2B267DB5": { "Type": "String", - "Description": "S3 key for asset version \"618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abf\"" + "Description": "S3 key for asset version \"31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6\"" }, - "AssetParameters618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abfArtifactHash467DFC33": { + "AssetParameters31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6ArtifactHashEE982197": { "Type": "String", - "Description": "Artifact hash for asset \"618bbe9863c0edd5c4ca2e24b5063762f020fafec018cd06f57e2bd9f2f48abf\"" + "Description": "Artifact hash for asset \"31552cb1c5c4cdb0d9502dc59c3cd63cb519dcb7e320e60965c75940297ae3b6\"" } } } \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket-inventory.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket-inventory.expected.json index f5610756ad71e..a142de99be8b0 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket-inventory.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket-inventory.expected.json @@ -155,4 +155,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json index 85ece6ae7bf15..d3f68abaf02b5 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket-sharing.lit.expected.json @@ -38,9 +38,9 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", - "s3:PutObjectLegalHold", - "s3:PutObjectRetention", - "s3:PutObjectTagging", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*" ], @@ -75,4 +75,4 @@ } } } -] +] \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json index 6a8b1e6567a0e..4352395e831c2 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.expected.json @@ -89,9 +89,9 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", - "s3:PutObjectLegalHold", - "s3:PutObjectRetention", - "s3:PutObjectTagging", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*" ], @@ -177,4 +177,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-s3/test/integ.bucket.url.lit.expected.json b/packages/@aws-cdk/aws-s3/test/integ.bucket.url.lit.expected.json index 37a7d24a40029..6ab5dcbfef26e 100644 --- a/packages/@aws-cdk/aws-s3/test/integ.bucket.url.lit.expected.json +++ b/packages/@aws-cdk/aws-s3/test/integ.bucket.url.lit.expected.json @@ -44,7 +44,10 @@ [ "https://", { - "Fn::GetAtt": ["MyBucketF68F3FF0", "RegionalDomainName"] + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "RegionalDomainName" + ] }, "/myfolder/myfile.txt" ] @@ -58,7 +61,10 @@ [ "https://", { - "Fn::GetAtt": ["MyBucketF68F3FF0", "DomainName"] + "Fn::GetAtt": [ + "MyBucketF68F3FF0", + "DomainName" + ] }, "/myfolder/myfile.txt" ] @@ -80,4 +86,4 @@ } } } -} +} \ No newline at end of file From 069b7452ff493335c51362aa600500617e127b3c Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Wed, 19 Jan 2022 09:09:41 +0100 Subject: [PATCH 3/7] fix other packages integ tests --- .../test/integ.cicd.expected.json | 4 ++++ .../test/integ.caching.expected.json | 6 +++++- ....project-buildspec-artifacts.expected.json | 6 +++++- .../test/integ.project-logging.expected.json | 6 +++++- ...-secondary-sources-artifacts.expected.json | 6 +++++- ...g.cfn-template-from-repo.lit.expected.json | 8 ++++++++ ...yed-through-codepipeline.lit.expected.json | 20 +++++++++++++++++++ .../test/integ.lambda-pipeline.expected.json | 8 ++++++++ .../integ.pipeline-alexa-deploy.expected.json | 8 ++++++++ ...eg.pipeline-cfn-cross-region.expected.json | 8 ++++++++ ...ipeline-cfn-with-action-role.expected.json | 8 ++++++++ .../test/integ.pipeline-cfn.expected.json | 12 +++++++++++ ...eg.pipeline-code-build-batch.expected.json | 4 ++++ ...uild-multiple-inputs-outputs.expected.json | 12 +++++++++++ ...g.pipeline-code-commit-build.expected.json | 12 +++++++++++ .../integ.pipeline-code-commit.expected.json | 8 ++++++++ ...teg.pipeline-code-deploy-ecs.expected.json | 8 ++++++++ .../integ.pipeline-code-deploy.expected.json | 8 ++++++++ .../integ.pipeline-ecr-source.expected.json | 8 ++++++++ .../integ.pipeline-ecs-deploy.expected.json | 12 +++++++++++ ...line-ecs-separate-source.lit.expected.json | 16 +++++++++++++++ .../test/integ.pipeline-events.expected.json | 12 +++++++++++ .../test/integ.pipeline-jenkins.expected.json | 8 ++++++++ ...teg.pipeline-manual-approval.expected.json | 8 ++++++++ .../integ.pipeline-s3-deploy.expected.json | 12 +++++++++++ ...integ.pipeline-stepfunctions.expected.json | 8 ++++++++ .../ec2/integ.environment-file.expected.json | 4 ++++ .../integ.pipeline-event-target.expected.json | 4 ++++ ...nteg.kinesis-firehose-stream.expected.json | 4 ++++ .../aws-glue/test/integ.job.expected.json | 4 ++++ .../aws-glue/test/integ.table.expected.json | 12 +++++++++++ ...g.firehose-put-record-action.expected.json | 4 ++++ .../test/integ.s3-bucket.lit.expected.json | 8 ++++++++ .../test/integ.delivery-stream.expected.json | 4 ++++ ...elivery-stream.source-stream.expected.json | 14 ++++++++----- .../test/integ.cluster-s3.expected.json | 4 ++++ .../integ.instance-s3-postgres.expected.json | 4 ++++ .../test/integ.instance-s3.expected.json | 4 ++++ ...bucket-deployment-cloudfront.expected.json | 4 ++++ .../integ.bucket-deployment.expected.json | 16 +++++++++++++++ ...nteg.job-submission-workflow.expected.json | 4 ++++ .../integ.call-sagemaker.expected.json | 4 ++++ .../integ.create-training-job.expected.json | 4 ++++ .../integ.newpipeline-with-vpc.expected.json | 8 ++++++++ .../test/integ.newpipeline.expected.json | 8 ++++++++ .../integ.pipeline-security.expected.json | 8 ++++++++ ...ne-with-assets-single-upload.expected.json | 8 ++++++++ .../integ.pipeline-with-assets.expected.json | 8 ++++++++ .../test/integ.pipeline.expected.json | 8 ++++++++ .../test/__snapshots__/synth.test.js.snap | 12 +++++++++++ 50 files changed, 389 insertions(+), 9 deletions(-) diff --git a/packages/@aws-cdk/app-delivery/test/integ.cicd.expected.json b/packages/@aws-cdk/app-delivery/test/integ.cicd.expected.json index 9b2ed51da9ff2..9d53a0d8b915c 100644 --- a/packages/@aws-cdk/app-delivery/test/integ.cicd.expected.json +++ b/packages/@aws-cdk/app-delivery/test/integ.cicd.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codebuild/test/integ.caching.expected.json b/packages/@aws-cdk/aws-codebuild/test/integ.caching.expected.json index c1680ca40cea9..d98388270cec6 100644 --- a/packages/@aws-cdk/aws-codebuild/test/integ.caching.expected.json +++ b/packages/@aws-cdk/aws-codebuild/test/integ.caching.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -171,4 +175,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-codebuild/test/integ.project-buildspec-artifacts.expected.json b/packages/@aws-cdk/aws-codebuild/test/integ.project-buildspec-artifacts.expected.json index 17cec3ba454e2..011e192831fb9 100644 --- a/packages/@aws-cdk/aws-codebuild/test/integ.project-buildspec-artifacts.expected.json +++ b/packages/@aws-cdk/aws-codebuild/test/integ.project-buildspec-artifacts.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -166,4 +170,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-codebuild/test/integ.project-logging.expected.json b/packages/@aws-cdk/aws-codebuild/test/integ.project-logging.expected.json index 6dbe8a8127224..03ffa27190981 100644 --- a/packages/@aws-cdk/aws-codebuild/test/integ.project-logging.expected.json +++ b/packages/@aws-cdk/aws-codebuild/test/integ.project-logging.expected.json @@ -39,6 +39,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -223,4 +227,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-codebuild/test/integ.project-secondary-sources-artifacts.expected.json b/packages/@aws-cdk/aws-codebuild/test/integ.project-secondary-sources-artifacts.expected.json index a8c439a0eaad1..f8c74e1af60e6 100644 --- a/packages/@aws-cdk/aws-codebuild/test/integ.project-secondary-sources-artifacts.expected.json +++ b/packages/@aws-cdk/aws-codebuild/test/integ.project-secondary-sources-artifacts.expected.json @@ -64,6 +64,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -218,4 +222,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.cfn-template-from-repo.lit.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.cfn-template-from-repo.lit.expected.json index 3c59dc4a9305d..87d6594c254c4 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.cfn-template-from-repo.lit.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.cfn-template-from-repo.lit.expected.json @@ -159,6 +159,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -440,6 +444,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-deployed-through-codepipeline.lit.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-deployed-through-codepipeline.lit.expected.json index 61cef35a009c0..823b5af6c908b 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-deployed-through-codepipeline.lit.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-deployed-through-codepipeline.lit.expected.json @@ -153,6 +153,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -508,6 +512,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -621,6 +629,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1350,6 +1362,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1572,6 +1588,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-pipeline.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-pipeline.expected.json index 53614fd854b19..0c993b6ff4591 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-pipeline.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.lambda-pipeline.expected.json @@ -153,6 +153,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -388,6 +392,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-alexa-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-alexa-deploy.expected.json index 6662d025f667b..c255275baa82b 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-alexa-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-alexa-deploy.expected.json @@ -163,6 +163,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -387,6 +391,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-cross-region.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-cross-region.expected.json index 85ddb7d7dc4a9..167b278084683 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-cross-region.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-cross-region.expected.json @@ -39,6 +39,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -265,6 +269,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-with-action-role.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-with-action-role.expected.json index 81c9c5fc2a998..b3d024a33f2a8 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-with-action-role.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn-with-action-role.expected.json @@ -164,6 +164,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -384,6 +388,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn.expected.json index 707f673e11ea1..53189d1369dda 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-cfn.expected.json @@ -153,6 +153,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -440,6 +444,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -563,6 +571,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-batch.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-batch.expected.json index 3af1036c27a2b..854b01ae12ac6 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-batch.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-batch.expected.json @@ -110,6 +110,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-multiple-inputs-outputs.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-multiple-inputs-outputs.expected.json index cd9a20670da04..c1624ab7e2f7b 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-multiple-inputs-outputs.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-build-multiple-inputs-outputs.expected.json @@ -110,6 +110,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -196,6 +200,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -557,6 +565,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit-build.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit-build.expected.json index 53dffb9a5b78c..cb437e83eb651 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit-build.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit-build.expected.json @@ -92,6 +92,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -413,6 +417,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -671,6 +679,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit.expected.json index ed452beed9f7a..23bdec497e551 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-commit.expected.json @@ -224,6 +224,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -430,6 +434,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy-ecs.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy-ecs.expected.json index ad229d36e2207..1b20a71fd7def 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy-ecs.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy-ecs.expected.json @@ -39,6 +39,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -258,6 +262,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy.expected.json index d2d0bea52821f..eb87655dd0e60 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-code-deploy.expected.json @@ -124,6 +124,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -341,6 +345,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecr-source.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecr-source.expected.json index 53c605d58da68..4720701233397 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecr-source.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecr-source.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -217,6 +221,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-deploy.expected.json index 9f9f3404c1413..725008ba28aa8 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-deploy.expected.json @@ -427,6 +427,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -576,6 +580,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -843,6 +851,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-separate-source.lit.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-separate-source.lit.expected.json index acee7feab59e6..a728e17a69655 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-separate-source.lit.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-ecs-separate-source.lit.expected.json @@ -397,6 +397,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -639,6 +643,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -962,6 +970,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1059,6 +1071,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-events.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-events.expected.json index d464eef509bdd..0a7d958491359 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-events.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-events.expected.json @@ -153,6 +153,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -374,6 +378,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -761,6 +769,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-jenkins.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-jenkins.expected.json index 5c89d0d1119b9..eda778cf7ec55 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-jenkins.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-jenkins.expected.json @@ -39,6 +39,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -276,6 +280,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-manual-approval.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-manual-approval.expected.json index f0c66384b1709..1193cbb2f30d0 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-manual-approval.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-manual-approval.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -243,6 +247,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json index ecd97ebdd239d..3f08d6c1ec9ad 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json @@ -44,6 +44,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -261,6 +265,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -339,6 +347,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-stepfunctions.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-stepfunctions.expected.json index fe94e8c305ad7..d35d3f59e6bb2 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-stepfunctions.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-stepfunctions.expected.json @@ -196,6 +196,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -433,6 +437,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json index 2f4e3c8498ea6..6b3947da0089f 100644 --- a/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json +++ b/packages/@aws-cdk/aws-ecs/test/ec2/integ.environment-file.expected.json @@ -1346,6 +1346,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-events-targets/test/codepipeline/integ.pipeline-event-target.expected.json b/packages/@aws-cdk/aws-events-targets/test/codepipeline/integ.pipeline-event-target.expected.json index bc6bec13d1d5f..912eb616ad2c8 100644 --- a/packages/@aws-cdk/aws-events-targets/test/codepipeline/integ.pipeline-event-target.expected.json +++ b/packages/@aws-cdk/aws-events-targets/test/codepipeline/integ.pipeline-event-target.expected.json @@ -159,6 +159,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-events-targets/test/kinesis-firehose/integ.kinesis-firehose-stream.expected.json b/packages/@aws-cdk/aws-events-targets/test/kinesis-firehose/integ.kinesis-firehose-stream.expected.json index 6b76a3d96a32e..0c7a34c7f4bd5 100644 --- a/packages/@aws-cdk/aws-events-targets/test/kinesis-firehose/integ.kinesis-firehose-stream.expected.json +++ b/packages/@aws-cdk/aws-events-targets/test/kinesis-firehose/integ.kinesis-firehose-stream.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-glue/test/integ.job.expected.json b/packages/@aws-cdk/aws-glue/test/integ.job.expected.json index 61f4f60434db1..d50a9de59a00e 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.job.expected.json +++ b/packages/@aws-cdk/aws-glue/test/integ.job.expected.json @@ -43,6 +43,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-glue/test/integ.table.expected.json b/packages/@aws-cdk/aws-glue/test/integ.table.expected.json index 32fda38f59b0f..c76cbb5544660 100644 --- a/packages/@aws-cdk/aws-glue/test/integ.table.expected.json +++ b/packages/@aws-cdk/aws-glue/test/integ.table.expected.json @@ -482,6 +482,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -559,6 +563,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -671,6 +679,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-iot-actions/test/kinesis-firehose/integ.firehose-put-record-action.expected.json b/packages/@aws-cdk/aws-iot-actions/test/kinesis-firehose/integ.firehose-put-record-action.expected.json index d1565669b5c04..5c484ba7f5049 100644 --- a/packages/@aws-cdk/aws-iot-actions/test/kinesis-firehose/integ.firehose-put-record-action.expected.json +++ b/packages/@aws-cdk/aws-iot-actions/test/kinesis-firehose/integ.firehose-put-record-action.expected.json @@ -123,6 +123,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-kinesisfirehose-destinations/test/integ.s3-bucket.lit.expected.json b/packages/@aws-cdk/aws-kinesisfirehose-destinations/test/integ.s3-bucket.lit.expected.json index 5ae3347a50989..913dba1638ec3 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose-destinations/test/integ.s3-bucket.lit.expected.json +++ b/packages/@aws-cdk/aws-kinesisfirehose-destinations/test/integ.s3-bucket.lit.expected.json @@ -481,6 +481,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -527,6 +531,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.expected.json b/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.expected.json index 1c23bbcee1092..65ac018add362 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.expected.json +++ b/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.source-stream.expected.json b/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.source-stream.expected.json index a37685e2e47e8..ccbca77c32829 100644 --- a/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.source-stream.expected.json +++ b/packages/@aws-cdk/aws-kinesisfirehose/test/integ.delivery-stream.source-stream.expected.json @@ -34,6 +34,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -74,11 +78,8 @@ "SourceStream95FF52BE": { "Type": "AWS::Kinesis::Stream", "Properties": { - "ShardCount": 1, - "StreamModeDetails": { - "StreamMode": "PROVISIONED" - }, "RetentionPeriodHours": 24, + "ShardCount": 1, "StreamEncryption": { "Fn::If": [ "AwsCdkKinesisEncryptedStreamsUnsupportedRegions", @@ -90,6 +91,9 @@ "KeyId": "alias/aws/kinesis" } ] + }, + "StreamModeDetails": { + "StreamMode": "PROVISIONED" } } }, @@ -284,4 +288,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-rds/test/integ.cluster-s3.expected.json b/packages/@aws-cdk/aws-rds/test/integ.cluster-s3.expected.json index a2631bd5991c8..d3127f0b8fdd9 100644 --- a/packages/@aws-cdk/aws-rds/test/integ.cluster-s3.expected.json +++ b/packages/@aws-cdk/aws-rds/test/integ.cluster-s3.expected.json @@ -548,6 +548,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-rds/test/integ.instance-s3-postgres.expected.json b/packages/@aws-cdk/aws-rds/test/integ.instance-s3-postgres.expected.json index c623afaf92464..f811978275863 100644 --- a/packages/@aws-cdk/aws-rds/test/integ.instance-s3-postgres.expected.json +++ b/packages/@aws-cdk/aws-rds/test/integ.instance-s3-postgres.expected.json @@ -455,6 +455,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-rds/test/integ.instance-s3.expected.json b/packages/@aws-cdk/aws-rds/test/integ.instance-s3.expected.json index 5b851784caef0..f379bde6663f7 100644 --- a/packages/@aws-cdk/aws-rds/test/integ.instance-s3.expected.json +++ b/packages/@aws-cdk/aws-rds/test/integ.instance-s3.expected.json @@ -454,6 +454,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json index ae66a97b871bc..e50759499b6cc 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment-cloudfront.expected.json @@ -417,6 +417,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json index 26209e97d225e..51473300ac82b 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json +++ b/packages/@aws-cdk/aws-s3-deployment/test/integ.bucket-deployment.expected.json @@ -378,6 +378,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -411,6 +415,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -444,6 +452,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1528,6 +1540,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/emrcontainers/integ.job-submission-workflow.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/emrcontainers/integ.job-submission-workflow.expected.json index ec1551086d626..ad853185040b4 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/emrcontainers/integ.job-submission-workflow.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/emrcontainers/integ.job-submission-workflow.expected.json @@ -1342,6 +1342,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.call-sagemaker.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.call-sagemaker.expected.json index 107fd16780144..942f72ba3d41b 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.call-sagemaker.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.call-sagemaker.expected.json @@ -148,6 +148,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.create-training-job.expected.json b/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.create-training-job.expected.json index 0cd3166d73138..3e069a953f03a 100644 --- a/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.create-training-job.expected.json +++ b/packages/@aws-cdk/aws-stepfunctions-tasks/test/sagemaker/integ.create-training-job.expected.json @@ -148,6 +148,10 @@ "Action": [ "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.newpipeline-with-vpc.expected.json b/packages/@aws-cdk/pipelines/test/integ.newpipeline-with-vpc.expected.json index c0d89b2bf135a..87c85c72f72e4 100644 --- a/packages/@aws-cdk/pipelines/test/integ.newpipeline-with-vpc.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.newpipeline-with-vpc.expected.json @@ -667,6 +667,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1276,6 +1280,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.newpipeline.expected.json b/packages/@aws-cdk/pipelines/test/integ.newpipeline.expected.json index 6e12dae20df4d..3ae3fe487e81d 100644 --- a/packages/@aws-cdk/pipelines/test/integ.newpipeline.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.newpipeline.expected.json @@ -153,6 +153,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1973,6 +1977,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.pipeline-security.expected.json b/packages/@aws-cdk/pipelines/test/integ.pipeline-security.expected.json index 996f6abad6abc..f9f2ec14d2199 100644 --- a/packages/@aws-cdk/pipelines/test/integ.pipeline-security.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.pipeline-security.expected.json @@ -215,6 +215,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -1310,6 +1314,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets-single-upload.expected.json b/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets-single-upload.expected.json index 64471fdf6b4c8..26cecb377ee68 100644 --- a/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets-single-upload.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets-single-upload.expected.json @@ -215,6 +215,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -746,6 +750,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets.expected.json b/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets.expected.json index 01eafcfb30eef..c757e3097d633 100644 --- a/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets.expected.json @@ -215,6 +215,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -773,6 +777,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/@aws-cdk/pipelines/test/integ.pipeline.expected.json b/packages/@aws-cdk/pipelines/test/integ.pipeline.expected.json index 90d937525afc8..ab3e7cbede27a 100644 --- a/packages/@aws-cdk/pipelines/test/integ.pipeline.expected.json +++ b/packages/@aws-cdk/pipelines/test/integ.pipeline.expected.json @@ -215,6 +215,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", @@ -704,6 +708,10 @@ "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*" ], "Effect": "Allow", diff --git a/packages/decdk/test/__snapshots__/synth.test.js.snap b/packages/decdk/test/__snapshots__/synth.test.js.snap index 93c4dfdf336c4..44d2527e49d47 100644 --- a/packages/decdk/test/__snapshots__/synth.test.js.snap +++ b/packages/decdk/test/__snapshots__/synth.test.js.snap @@ -1796,6 +1796,10 @@ Object { "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", @@ -2515,6 +2519,10 @@ Object { "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", @@ -2642,6 +2650,10 @@ Object { "s3:List*", "s3:DeleteObject*", "s3:PutObject", + "s3:PutObjectLegalHold", + "s3:PutObjectRetention", + "s3:PutObjectTagging", + "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", From f0da7e9ca3459673aa3a784166e6717fcb631781 Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Wed, 19 Jan 2022 09:54:40 +0100 Subject: [PATCH 4/7] fix expected s3 policy output in unit tests --- .../test/lambda/lambda-invoke-action.test.ts | 8 ++++++++ .../test/s3/s3-deploy-action.test.ts | 4 ++++ .../test/alb/load-balancer.test.ts | 18 ++++++++++++++++-- .../test/nlb/load-balancer.test.ts | 18 ++++++++++++++++-- packages/@aws-cdk/aws-glue/test/table.test.ts | 8 ++++++++ packages/@aws-cdk/aws-rds/test/cluster.test.ts | 4 ++++ .../@aws-cdk/aws-rds/test/instance.test.ts | 4 ++++ .../test/bucket-deployment.test.ts | 4 ++++ 8 files changed, 64 insertions(+), 4 deletions(-) diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/lambda/lambda-invoke-action.test.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/lambda/lambda-invoke-action.test.ts index 1acf0b4764cd6..e4785593d6cfa 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/lambda/lambda-invoke-action.test.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/lambda/lambda-invoke-action.test.ts @@ -191,6 +191,10 @@ describe('', () => { 'Action': [ 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', @@ -247,6 +251,10 @@ describe('', () => { 'Action': [ 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], 'Effect': 'Allow', diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/s3/s3-deploy-action.test.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/s3/s3-deploy-action.test.ts index 580a4dc688e19..69917d4a91394 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/s3/s3-deploy-action.test.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/s3/s3-deploy-action.test.ts @@ -64,6 +64,10 @@ describe('', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], }, diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts index d935a915d55e7..59b9c79ad4802 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts @@ -183,7 +183,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { @@ -236,7 +243,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/nlb/load-balancer.test.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/nlb/load-balancer.test.ts index ccfb2924e211e..e1f09e78c9f5a 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/nlb/load-balancer.test.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/nlb/load-balancer.test.ts @@ -109,7 +109,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { @@ -180,7 +187,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { diff --git a/packages/@aws-cdk/aws-glue/test/table.test.ts b/packages/@aws-cdk/aws-glue/test/table.test.ts index a7aa71474724f..e3f5df9bb6a3f 100644 --- a/packages/@aws-cdk/aws-glue/test/table.test.ts +++ b/packages/@aws-cdk/aws-glue/test/table.test.ts @@ -1281,6 +1281,10 @@ describe('grants', () => { Action: [ 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], Effect: 'Allow', @@ -1393,6 +1397,10 @@ describe('grants', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], Effect: 'Allow', diff --git a/packages/@aws-cdk/aws-rds/test/cluster.test.ts b/packages/@aws-cdk/aws-rds/test/cluster.test.ts index b3dbdfc81d007..48e5706f454c3 100644 --- a/packages/@aws-cdk/aws-rds/test/cluster.test.ts +++ b/packages/@aws-cdk/aws-rds/test/cluster.test.ts @@ -1323,6 +1323,10 @@ describe('cluster', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], Effect: 'Allow', diff --git a/packages/@aws-cdk/aws-rds/test/instance.test.ts b/packages/@aws-cdk/aws-rds/test/instance.test.ts index 484ad765cb790..1889b587dcad1 100644 --- a/packages/@aws-cdk/aws-rds/test/instance.test.ts +++ b/packages/@aws-cdk/aws-rds/test/instance.test.ts @@ -1301,6 +1301,10 @@ describe('instance', () => { 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], Effect: 'Allow', diff --git a/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts b/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts index 38023cc0154e6..33db51a08d473 100644 --- a/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts +++ b/packages/@aws-cdk/aws-s3-deployment/test/bucket-deployment.test.ts @@ -666,6 +666,10 @@ testFutureBehavior('lambda execution role gets permissions to read from the sour 's3:List*', 's3:DeleteObject*', 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', 's3:Abort*', ], Effect: 'Allow', From 1871e329cbf3ab28c90be9bc3b69450e085110c1 Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Wed, 19 Jan 2022 11:14:17 +0100 Subject: [PATCH 5/7] add s3:PutObjectVersionAcl to policy actions in tests when grantPutAcl is called --- .../test/bitbucket/bitbucket-source-action.test.ts | 5 ++++- .../test/codecommit/codecommit-source-action.test.ts | 5 ++++- .../codestar-connections-source-action.test.ts | 5 ++++- .../test/integ.pipeline-s3-deploy.expected.json | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/bitbucket/bitbucket-source-action.test.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/bitbucket/bitbucket-source-action.test.ts index 4e3fd6045a251..5bdfc790f4462 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/bitbucket/bitbucket-source-action.test.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/bitbucket/bitbucket-source-action.test.ts @@ -92,7 +92,10 @@ describeDeprecated('BitBucket source Action', () => { 'PolicyDocument': { 'Statement': arrayWith( objectLike({ - 'Action': 's3:PutObjectAcl', + 'Action': [ + 's3:PutObjectAcl', + 's3:PutObjectVersionAcl', + ], 'Effect': 'Allow', 'Resource': { 'Fn::Join': [ diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/codecommit/codecommit-source-action.test.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/codecommit/codecommit-source-action.test.ts index 648c113ce2155..c7d414627e0d4 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/codecommit/codecommit-source-action.test.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/codecommit/codecommit-source-action.test.ts @@ -555,7 +555,10 @@ describe('CodeCommit Source Action', () => { expect(repoStack).toHaveResourceLike('AWS::IAM::Policy', { PolicyDocument: { Statement: arrayWith({ - 'Action': 's3:PutObjectAcl', + 'Action': [ + 's3:PutObjectAcl', + 's3:PutObjectVersionAcl', + ], 'Effect': 'Allow', 'Resource': { 'Fn::Join': ['', [ diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/codestar-connections/codestar-connections-source-action.test.ts b/packages/@aws-cdk/aws-codepipeline-actions/test/codestar-connections/codestar-connections-source-action.test.ts index 312251bd8457a..72cecb5055c61 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/codestar-connections/codestar-connections-source-action.test.ts +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/codestar-connections/codestar-connections-source-action.test.ts @@ -94,7 +94,10 @@ describe('CodeStar Connections source Action', () => { 'PolicyDocument': { 'Statement': arrayWith( objectLike({ - 'Action': 's3:PutObjectAcl', + 'Action': [ + 's3:PutObjectAcl', + 's3:PutObjectVersionAcl', + ], 'Effect': 'Allow', 'Resource': { 'Fn::Join': ['', [ diff --git a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json index 3f08d6c1ec9ad..9cc08aec93f44 100644 --- a/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json +++ b/packages/@aws-cdk/aws-codepipeline-actions/test/integ.pipeline-s3-deploy.expected.json @@ -378,7 +378,10 @@ ] }, { - "Action": "s3:PutObjectAcl", + "Action": [ + "s3:PutObjectAcl", + "s3:PutObjectVersionAcl" + ], "Effect": "Allow", "Resource": { "Fn::Join": [ From 17b926d2308ce0315d7c8133c1baecb22cf618a2 Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Tue, 25 Jan 2022 17:38:11 +0100 Subject: [PATCH 6/7] fix alb test --- .../test/alb/load-balancer.test.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts index 4502b0c1d32e0..5bb54df75ac24 100644 --- a/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts +++ b/packages/@aws-cdk/aws-elasticloadbalancingv2/test/alb/load-balancer.test.ts @@ -256,7 +256,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { @@ -319,7 +326,14 @@ describe('tests', () => { Version: '2012-10-17', Statement: [ { - Action: ['s3:PutObject', 's3:Abort*'], + Action: [ + 's3:PutObject', + 's3:PutObjectLegalHold', + 's3:PutObjectRetention', + 's3:PutObjectTagging', + 's3:PutObjectVersionTagging', + 's3:Abort*', + ], Effect: 'Allow', Principal: { AWS: { 'Fn::Join': ['', ['arn:', { Ref: 'AWS::Partition' }, ':iam::127311923021:root']] } }, Resource: { From d4e72bf83651a89b631c953e57d47e85a24ad85f Mon Sep 17 00:00:00 2001 From: Flavio Leggio Date: Tue, 25 Jan 2022 21:07:28 +0100 Subject: [PATCH 7/7] remove decdk files --- packages/decdk/bin/decdk-schema.d.ts | 1 - packages/decdk/bin/decdk-schema.js | 15 - packages/decdk/bin/decdk.d.ts | 1 - packages/decdk/bin/decdk.js | 25 -- packages/decdk/cdk.schema.json | 0 packages/decdk/lib/cdk-schema.d.ts | 18 - packages/decdk/lib/cdk-schema.js | 95 ----- packages/decdk/lib/declarative-stack.d.ts | 10 - packages/decdk/lib/declarative-stack.js | 371 ----------------- packages/decdk/lib/index.d.ts | 3 - packages/decdk/lib/index.js | 16 - packages/decdk/lib/jsii2schema.d.ts | 39 -- packages/decdk/lib/jsii2schema.js | 479 ---------------------- packages/decdk/lib/util.d.ts | 7 - packages/decdk/lib/util.js | 27 -- packages/decdk/test/fixture/index.d.ts | 29 -- packages/decdk/test/fixture/index.js | 10 - packages/decdk/test/sanity.test.d.ts | 1 - packages/decdk/test/sanity.test.js | 20 - packages/decdk/test/schema.test.d.ts | 1 - packages/decdk/test/schema.test.js | 84 ---- packages/decdk/test/synth.test.d.ts | 1 - packages/decdk/test/synth.test.js | 45 -- 23 files changed, 1298 deletions(-) delete mode 100644 packages/decdk/bin/decdk-schema.d.ts delete mode 100644 packages/decdk/bin/decdk-schema.js delete mode 100644 packages/decdk/bin/decdk.d.ts delete mode 100644 packages/decdk/bin/decdk.js delete mode 100644 packages/decdk/cdk.schema.json delete mode 100644 packages/decdk/lib/cdk-schema.d.ts delete mode 100644 packages/decdk/lib/cdk-schema.js delete mode 100644 packages/decdk/lib/declarative-stack.d.ts delete mode 100644 packages/decdk/lib/declarative-stack.js delete mode 100644 packages/decdk/lib/index.d.ts delete mode 100644 packages/decdk/lib/index.js delete mode 100644 packages/decdk/lib/jsii2schema.d.ts delete mode 100644 packages/decdk/lib/jsii2schema.js delete mode 100644 packages/decdk/lib/util.d.ts delete mode 100644 packages/decdk/lib/util.js delete mode 100644 packages/decdk/test/fixture/index.d.ts delete mode 100644 packages/decdk/test/fixture/index.js delete mode 100644 packages/decdk/test/sanity.test.d.ts delete mode 100644 packages/decdk/test/sanity.test.js delete mode 100644 packages/decdk/test/schema.test.d.ts delete mode 100644 packages/decdk/test/schema.test.js delete mode 100644 packages/decdk/test/synth.test.d.ts delete mode 100644 packages/decdk/test/synth.test.js diff --git a/packages/decdk/bin/decdk-schema.d.ts b/packages/decdk/bin/decdk-schema.d.ts deleted file mode 100644 index cb0ff5c3b541f..0000000000000 --- a/packages/decdk/bin/decdk-schema.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/decdk/bin/decdk-schema.js b/packages/decdk/bin/decdk-schema.js deleted file mode 100644 index 457bf4d8e25ff..0000000000000 --- a/packages/decdk/bin/decdk-schema.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const lib_1 = require("../lib"); -const cdk_schema_1 = require("../lib/cdk-schema"); -/* eslint-disable no-console */ -async function main() { - const typeSystem = await lib_1.loadTypeSystem(); - const schema = await cdk_schema_1.renderFullSchema(typeSystem, { colors: true, warnings: true }); - console.log(JSON.stringify(schema, undefined, 2)); -} -main().catch(e => { - console.error(e); - process.exit(1); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjZGstc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVjZGstc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsZ0NBQXdDO0FBQ3hDLGtEQUFxRDtBQUVyRCwrQkFBK0I7QUFFL0IsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxVQUFVLEdBQUcsTUFBTSxvQkFBYyxFQUFFLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWRUeXBlU3lzdGVtIH0gZnJvbSAnLi4vbGliJztcbmltcG9ydCB7IHJlbmRlckZ1bGxTY2hlbWEgfSBmcm9tICcuLi9saWIvY2RrLXNjaGVtYSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdHlwZVN5c3RlbSA9IGF3YWl0IGxvYWRUeXBlU3lzdGVtKCk7XG4gIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlbmRlckZ1bGxTY2hlbWEodHlwZVN5c3RlbSwgeyBjb2xvcnM6IHRydWUsIHdhcm5pbmdzOiB0cnVlIH0pO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShzY2hlbWEsIHVuZGVmaW5lZCwgMikpO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoZSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pOyJdfQ== \ No newline at end of file diff --git a/packages/decdk/bin/decdk.d.ts b/packages/decdk/bin/decdk.d.ts deleted file mode 100644 index cb0ff5c3b541f..0000000000000 --- a/packages/decdk/bin/decdk.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/decdk/bin/decdk.js b/packages/decdk/bin/decdk.js deleted file mode 100644 index 1e8ce40bc71ed..0000000000000 --- a/packages/decdk/bin/decdk.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const cdk = require("@aws-cdk/core"); -const chalk = require("chalk"); -const lib_1 = require("../lib"); -async function main() { - const args = require('yargs') - .usage('$0 ', 'Hydrate a deconstruct file', (yargs) => { - yargs.positional('filename', { type: 'string', required: true }); - }) - .parse(); - const templateFile = args.filename; - const template = await lib_1.readTemplate(templateFile); - const stackName = lib_1.stackNameFromFileName(templateFile); - const typeSystem = await lib_1.loadTypeSystem(); - const app = new cdk.App(); - new lib_1.DeclarativeStack(app, stackName, { template, typeSystem }); - app.synth(); -} -main().catch(e => { - // eslint-disable-next-line no-console - console.error(chalk.red(e)); - process.exit(1); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQywrQkFBK0I7QUFDL0IsZ0NBQStGO0FBRS9GLEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDMUIsS0FBSyxDQUFDLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ25FLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztJQUVYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxrQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLDJCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLE1BQU0sb0JBQWMsRUFBRSxDQUFDO0lBRTFDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLElBQUksc0JBQWdCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IERlY2xhcmF0aXZlU3RhY2ssIGxvYWRUeXBlU3lzdGVtLCByZWFkVGVtcGxhdGUsIHN0YWNrTmFtZUZyb21GaWxlTmFtZSB9IGZyb20gJy4uL2xpYic7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSByZXF1aXJlKCd5YXJncycpXG4gICAgLnVzYWdlKCckMCA8ZmlsZW5hbWU+JywgJ0h5ZHJhdGUgYSBkZWNvbnN0cnVjdCBmaWxlJywgKHlhcmdzOiBhbnkpID0+IHtcbiAgICAgIHlhcmdzLnBvc2l0aW9uYWwoJ2ZpbGVuYW1lJywgeyB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfSlcbiAgICAucGFyc2UoKTtcblxuICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBhcmdzLmZpbGVuYW1lO1xuICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IHJlYWRUZW1wbGF0ZSh0ZW1wbGF0ZUZpbGUpO1xuICBjb25zdCBzdGFja05hbWUgPSBzdGFja05hbWVGcm9tRmlsZU5hbWUodGVtcGxhdGVGaWxlKTtcbiAgY29uc3QgdHlwZVN5c3RlbSA9IGF3YWl0IGxvYWRUeXBlU3lzdGVtKCk7XG5cbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgbmV3IERlY2xhcmF0aXZlU3RhY2soYXBwLCBzdGFja05hbWUsIHsgdGVtcGxhdGUsIHR5cGVTeXN0ZW0gfSk7XG4gIGFwcC5zeW50aCgpO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGUpKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0= \ No newline at end of file diff --git a/packages/decdk/cdk.schema.json b/packages/decdk/cdk.schema.json deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/packages/decdk/lib/cdk-schema.d.ts b/packages/decdk/lib/cdk-schema.d.ts deleted file mode 100644 index 24d8bc8157c76..0000000000000 --- a/packages/decdk/lib/cdk-schema.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as jsiiReflect from 'jsii-reflect'; -import { SchemaContext } from '../lib/jsii2schema'; -export interface RenderSchemaOptions { - warnings?: boolean; - /** - * Use colors when printing ouput. - * @default true if tty is enabled - */ - colors?: boolean; -} -export declare function renderFullSchema(typeSystem: jsiiReflect.TypeSystem, options?: RenderSchemaOptions): any; -export declare function schemaForResource(construct: ConstructAndProps, ctx: SchemaContext): { - $ref: string; -} | undefined; -export interface ConstructAndProps { - constructClass: jsiiReflect.ClassType; - propsTypeRef: jsiiReflect.TypeReference; -} diff --git a/packages/decdk/lib/cdk-schema.js b/packages/decdk/lib/cdk-schema.js deleted file mode 100644 index 48d35bc96251e..0000000000000 --- a/packages/decdk/lib/cdk-schema.js +++ /dev/null @@ -1,95 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.schemaForResource = exports.renderFullSchema = void 0; -const chalk = require("chalk"); -const jsii2schema_1 = require("../lib/jsii2schema"); -function renderFullSchema(typeSystem, options = {}) { - if (!process.stdin.isTTY || options.colors === false) { - // Disable chalk color highlighting - process.env.FORCE_COLOR = '0'; - } - // Find all constructs for which the props interface - // (transitively) only consists of JSON primitives or interfaces - // that consist of JSON primitives - const constructType = typeSystem.findClass('constructs.Construct'); - const constructs = typeSystem.classes.filter(c => c.extends(constructType)); - const deconstructs = constructs - .map(unpackConstruct) - .filter(c => c && !isCfnResource(c.constructClass)); - const output = require('../cloudformation.schema.json'); - output.definitions = output.definitions || {}; - const ctx = jsii2schema_1.SchemaContext.root(output.definitions); - for (const deco of deconstructs) { - const resource = schemaForResource(deco, ctx); - if (resource) { - output.properties.Resources.patternProperties["^[a-zA-Z0-9]+$"].anyOf.push(resource); - } - } - output.properties.$schema = { - type: 'string' - }; - if (options.warnings) { - printWarnings(ctx); - } - return output; -} -exports.renderFullSchema = renderFullSchema; -function printWarnings(node, indent = '') { - if (!node.hasWarningsOrErrors) { - return; - } - console.error(indent + node.name); - for (const warning of node.warnings) { - console.error(chalk.yellow(indent + ' ' + warning)); - } - for (const error of node.errors) { - console.error(chalk.red(indent + ' ' + error)); - } - if (!node.root) { - indent += ' '; - } - for (const child of node.children) { - printWarnings(child, indent); - } -} -function schemaForResource(construct, ctx) { - ctx = ctx.child('resource', construct.constructClass.fqn); - const propsSchema = jsii2schema_1.schemaForTypeReference(construct.propsTypeRef, ctx); - if (!propsSchema) { - return undefined; - } - return ctx.define(construct.constructClass.fqn, () => { - return { - additionalProperties: false, - properties: { - Properties: propsSchema, - Type: { - enum: [construct.constructClass.fqn], - type: "string" - } - } - }; - }); -} -exports.schemaForResource = schemaForResource; -function isCfnResource(klass) { - const resource = klass.system.findClass('@aws-cdk/core.CfnResource'); - return klass.extends(resource); -} -function unpackConstruct(klass) { - if (!klass.initializer || klass.abstract) { - return undefined; - } - if (klass.initializer.parameters.length < 3) { - return undefined; - } - const propsParam = klass.initializer.parameters[2]; - if (propsParam.type.fqn === undefined) { - return undefined; - } - return { - constructClass: klass, - propsTypeRef: klass.initializer.parameters[2].type - }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBRS9CLG9EQUEyRTtBQWMzRSxTQUFnQixnQkFBZ0IsQ0FBQyxVQUFrQyxFQUFFLFVBQStCLEVBQUc7SUFDckcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQ25ELG1DQUFtQztRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7S0FDaEM7SUFFRCxvREFBb0Q7SUFDcEQsZ0VBQWdFO0lBQ2hFLGtDQUFrQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFNUUsTUFBTSxZQUFZLEdBQUcsVUFBVTtTQUM1QixHQUFHLENBQUMsZUFBZSxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQXdCLENBQUM7SUFFN0UsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFFeEQsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUcsQ0FBQztJQUUvQyxNQUFNLEdBQUcsR0FBRywyQkFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkQsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUU7UUFDL0IsTUFBTSxRQUFRLEdBQUcsaUJB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UUFBRSxPQUFPLFNBQVMsQ0FBQztLQUFFO0lBRWxFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUU1RCxPQUFPO1FBQ0wsY0FBYyxFQUFFLEtBQUs7UUFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7S0FDbkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBqc2lpUmVmbGVjdCBmcm9tICdqc2lpLXJlZmxlY3QnO1xuaW1wb3J0IHsgU2NoZW1hQ29udGV4dCwgc2NoZW1hRm9yVHlwZVJlZmVyZW5jZSB9IGZyb20gJy4uL2xpYi9qc2lpMnNjaGVtYSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJTY2hlbWFPcHRpb25zIHtcbiAgd2FybmluZ3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgY29sb3JzIHdoZW4gcHJpbnRpbmcgb3VwdXQuXG4gICAqIEBkZWZhdWx0IHRydWUgaWYgdHR5IGlzIGVuYWJsZWRcbiAgICovXG4gIGNvbG9ycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGdWxsU2NoZW1hKHR5cGVTeXN0ZW06IGpzaWlSZWZsZWN0LlR5cGVTeXN0ZW0sIG9wdGlvbnM6IFJlbmRlclNjaGVtYU9wdGlvbnMgPSB7IH0pIHtcbiAgaWYgKCFwcm9jZXNzLnN0ZGluLmlzVFRZIHx8IG9wdGlvbnMuY29sb3JzID09PSBmYWxzZSkge1xuICAgICAvLyBEaXNhYmxlIGNoYWxrIGNvbG9yIGhpZ2hsaWdodGluZ1xuICAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9ICcwJztcbiAgfVxuXG4gIC8vIEZpbmQgYWxsIGNvbnN0cnVjdHMgZm9yIHdoaWNoIHRoZSBwcm9wcyBpbnRlcmZhY2VcbiAgLy8gKHRyYW5zaXRpdmVseSkgb25seSBjb25zaXN0cyBvZiBKU09OIHByaW1pdGl2ZXMgb3IgaW50ZXJmYWNlc1xuICAvLyB0aGF0IGNvbnNpc3Qgb2YgSlNPTiBwcmltaXRpdmVzXG4gIGNvbnN0IGNvbnN0cnVjdFR5cGUgPSB0eXBlU3lzdGVtLmZpbmRDbGFzcygnY29uc3RydWN0cy5Db25zdHJ1Y3QnKTtcbiAgY29uc3QgY29uc3RydWN0cyA9IHR5cGVTeXN0ZW0uY2xhc3Nlcy5maWx0ZXIoYyA9PiBjLmV4dGVuZHMoY29uc3RydWN0VHlwZSkpO1xuXG4gIGNvbnN0IGRlY29uc3RydWN0cyA9IGNvbnN0cnVjdHNcbiAgICAubWFwKHVucGFja0NvbnN0cnVjdClcbiAgICAuZmlsdGVyKGMgPT4gYyAmJiAhaXNDZm5SZXNvdXJjZShjLmNvbnN0cnVjdENsYXNzKSkgYXMgQ29uc3RydWN0QW5kUHJvcHNbXTtcblxuICBjb25zdCBvdXRwdXQgPSByZXF1aXJlKCcuLi9jbG91ZGZvcm1hdGlvbi5zY2hlbWEuanNvbicpO1xuXG4gIG91dHB1dC5kZWZpbml0aW9ucyA9IG91dHB1dC5kZWZpbml0aW9ucyB8fCB7IH07XG5cbiAgY29uc3QgY3R4ID0gU2NoZW1hQ29udGV4dC5yb290KG91dHB1dC5kZWZpbml0aW9ucyk7XG5cbiAgZm9yIChjb25zdCBkZWNvIG9mIGRlY29uc3RydWN0cykge1xuICAgIGNvbnN0IHJlc291cmNlID0gc2NoZW1hRm9yUmVzb3VyY2UoZGVjbywgY3R4KTtcbiAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgIG91dHB1dC5wcm9wZXJ0aWVzLlJlc291cmNlcy5wYXR0ZXJuUHJvcGVydGllc1tcIl5bYS16QS1aMC05XSskXCJdLmFueU9mLnB1c2gocmVzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIG91dHB1dC5wcm9wZXJ0aWVzLiRzY2hlbWEgPSB7XG4gICAgdHlwZTogJ3N0cmluZydcbiAgfTtcblxuICBpZiAob3B0aW9ucy53YXJuaW5ncykge1xuICAgIHByaW50V2FybmluZ3MoY3R4KTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZ3Mobm9kZTogU2NoZW1hQ29udGV4dCwgaW5kZW50ID0gJycpIHtcbiAgaWYgKCFub2RlLmhhc1dhcm5pbmdzT3JFcnJvcnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlLmVycm9yKGluZGVudCArIG5vZGUubmFtZSk7XG5cbiAgZm9yIChjb25zdCB3YXJuaW5nIG9mIG5vZGUud2FybmluZ3MpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnllbGxvdyhpbmRlbnQgKyAnICAnICsgd2FybmluZykpO1xuICB9XG5cbiAgZm9yIChjb25zdCBlcnJvciBvZiBub2RlLmVycm9ycykge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGluZGVudCArICcgICcgKyBlcnJvcikpO1xuICB9XG5cbiAgaWYgKCFub2RlLnJvb3QpIHtcbiAgICBpbmRlbnQgKz0gJyAgJztcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIHByaW50V2FybmluZ3MoY2hpbGQsIGluZGVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZvclJlc291cmNlKGNvbnN0cnVjdDogQ29uc3RydWN0QW5kUHJvcHMsIGN0eDogU2NoZW1hQ29udGV4dCkge1xuICBjdHggPSBjdHguY2hpbGQoJ3Jlc291cmNlJywgY29uc3RydWN0LmNvbnN0cnVjdENsYXNzLmZxbik7XG5cbiAgY29uc3QgcHJvcHNTY2hlbWEgPSBzY2hlbWFGb3JUeXBlUmVmZXJlbmNlKGNvbnN0cnVjdC5wcm9wc1R5cGVSZWYsIGN0eCk7XG4gIGlmICghcHJvcHNTY2hlbWEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGN0eC5kZWZpbmUoY29uc3RydWN0LmNvbnN0cnVjdENsYXNzLmZxbiwgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFByb3BlcnRpZXM6IHByb3BzU2NoZW1hLFxuICAgICAgICBUeXBlOiB7XG4gICAgICAgICAgZW51bTogWyBjb25zdHJ1Y3QuY29uc3RydWN0Q2xhc3MuZnFuIF0sXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQ2ZuUmVzb3VyY2Uoa2xhc3M6IGpzaWlSZWZsZWN0LkNsYXNzVHlwZSkge1xuICBjb25zdCByZXNvdXJjZSA9IGtsYXNzLnN5c3RlbS5maW5kQ2xhc3MoJ0Bhd3MtY2RrL2NvcmUuQ2ZuUmVzb3VyY2UnKTtcbiAgcmV0dXJuIGtsYXNzLmV4dGVuZHMocmVzb3VyY2UpO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tDb25zdHJ1Y3Qoa2xhc3M6IGpzaWlSZWZsZWN0LkNsYXNzVHlwZSk6IENvbnN0cnVjdEFuZFByb3BzIHwgdW5kZWZpbmVkIHtcblxuICBpZiAoIWtsYXNzLmluaXRpYWxpemVyIHx8IGtsYXNzLmFic3RyYWN0KSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgaWYgKGtsYXNzLmluaXRpYWxpemVyLnBhcmFtZXRlcnMubGVuZ3RoIDwgMykgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgY29uc3QgcHJvcHNQYXJhbSA9IGtsYXNzLmluaXRpYWxpemVyLnBhcmFtZXRlcnNbMl07XG4gIGlmIChwcm9wc1BhcmFtLnR5cGUuZnFuID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIHJldHVybiB7XG4gICAgY29uc3RydWN0Q2xhc3M6IGtsYXNzLFxuICAgIHByb3BzVHlwZVJlZjoga2xhc3MuaW5pdGlhbGl6ZXIucGFyYW1ldGVyc1syXS50eXBlXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0QW5kUHJvcHMge1xuICBjb25zdHJ1Y3RDbGFzczoganNpaVJlZmxlY3QuQ2xhc3NUeXBlO1xuICBwcm9wc1R5cGVSZWY6IGpzaWlSZWZsZWN0LlR5cGVSZWZlcmVuY2U7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/decdk/lib/declarative-stack.d.ts b/packages/decdk/lib/declarative-stack.d.ts deleted file mode 100644 index 0335bdf9360b2..0000000000000 --- a/packages/decdk/lib/declarative-stack.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as cdk from '@aws-cdk/core'; -import * as reflect from 'jsii-reflect'; -export interface DeclarativeStackProps extends cdk.StackProps { - typeSystem: reflect.TypeSystem; - template: any; - workingDirectory?: string; -} -export declare class DeclarativeStack extends cdk.Stack { - constructor(scope: cdk.App, id: string, props: DeclarativeStackProps); -} diff --git a/packages/decdk/lib/declarative-stack.js b/packages/decdk/lib/declarative-stack.js deleted file mode 100644 index c1af43ff119f5..0000000000000 --- a/packages/decdk/lib/declarative-stack.js +++ /dev/null @@ -1,371 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DeclarativeStack = void 0; -const cdk = require("@aws-cdk/core"); -const reflect = require("jsii-reflect"); -const jsonschema = require("jsonschema"); -const cdk_schema_1 = require("./cdk-schema"); -const jsii2schema_1 = require("./jsii2schema"); -class DeclarativeStack extends cdk.Stack { - constructor(scope, id, props) { - super(scope, id); - const typeSystem = props.typeSystem; - const template = props.template; - const schema = cdk_schema_1.renderFullSchema(typeSystem); - const result = jsonschema.validate(template, schema); - if (!result.valid) { - throw new ValidationError('Schema validation errors:\n ' + result.errors.map(e => `"${e.property}" ${e.message}`).join('\n ')); - } - // Replace every resource that starts with CDK:: - for (const [logicalId, resourceProps] of Object.entries(template.Resources || {})) { - const rprops = resourceProps; - if (!rprops.Type) { - throw new Error('Resource is missing type: ' + JSON.stringify(resourceProps)); - } - if (isCfnResourceType(rprops.Type)) { - continue; - } - const typeInfo = typeSystem.findFqn(rprops.Type + 'Props'); - const typeRef = new reflect.TypeReference(typeSystem, typeInfo); - const Ctor = resolveType(rprops.Type); - // Changing working directory if needed, such that relative paths in the template are resolved relative to the - // template's location, and not to the current process' CWD. - _cwd(props.workingDirectory, () => new Ctor(this, logicalId, deserializeValue(this, typeRef, true, 'Properties', rprops.Properties))); - delete template.Resources[logicalId]; - } - delete template.$schema; - // Add an Include construct with what's left of the template - new cdk.CfnInclude(this, 'Include', { template }); - // replace all "Fn::GetAtt" with tokens that resolve correctly both for - // constructs and raw resources. - processReferences(this); - } -} -exports.DeclarativeStack = DeclarativeStack; -function resolveType(fqn) { - const [mod, ...className] = fqn.split('.'); - const module = require(mod); - return module[className.join('.')]; -} -function tryResolveIntrinsic(value) { - if (Object.keys(value).length !== 1) { - return undefined; - } - const name = Object.keys(value)[0]; - const val = value[name]; - return { name, val }; -} -function tryResolveRef(value) { - const fn = tryResolveIntrinsic(value); - if (!fn) { - return undefined; - } - if (fn.name !== 'Ref') { - return undefined; - } - return fn.val; -} -function tryResolveGetAtt(value) { - const fn = tryResolveIntrinsic(value); - if (!fn || fn.name !== 'Fn::GetAtt') { - return undefined; - } - return fn.val; -} -function deserializeValue(stack, typeRef, optional, key, value) { - // console.error('====== deserializer ==================='); - // console.error(`type: ${typeRef}`); - // console.error(`value: ${JSON.stringify(value, undefined, 2)}`); - // console.error('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`'); - if (value === undefined) { - if (optional) { - return undefined; - } - throw new Error(`Missing required value for ${key} in ${typeRef}`); - } - // deserialize arrays - if (typeRef.arrayOfType) { - if (!Array.isArray(value)) { - throw new Error(`Expecting array for ${key} in ${typeRef}`); - } - return value.map((x, i) => deserializeValue(stack, typeRef.arrayOfType, false, `${key}[${i}]`, x)); - } - const asRef = tryResolveRef(value); - if (asRef) { - if (jsii2schema_1.isConstruct(typeRef)) { - return findConstruct(stack, value.Ref); - } - throw new Error(`{ Ref } can only be used when a construct type is expected and this is ${typeRef}. ` + - `Use { Fn::GetAtt } to represent specific resource attributes`); - } - const getAtt = tryResolveGetAtt(value); - if (getAtt) { - const [logical, attr] = getAtt; - if (jsii2schema_1.isConstruct(typeRef)) { - const obj = findConstruct(stack, logical); - return obj[attr]; - } - if (typeRef.primitive === 'string') { - // return a lazy value, so we only try to find after all constructs - // have been added to the stack. - return deconstructGetAtt(stack, logical, attr); - } - throw new Error(`Fn::GetAtt can only be used for string primitives and ${key} is ${typeRef}`); - } - // deserialize maps - if (typeRef.mapOfType) { - if (typeof (value) !== 'object') { - throw new ValidationError(`Expecting object for ${key} in ${typeRef}`); - } - const out = {}; - for (const [k, v] of Object.entries(value)) { - out[k] = deserializeValue(stack, typeRef.mapOfType, false, `${key}.${k}`, v); - } - return out; - } - if (typeRef.unionOfTypes) { - const errors = new Array(); - for (const x of typeRef.unionOfTypes) { - try { - return deserializeValue(stack, x, optional, key, value); - } - catch (e) { - if (!(e instanceof ValidationError)) { - throw e; - } - errors.push(e); - continue; - } - } - throw new ValidationError(`Failed to deserialize union. Errors: \n ${errors.map(e => e.message).join('\n ')}`); - } - const enm = deconstructEnum(stack, typeRef, key, value); - if (enm) { - return enm; - } - // if this is an interface, deserialize each property - const ifc = deconstructInterface(stack, typeRef, key, value); - if (ifc) { - return ifc; - } - // if this is an enum type, use the name to dereference - if (typeRef.type instanceof reflect.EnumType) { - const enumType = resolveType(typeRef.type.fqn); - return enumType[value]; - } - if (typeRef.primitive) { - return value; - } - const enumLike = deconstructEnumLike(stack, typeRef, value); - if (enumLike) { - return enumLike; - } - const asType = deconstructType(stack, typeRef, value); - if (asType) { - return asType; - } - throw new Error(`Unable to deconstruct "${JSON.stringify(value)}" for type ref ${typeRef}`); -} -function deconstructEnum(_stack, typeRef, _key, value) { - if (!(typeRef.type instanceof reflect.EnumType)) { - return undefined; - } - const enumType = resolveType(typeRef.type.fqn); - return enumType[value]; -} -function deconstructInterface(stack, typeRef, key, value) { - if (!jsii2schema_1.isSerializableInterface(typeRef.type)) { - return undefined; - } - const out = {}; - for (const prop of typeRef.type.allProperties) { - const propValue = value[prop.name]; - if (!propValue) { - if (!prop.optional) { - throw new ValidationError(`Missing required property ${key}.${prop.name} in ${typeRef}`); - } - continue; - } - out[prop.name] = deserializeValue(stack, prop.type, prop.optional, `${key}.${prop.name}`, propValue); - } - return out; -} -function deconstructEnumLike(stack, typeRef, value) { - if (!jsii2schema_1.isEnumLikeClass(typeRef.type)) { - return undefined; - } - // if the value is a string, we deconstruct it as a static property - if (typeof (value) === 'string') { - return deconstructStaticProperty(typeRef.type, value); - } - // if the value is an object, we deconstruct it as a static method - if (typeof (value) === 'object' && !Array.isArray(value)) { - return deconstructStaticMethod(stack, typeRef.type, value); - } - throw new Error(`Invalid value for enum-like class ${typeRef.fqn}: ${JSON.stringify(value)}`); -} -function deconstructType(stack, typeRef, value) { - const schemaDefs = {}; - const ctx = jsii2schema_1.SchemaContext.root(schemaDefs); - const schemaRef = jsii2schema_1.schemaForPolymorphic(typeRef.type, ctx); - if (!schemaRef) { - return undefined; - } - const def = findDefinition(schemaDefs, schemaRef.$ref); - const keys = Object.keys(value); - if (keys.length !== 1) { - throw new ValidationError(`Cannot parse class type ${typeRef} with value ${value}`); - } - const className = keys[0]; - // now we need to check if it's an enum or a normal class - const schema = def.anyOf.find((x) => x.properties && x.properties[className]); - if (!schema) { - throw new ValidationError(`Cannot find schema for ${className}`); - } - const def2 = findDefinition(schemaDefs, schema.properties[className].$ref); - const methodFqn = def2.comment; - const parts = methodFqn.split('.'); - const last = parts[parts.length - 1]; - if (last !== '') { - throw new Error(`Expectring an initializer`); - } - const classFqn = parts.slice(0, parts.length - 1).join('.'); - const method = typeRef.system.findClass(classFqn).initializer; - if (!method) { - throw new Error(`Cannot find the initializer for ${classFqn}`); - } - return invokeMethod(stack, method, value[className]); -} -function findDefinition(defs, $ref) { - const k = $ref.split('/').slice(2).join('/'); - return defs[k]; -} -function deconstructStaticProperty(typeRef, value) { - const typeClass = resolveType(typeRef.fqn); - return typeClass[value]; -} -function deconstructStaticMethod(stack, typeRef, value) { - const methods = typeRef.allMethods.filter(m => m.static); - const members = methods.map(x => x.name); - if (typeof (value) === 'object') { - const entries = Object.entries(value); - if (entries.length !== 1) { - throw new Error(`Value for enum-like class ${typeRef.fqn} must be an object with a single key (one of: ${members.join(',')})`); - } - const [methodName, args] = entries[0]; - const method = methods.find(m => m.name === methodName); - if (!method) { - throw new Error(`Invalid member "${methodName}" for enum-like class ${typeRef.fqn}. Options: ${members.join(',')}`); - } - if (typeof (args) !== 'object') { - throw new Error(`Expecting enum-like member ${methodName} to be an object for enum-like class ${typeRef.fqn}`); - } - return invokeMethod(stack, method, args); - } -} -function invokeMethod(stack, method, parameters) { - const typeClass = resolveType(method.parentType.fqn); - const args = new Array(); - for (let i = 0; i < method.parameters.length; ++i) { - const p = method.parameters[i]; - // kwargs: if this is the last argument and a data type, flatten (treat as keyword args) - if (i === method.parameters.length - 1 && jsii2schema_1.isDataType(p.type.type)) { - // we pass in all parameters are the value, and the positional arguments will be ignored since - // we are promised there are no conflicts - const kwargs = deserializeValue(stack, p.type, p.optional, p.name, parameters); - args.push(kwargs); - } - else { - const val = parameters[p.name]; - if (val === undefined && !p.optional) { - throw new Error(`Missing required parameter '${p.name}' for ${method.parentType.fqn}.${method.name}`); - } - if (val !== undefined) { - args.push(deserializeValue(stack, p.type, p.optional, p.name, val)); - } - } - } - if (reflect.Initializer.isInitializer(method)) { - return new typeClass(...args); - } - const methodFn = typeClass[method.name]; - if (!methodFn) { - throw new Error(`Cannot find method named ${method.name} in ${typeClass.fqn}`); - } - return methodFn.apply(typeClass, args); -} -/** - * Returns a lazy string that includes a deconstructed Fn::GetAt to a certain - * resource or construct. - * - * If `id` points to a CDK construct, the resolved value will be the value returned by - * the property `attribute`. If `id` points to a "raw" resource, the resolved value will be - * an `Fn::GetAtt`. - */ -function deconstructGetAtt(stack, id, attribute) { - return cdk.Lazy.string({ produce: () => { - const res = stack.node.tryFindChild(id); - if (!res) { - const include = stack.node.tryFindChild('Include'); - if (!include) { - throw new Error(`Unexpected - "Include" should be in the stack at this point`); - } - const raw = include.template.Resources[id]; - if (!raw) { - throw new Error(`Unable to find a resource ${id}`); - } - // just leak - return { "Fn::GetAtt": [id, attribute] }; - } - return res[attribute]; - } }); -} -function findConstruct(stack, id) { - const child = stack.node.tryFindChild(id); - if (!child) { - throw new Error(`Construct with ID ${id} not found (it must be defined before it is referenced)`); - } - return child; -} -function processReferences(stack) { - const include = stack.node.findChild('Include'); - if (!include) { - throw new Error('Unexpected'); - } - process(include.template); - function process(value) { - if (typeof (value) === 'object' && Object.keys(value).length === 1 && Object.keys(value)[0] === 'Fn::GetAtt') { - const [id, attribute] = value['Fn::GetAtt']; - return deconstructGetAtt(stack, id, attribute); - } - if (Array.isArray(value)) { - return value.map(x => process(x)); - } - if (typeof (value) === 'object') { - for (const [k, v] of Object.entries(value)) { - value[k] = process(v); - } - return value; - } - return value; - } -} -function isCfnResourceType(resourceType) { - return resourceType.includes('::'); -} -class ValidationError extends Error { -} -function _cwd(workDir, cb) { - if (!workDir) { - return cb(); - } - const prevWd = process.cwd(); - try { - process.chdir(workDir); - return cb(); - } - finally { - process.chdir(prevWd); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyYXRpdmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZWNsYXJhdGl2ZS1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBcUM7QUFDckMsd0NBQXdDO0FBQ3hDLHlDQUF5QztBQUN6Qyw2Q0FBZ0Q7QUFDaEQsK0NBQXVJO0FBUXZJLE1BQWEsZ0JBQWlCLFNBQVEsR0FBRyxDQUFDLEtBQUs7SUFDN0MsWUFBWSxLQUFjLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRWhDLE1BQU0sTUFBTSxHQUFHLDZCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxlQUFlLENBQUMsK0JBQStCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDbEk7UUFFRCxnREFBZ0Q7UUFDaEQsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtZQUNqRixNQUFNLE1BQU0sR0FBUSxhQUFhLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQy9FO1lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xDLFNBQVM7YUFDVjtZQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQztZQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEMsOEdBQThHO1lBQzlHLDREQUE0RDtZQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJHLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUV4Qiw0REFBNEQ7UUFDNUQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWxELHVFQUF1RTtRQUN2RSxnQ0FBZ0M7UUFDaEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBOUNELDRDQThDQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxDQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFVO0lBQ3JDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBVTtJQUMvQixNQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ1AsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ3JCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQVU7SUFDbEMsTUFBTSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtRQUNuQyxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLE9BQThCLEVBQUUsUUFBaUIsRUFBRSxHQUFXLEVBQUUsS0FBVTtJQUNwSCw0REFBNEQ7SUFDNUQscUNBQXFDO0lBQ3JDLGtFQUFrRTtJQUNsRSx3RUFBd0U7SUFFeEUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixHQUFHLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNwRTtJQUVELHFCQUFxQjtJQUNyQixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyRztJQUVELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJLEtBQUssRUFBRTtRQUNULElBQUkseUJBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QixPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FDYiwwRUFBMEUsT0FBTyxJQUFJO1lBQ3JGLDhEQUE4RCxDQUFDLENBQUM7S0FDbkU7SUFFRCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxJQUFJLE1BQU0sRUFBRTtRQUNWLE1BQU0sQ0FBRSxPQUFPLEVBQUUsSUFBSSxDQUFFLEdBQUcsTUFBTSxDQUFDO1FBRWpDLElBQUkseUJBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QixNQUFNLEdBQUcsR0FBUSxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNsQyxtRUFBbUU7WUFDbkUsZ0NBQWdDO1lBQ2hDLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoRDtRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELEdBQUcsT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQy9GO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtRQUNyQixJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDOUIsTUFBTSxJQUFJLGVBQWUsQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDeEU7UUFFRCxNQUFNLEdBQUcsR0FBUSxFQUFHLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RTtRQUVELE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQU8sQ0FBQztRQUNoQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDcEMsSUFBSTtnQkFDRixPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6RDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUMsRUFBRTtvQkFDbkMsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixTQUFTO2FBQ1Y7U0FDRjtRQUVELE1BQU0sSUFBSSxlQUFlLENBQUMsNENBQTRDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsSDtJQUVELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RCxJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxxREFBcUQ7SUFDckQsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsSUFBSSxHQUFHLEVBQUU7UUFDUCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsdURBQXVEO0lBQ3ZELElBQUksT0FBTyxDQUFDLElBQUksWUFBWSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQzVDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELElBQUksUUFBUSxFQUFFO1FBQ1osT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLE1BQU0sRUFBRTtRQUNWLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsTUFBaUIsRUFBRSxPQUE4QixFQUFFLElBQVksRUFBRSxLQUFVO0lBQ2xHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFlBQVksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9DLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBZ0IsRUFBRSxPQUE4QixFQUFFLEdBQVcsRUFBRSxLQUFVO0lBQ3JHLElBQUksQ0FBQyxxQ0FBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDMUMsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLEdBQUcsR0FBUSxFQUFHLENBQUM7SUFDckIsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUM3QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLGVBQWUsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQzthQUMxRjtZQUNELFNBQVM7U0FDVjtRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDdEc7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQWdCLEVBQUUsT0FBOEIsRUFBRSxLQUFVO0lBQ3ZGLElBQUksQ0FBQyw2QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNsQyxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELG1FQUFtRTtJQUNuRSxJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDOUIsT0FBTyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsa0VBQWtFO0lBQ2xFLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdkQsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1RDtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQWdCLEVBQUUsT0FBOEIsRUFBRSxLQUFVO0lBQ25GLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBRywyQkFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxrQ0FBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDZCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNyQixNQUFNLElBQUksZUFBZSxDQUFDLDJCQUEyQixPQUFPLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNyRjtJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxQix5REFBeUQ7SUFDekQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksZUFBZSxDQUFDLDBCQUEwQixTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFO0lBRUQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLElBQUksS0FBSyxlQUFlLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQzlELElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBUyxFQUFFLElBQVk7SUFDN0MsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLE9BQTBCLEVBQUUsS0FBYTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLEtBQWdCLEVBQUUsT0FBMEIsRUFBRSxLQUFVO0lBQ3ZGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekMsSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQzlCLE1BQU0sT0FBTyxHQUEyQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsT0FBTyxDQUFDLEdBQUcsaURBQWlELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hJO1FBRUQsTUFBTSxDQUFFLFVBQVUsRUFBRSxJQUFJLENBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFVBQVUseUJBQXlCLE9BQU8sQ0FBQyxHQUFHLGNBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDckg7UUFFRCxJQUFJLE9BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsVUFBVSx3Q0FBd0MsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDaEg7UUFFRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWdCLEVBQUUsTUFBd0IsRUFBRSxVQUFlO0lBQy9FLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7SUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0Isd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSx3QkFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakUsOEZBQThGO1lBQzlGLHlDQUF5QztZQUN6QyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQjthQUFNO1lBQ0wsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUMsSUFBSSxTQUFTLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZHO1lBRUQsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0Y7S0FDRjtJQUVELElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDN0MsT0FBTyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBRUQsTUFBTSxRQUFRLEdBQTRCLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDaEY7SUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxTQUFpQjtJQUN4RSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBbUIsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7aUJBQ2hGO2dCQUVELE1BQU0sR0FBRyxHQUFJLE9BQU8sQ0FBQyxRQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRDtnQkFFRCxZQUFZO2dCQUNaLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBRSxFQUFFLEVBQUUsU0FBUyxDQUFFLEVBQUUsQ0FBQzthQUM1QztZQUNELE9BQVEsR0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxFQUFVO0lBQ2pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLHlEQUF5RCxDQUFDLENBQUM7S0FDbkc7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWdCO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBbUIsQ0FBQztJQUNsRSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMvQjtJQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBZSxDQUFDLENBQUM7SUFFakMsU0FBUyxPQUFPLENBQUMsS0FBVTtRQUN6QixJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFO1lBQzNHLE1BQU0sQ0FBRSxFQUFFLEVBQUUsU0FBUyxDQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlDLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUM5QixLQUFLLE1BQU0sQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxZQUFvQjtJQUM3QyxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sZUFBZ0IsU0FBUSxLQUFLO0NBQUk7QUFFdkMsU0FBUyxJQUFJLENBQUksT0FBMkIsRUFBRSxFQUFXO0lBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUU7UUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0tBQUU7SUFDOUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdCLElBQUk7UUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFLENBQUM7S0FDYjtZQUFTO1FBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN2QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgKiBhcyByZWZsZWN0IGZyb20gJ2pzaWktcmVmbGVjdCc7XG5pbXBvcnQgKiBhcyBqc29uc2NoZW1hIGZyb20gJ2pzb25zY2hlbWEnO1xuaW1wb3J0IHsgcmVuZGVyRnVsbFNjaGVtYSB9IGZyb20gJy4vY2RrLXNjaGVtYSc7XG5pbXBvcnQgeyBpc0NvbnN0cnVjdCwgaXNEYXRhVHlwZSwgaXNFbnVtTGlrZUNsYXNzLCBpc1NlcmlhbGl6YWJsZUludGVyZmFjZSwgU2NoZW1hQ29udGV4dCwgc2NoZW1hRm9yUG9seW1vcnBoaWMgfSBmcm9tICcuL2pzaWkyc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBEZWNsYXJhdGl2ZVN0YWNrUHJvcHMgZXh0ZW5kcyBjZGsuU3RhY2tQcm9wcyB7XG4gIHR5cGVTeXN0ZW06IHJlZmxlY3QuVHlwZVN5c3RlbTtcbiAgdGVtcGxhdGU6IGFueTtcbiAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERlY2xhcmF0aXZlU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkFwcCwgaWQ6IHN0cmluZywgcHJvcHM6IERlY2xhcmF0aXZlU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB0eXBlU3lzdGVtID0gcHJvcHMudHlwZVN5c3RlbTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHByb3BzLnRlbXBsYXRlO1xuXG4gICAgY29uc3Qgc2NoZW1hID0gcmVuZGVyRnVsbFNjaGVtYSh0eXBlU3lzdGVtKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGpzb25zY2hlbWEudmFsaWRhdGUodGVtcGxhdGUsIHNjaGVtYSk7XG4gICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1NjaGVtYSB2YWxpZGF0aW9uIGVycm9yczpcXG4gICcgKyByZXN1bHQuZXJyb3JzLm1hcChlID0+IGBcIiR7ZS5wcm9wZXJ0eX1cIiAke2UubWVzc2FnZX1gKS5qb2luKCdcXG4gICcpKTtcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIGV2ZXJ5IHJlc291cmNlIHRoYXQgc3RhcnRzIHdpdGggQ0RLOjpcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHJlc291cmNlUHJvcHNdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkpIHtcbiAgICAgIGNvbnN0IHJwcm9wczogYW55ID0gcmVzb3VyY2VQcm9wcztcbiAgICAgIGlmICghcnByb3BzLlR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNvdXJjZSBpcyBtaXNzaW5nIHR5cGU6ICcgKyBKU09OLnN0cmluZ2lmeShyZXNvdXJjZVByb3BzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0NmblJlc291cmNlVHlwZShycHJvcHMuVHlwZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gdHlwZVN5c3RlbS5maW5kRnFuKHJwcm9wcy5UeXBlICsgJ1Byb3BzJyk7XG4gICAgICBjb25zdCB0eXBlUmVmID0gbmV3IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSh0eXBlU3lzdGVtLCB0eXBlSW5mbyk7XG4gICAgICBjb25zdCBDdG9yID0gcmVzb2x2ZVR5cGUocnByb3BzLlR5cGUpO1xuXG4gICAgICAvLyBDaGFuZ2luZyB3b3JraW5nIGRpcmVjdG9yeSBpZiBuZWVkZWQsIHN1Y2ggdGhhdCByZWxhdGl2ZSBwYXRocyBpbiB0aGUgdGVtcGxhdGUgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAgICAgLy8gdGVtcGxhdGUncyBsb2NhdGlvbiwgYW5kIG5vdCB0byB0aGUgY3VycmVudCBwcm9jZXNzJyBDV0QuXG4gICAgICBfY3dkKHByb3BzLndvcmtpbmdEaXJlY3RvcnksICgpID0+XG4gICAgICAgIG5ldyBDdG9yKHRoaXMsIGxvZ2ljYWxJZCwgZGVzZXJpYWxpemVWYWx1ZSh0aGlzLCB0eXBlUmVmLCB0cnVlLCAnUHJvcGVydGllcycsIHJwcm9wcy5Qcm9wZXJ0aWVzKSkpO1xuXG4gICAgICBkZWxldGUgdGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF07XG4gICAgfVxuXG4gICAgZGVsZXRlIHRlbXBsYXRlLiRzY2hlbWE7XG5cbiAgICAvLyBBZGQgYW4gSW5jbHVkZSBjb25zdHJ1Y3Qgd2l0aCB3aGF0J3MgbGVmdCBvZiB0aGUgdGVtcGxhdGVcbiAgICBuZXcgY2RrLkNmbkluY2x1ZGUodGhpcywgJ0luY2x1ZGUnLCB7IHRlbXBsYXRlIH0pO1xuXG4gICAgLy8gcmVwbGFjZSBhbGwgXCJGbjo6R2V0QXR0XCIgd2l0aCB0b2tlbnMgdGhhdCByZXNvbHZlIGNvcnJlY3RseSBib3RoIGZvclxuICAgIC8vIGNvbnN0cnVjdHMgYW5kIHJhdyByZXNvdXJjZXMuXG4gICAgcHJvY2Vzc1JlZmVyZW5jZXModGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVR5cGUoZnFuOiBzdHJpbmcpIHtcbiAgY29uc3QgWyBtb2QsIC4uLmNsYXNzTmFtZSBdID0gZnFuLnNwbGl0KCcuJyk7XG4gIGNvbnN0IG1vZHVsZSA9IHJlcXVpcmUobW9kKTtcbiAgcmV0dXJuIG1vZHVsZVtjbGFzc05hbWUuam9pbignLicpXTtcbn1cblxuZnVuY3Rpb24gdHJ5UmVzb2x2ZUludHJpbnNpYyh2YWx1ZTogYW55KSB7XG4gIGlmIChPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyh2YWx1ZSlbMF07XG4gIGNvbnN0IHZhbCA9IHZhbHVlW25hbWVdO1xuICByZXR1cm4geyBuYW1lLCB2YWwgfTtcbn1cblxuZnVuY3Rpb24gdHJ5UmVzb2x2ZVJlZih2YWx1ZTogYW55KSB7XG4gIGNvbnN0IGZuID0gdHJ5UmVzb2x2ZUludHJpbnNpYyh2YWx1ZSk7XG4gIGlmICghZm4pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGZuLm5hbWUgIT09ICdSZWYnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmbi52YWw7XG59XG5cbmZ1bmN0aW9uIHRyeVJlc29sdmVHZXRBdHQodmFsdWU6IGFueSkge1xuICBjb25zdCBmbiA9IHRyeVJlc29sdmVJbnRyaW5zaWModmFsdWUpO1xuICBpZiAoIWZuIHx8IGZuLm5hbWUgIT09ICdGbjo6R2V0QXR0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZm4udmFsO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVZhbHVlKHN0YWNrOiBjZGsuU3RhY2ssIHR5cGVSZWY6IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSwgb3B0aW9uYWw6IGJvb2xlYW4sIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgLy8gY29uc29sZS5lcnJvcignPT09PT09IGRlc2VyaWFsaXplciA9PT09PT09PT09PT09PT09PT09Jyk7XG4gIC8vIGNvbnNvbGUuZXJyb3IoYHR5cGU6ICR7dHlwZVJlZn1gKTtcbiAgLy8gY29uc29sZS5lcnJvcihgdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUsIHVuZGVmaW5lZCwgMil9YCk7XG4gIC8vIGNvbnNvbGUuZXJyb3IoJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+YCcpO1xuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCB2YWx1ZSBmb3IgJHtrZXl9IGluICR7dHlwZVJlZn1gKTtcbiAgfVxuXG4gIC8vIGRlc2VyaWFsaXplIGFycmF5c1xuICBpZiAodHlwZVJlZi5hcnJheU9mVHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0aW5nIGFycmF5IGZvciAke2tleX0gaW4gJHt0eXBlUmVmfWApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZS5tYXAoKHgsIGkpID0+IGRlc2VyaWFsaXplVmFsdWUoc3RhY2ssIHR5cGVSZWYuYXJyYXlPZlR5cGUhLCBmYWxzZSwgYCR7a2V5fVske2l9XWAsIHgpKTtcbiAgfVxuXG4gIGNvbnN0IGFzUmVmID0gdHJ5UmVzb2x2ZVJlZih2YWx1ZSk7XG4gIGlmIChhc1JlZikge1xuICAgIGlmIChpc0NvbnN0cnVjdCh0eXBlUmVmKSkge1xuICAgICAgcmV0dXJuIGZpbmRDb25zdHJ1Y3Qoc3RhY2ssIHZhbHVlLlJlZik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHsgUmVmIH0gY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGEgY29uc3RydWN0IHR5cGUgaXMgZXhwZWN0ZWQgYW5kIHRoaXMgaXMgJHt0eXBlUmVmfS4gYCArXG4gICAgICBgVXNlIHsgRm46OkdldEF0dCB9IHRvIHJlcHJlc2VudCBzcGVjaWZpYyByZXNvdXJjZSBhdHRyaWJ1dGVzYCk7XG4gIH1cblxuICBjb25zdCBnZXRBdHQgPSB0cnlSZXNvbHZlR2V0QXR0KHZhbHVlKTtcbiAgaWYgKGdldEF0dCkge1xuICAgIGNvbnN0IFsgbG9naWNhbCwgYXR0ciBdID0gZ2V0QXR0O1xuXG4gICAgaWYgKGlzQ29uc3RydWN0KHR5cGVSZWYpKSB7XG4gICAgICBjb25zdCBvYmo6IGFueSA9IGZpbmRDb25zdHJ1Y3Qoc3RhY2ssIGxvZ2ljYWwpO1xuICAgICAgcmV0dXJuIG9ialthdHRyXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVJlZi5wcmltaXRpdmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyByZXR1cm4gYSBsYXp5IHZhbHVlLCBzbyB3ZSBvbmx5IHRyeSB0byBmaW5kIGFmdGVyIGFsbCBjb25zdHJ1Y3RzXG4gICAgICAvLyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHN0YWNrLlxuICAgICAgcmV0dXJuIGRlY29uc3RydWN0R2V0QXR0KHN0YWNrLCBsb2dpY2FsLCBhdHRyKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZuOjpHZXRBdHQgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc3RyaW5nIHByaW1pdGl2ZXMgYW5kICR7a2V5fSBpcyAke3R5cGVSZWZ9YCk7XG4gIH1cblxuICAvLyBkZXNlcmlhbGl6ZSBtYXBzXG4gIGlmICh0eXBlUmVmLm1hcE9mVHlwZSkge1xuICAgIGlmICh0eXBlb2YodmFsdWUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRXhwZWN0aW5nIG9iamVjdCBmb3IgJHtrZXl9IGluICR7dHlwZVJlZn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXQ6IGFueSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IFsgaywgdiBdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgb3V0W2tdID0gZGVzZXJpYWxpemVWYWx1ZShzdGFjaywgdHlwZVJlZi5tYXBPZlR5cGUsIGZhbHNlLCBgJHtrZXl9LiR7a31gLCB2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgaWYgKHR5cGVSZWYudW5pb25PZlR5cGVzKSB7XG4gICAgY29uc3QgZXJyb3JzID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICBmb3IgKGNvbnN0IHggb2YgdHlwZVJlZi51bmlvbk9mVHlwZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZVZhbHVlKHN0YWNrLCB4LCBvcHRpb25hbCwga2V5LCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvcnMucHVzaChlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIHVuaW9uLiBFcnJvcnM6IFxcbiAgJHtlcnJvcnMubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCdcXG4gICcpfWApO1xuICB9XG5cbiAgY29uc3QgZW5tID0gZGVjb25zdHJ1Y3RFbnVtKHN0YWNrLCB0eXBlUmVmLCBrZXksIHZhbHVlKTtcbiAgaWYgKGVubSkge1xuICAgIHJldHVybiBlbm07XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGFuIGludGVyZmFjZSwgZGVzZXJpYWxpemUgZWFjaCBwcm9wZXJ0eVxuICBjb25zdCBpZmMgPSBkZWNvbnN0cnVjdEludGVyZmFjZShzdGFjaywgdHlwZVJlZiwga2V5LCB2YWx1ZSk7XG4gIGlmIChpZmMpIHtcbiAgICByZXR1cm4gaWZjO1xuICB9XG5cbiAgLy8gaWYgdGhpcyBpcyBhbiBlbnVtIHR5cGUsIHVzZSB0aGUgbmFtZSB0byBkZXJlZmVyZW5jZVxuICBpZiAodHlwZVJlZi50eXBlIGluc3RhbmNlb2YgcmVmbGVjdC5FbnVtVHlwZSkge1xuICAgIGNvbnN0IGVudW1UeXBlID0gcmVzb2x2ZVR5cGUodHlwZVJlZi50eXBlLmZxbik7XG4gICAgcmV0dXJuIGVudW1UeXBlW3ZhbHVlXTtcbiAgfVxuXG4gIGlmICh0eXBlUmVmLnByaW1pdGl2ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGVudW1MaWtlID0gZGVjb25zdHJ1Y3RFbnVtTGlrZShzdGFjaywgdHlwZVJlZiwgdmFsdWUpO1xuICBpZiAoZW51bUxpa2UpIHtcbiAgICByZXR1cm4gZW51bUxpa2U7XG4gIH1cblxuICBjb25zdCBhc1R5cGUgPSBkZWNvbnN0cnVjdFR5cGUoc3RhY2ssIHR5cGVSZWYsIHZhbHVlKTtcbiAgaWYgKGFzVHlwZSkge1xuICAgIHJldHVybiBhc1R5cGU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZWNvbnN0cnVjdCBcIiR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfVwiIGZvciB0eXBlIHJlZiAke3R5cGVSZWZ9YCk7XG59XG5cbmZ1bmN0aW9uIGRlY29uc3RydWN0RW51bShfc3RhY2s6IGNkay5TdGFjaywgdHlwZVJlZjogcmVmbGVjdC5UeXBlUmVmZXJlbmNlLCBfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgaWYgKCEodHlwZVJlZi50eXBlIGluc3RhbmNlb2YgcmVmbGVjdC5FbnVtVHlwZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZW51bVR5cGUgPSByZXNvbHZlVHlwZSh0eXBlUmVmLnR5cGUuZnFuKTtcbiAgcmV0dXJuIGVudW1UeXBlW3ZhbHVlXTtcbn1cblxuZnVuY3Rpb24gZGVjb25zdHJ1Y3RJbnRlcmZhY2Uoc3RhY2s6IGNkay5TdGFjaywgdHlwZVJlZjogcmVmbGVjdC5UeXBlUmVmZXJlbmNlLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICBpZiAoIWlzU2VyaWFsaXphYmxlSW50ZXJmYWNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgb3V0OiBhbnkgPSB7IH07XG4gIGZvciAoY29uc3QgcHJvcCBvZiB0eXBlUmVmLnR5cGUuYWxsUHJvcGVydGllcykge1xuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHZhbHVlW3Byb3AubmFtZV07XG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIGlmICghcHJvcC5vcHRpb25hbCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICR7a2V5fS4ke3Byb3AubmFtZX0gaW4gJHt0eXBlUmVmfWApO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgb3V0W3Byb3AubmFtZV0gPSBkZXNlcmlhbGl6ZVZhbHVlKHN0YWNrLCBwcm9wLnR5cGUsIHByb3Aub3B0aW9uYWwsIGAke2tleX0uJHtwcm9wLm5hbWV9YCwgcHJvcFZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGRlY29uc3RydWN0RW51bUxpa2Uoc3RhY2s6IGNkay5TdGFjaywgdHlwZVJlZjogcmVmbGVjdC5UeXBlUmVmZXJlbmNlLCB2YWx1ZTogYW55KSB7XG4gIGlmICghaXNFbnVtTGlrZUNsYXNzKHR5cGVSZWYudHlwZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCB3ZSBkZWNvbnN0cnVjdCBpdCBhcyBhIHN0YXRpYyBwcm9wZXJ0eVxuICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVjb25zdHJ1Y3RTdGF0aWNQcm9wZXJ0eSh0eXBlUmVmLnR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIC8vIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QsIHdlIGRlY29uc3RydWN0IGl0IGFzIGEgc3RhdGljIG1ldGhvZFxuICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGRlY29uc3RydWN0U3RhdGljTWV0aG9kKHN0YWNrLCB0eXBlUmVmLnR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3IgZW51bS1saWtlIGNsYXNzICR7dHlwZVJlZi5mcW59OiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbn1cblxuZnVuY3Rpb24gZGVjb25zdHJ1Y3RUeXBlKHN0YWNrOiBjZGsuU3RhY2ssIHR5cGVSZWY6IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSwgdmFsdWU6IGFueSkge1xuICBjb25zdCBzY2hlbWFEZWZzOiBhbnkgPSB7fTtcbiAgY29uc3QgY3R4ID0gU2NoZW1hQ29udGV4dC5yb290KHNjaGVtYURlZnMpO1xuICBjb25zdCBzY2hlbWFSZWYgPSBzY2hlbWFGb3JQb2x5bW9ycGhpYyh0eXBlUmVmLnR5cGUsIGN0eCk7XG4gIGlmICghc2NoZW1hUmVmKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRlZiA9IGZpbmREZWZpbml0aW9uKHNjaGVtYURlZnMsIHNjaGVtYVJlZi4kcmVmKTtcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICBpZiAoa2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBDYW5ub3QgcGFyc2UgY2xhc3MgdHlwZSAke3R5cGVSZWZ9IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IGtleXNbMF07XG5cbiAgLy8gbm93IHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBhbiBlbnVtIG9yIGEgbm9ybWFsIGNsYXNzXG4gIGNvbnN0IHNjaGVtYSA9IGRlZi5hbnlPZi5maW5kKCh4OiBhbnkpID0+IHgucHJvcGVydGllcyAmJiB4LnByb3BlcnRpZXNbY2xhc3NOYW1lXSk7XG4gIGlmICghc2NoZW1hKSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgQ2Fubm90IGZpbmQgc2NoZW1hIGZvciAke2NsYXNzTmFtZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGRlZjIgPSBmaW5kRGVmaW5pdGlvbihzY2hlbWFEZWZzLCBzY2hlbWEucHJvcGVydGllc1tjbGFzc05hbWVdLiRyZWYpO1xuICBjb25zdCBtZXRob2RGcW4gPSBkZWYyLmNvbW1lbnQ7XG5cbiAgY29uc3QgcGFydHMgPSBtZXRob2RGcW4uc3BsaXQoJy4nKTtcbiAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICBpZiAobGFzdCAhPT0gJzxpbml0aWFsaXplcj4nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RyaW5nIGFuIGluaXRpYWxpemVyYCk7XG4gIH1cblxuICBjb25zdCBjbGFzc0ZxbiA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpLmpvaW4oJy4nKTtcbiAgY29uc3QgbWV0aG9kID0gdHlwZVJlZi5zeXN0ZW0uZmluZENsYXNzKGNsYXNzRnFuKS5pbml0aWFsaXplcjtcbiAgaWYgKCFtZXRob2QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBpbml0aWFsaXplciBmb3IgJHtjbGFzc0Zxbn1gKTtcbiAgfVxuXG4gIHJldHVybiBpbnZva2VNZXRob2Qoc3RhY2ssIG1ldGhvZCwgdmFsdWVbY2xhc3NOYW1lXSk7XG59XG5cbmZ1bmN0aW9uIGZpbmREZWZpbml0aW9uKGRlZnM6IGFueSwgJHJlZjogc3RyaW5nKSB7XG4gIGNvbnN0IGsgPSAkcmVmLnNwbGl0KCcvJykuc2xpY2UoMikuam9pbignLycpO1xuICByZXR1cm4gZGVmc1trXTtcbn1cblxuZnVuY3Rpb24gZGVjb25zdHJ1Y3RTdGF0aWNQcm9wZXJ0eSh0eXBlUmVmOiByZWZsZWN0LkNsYXNzVHlwZSwgdmFsdWU6IHN0cmluZykge1xuICBjb25zdCB0eXBlQ2xhc3MgPSByZXNvbHZlVHlwZSh0eXBlUmVmLmZxbik7XG4gIHJldHVybiB0eXBlQ2xhc3NbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiBkZWNvbnN0cnVjdFN0YXRpY01ldGhvZChzdGFjazogY2RrLlN0YWNrLCB0eXBlUmVmOiByZWZsZWN0LkNsYXNzVHlwZSwgdmFsdWU6IGFueSkge1xuICBjb25zdCBtZXRob2RzID0gdHlwZVJlZi5hbGxNZXRob2RzLmZpbHRlcihtID0+IG0uc3RhdGljKTtcbiAgY29uc3QgbWVtYmVycyA9IG1ldGhvZHMubWFwKHggPT4geC5uYW1lKTtcblxuICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBlbnRyaWVzOiBBcnJheTxbIHN0cmluZywgYW55IF0+ID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBmb3IgZW51bS1saWtlIGNsYXNzICR7dHlwZVJlZi5mcW59IG11c3QgYmUgYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUga2V5IChvbmUgb2Y6ICR7bWVtYmVycy5qb2luKCcsJyl9KWApO1xuICAgIH1cblxuICAgIGNvbnN0IFsgbWV0aG9kTmFtZSwgYXJncyBdID0gZW50cmllc1swXTtcbiAgICBjb25zdCBtZXRob2QgPSBtZXRob2RzLmZpbmQobSA9PiBtLm5hbWUgPT09IG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWVtYmVyIFwiJHttZXRob2ROYW1lfVwiIGZvciBlbnVtLWxpa2UgY2xhc3MgJHt0eXBlUmVmLmZxbn0uIE9wdGlvbnM6ICR7bWVtYmVycy5qb2luKCcsJyl9YCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZihhcmdzKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0aW5nIGVudW0tbGlrZSBtZW1iZXIgJHttZXRob2ROYW1lfSB0byBiZSBhbiBvYmplY3QgZm9yIGVudW0tbGlrZSBjbGFzcyAke3R5cGVSZWYuZnFufWApO1xuICAgIH1cblxuICAgIHJldHVybiBpbnZva2VNZXRob2Qoc3RhY2ssIG1ldGhvZCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlTWV0aG9kKHN0YWNrOiBjZGsuU3RhY2ssIG1ldGhvZDogcmVmbGVjdC5DYWxsYWJsZSwgcGFyYW1ldGVyczogYW55KSB7XG4gIGNvbnN0IHR5cGVDbGFzcyA9IHJlc29sdmVUeXBlKG1ldGhvZC5wYXJlbnRUeXBlLmZxbik7XG4gIGNvbnN0IGFyZ3MgPSBuZXcgQXJyYXk8YW55PigpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwID0gbWV0aG9kLnBhcmFtZXRlcnNbaV07XG5cbiAgICAvLyBrd2FyZ3M6IGlmIHRoaXMgaXMgdGhlIGxhc3QgYXJndW1lbnQgYW5kIGEgZGF0YSB0eXBlLCBmbGF0dGVuICh0cmVhdCBhcyBrZXl3b3JkIGFyZ3MpXG4gICAgaWYgKGkgPT09IG1ldGhvZC5wYXJhbWV0ZXJzLmxlbmd0aCAtIDEgJiYgaXNEYXRhVHlwZShwLnR5cGUudHlwZSkpIHtcbiAgICAgIC8vIHdlIHBhc3MgaW4gYWxsIHBhcmFtZXRlcnMgYXJlIHRoZSB2YWx1ZSwgYW5kIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIGlnbm9yZWQgc2luY2VcbiAgICAgIC8vIHdlIGFyZSBwcm9taXNlZCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzXG4gICAgICBjb25zdCBrd2FyZ3MgPSBkZXNlcmlhbGl6ZVZhbHVlKHN0YWNrLCBwLnR5cGUsIHAub3B0aW9uYWwsIHAubmFtZSwgcGFyYW1ldGVycyk7XG4gICAgICBhcmdzLnB1c2goa3dhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsID0gcGFyYW1ldGVyc1twLm5hbWVdO1xuICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkICYmICFwLm9wdGlvbmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgJyR7cC5uYW1lfScgZm9yICR7bWV0aG9kLnBhcmVudFR5cGUuZnFufS4ke21ldGhvZC5uYW1lfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXJncy5wdXNoKGRlc2VyaWFsaXplVmFsdWUoc3RhY2ssIHAudHlwZSwgcC5vcHRpb25hbCwgcC5uYW1lLCB2YWwpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVmbGVjdC5Jbml0aWFsaXplci5pc0luaXRpYWxpemVyKG1ldGhvZCkpIHtcbiAgICByZXR1cm4gbmV3IHR5cGVDbGFzcyguLi5hcmdzKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZEZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSA9IHR5cGVDbGFzc1ttZXRob2QubmFtZV07XG4gIGlmICghbWV0aG9kRm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIG1ldGhvZCBuYW1lZCAke21ldGhvZC5uYW1lfSBpbiAke3R5cGVDbGFzcy5mcW59YCk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kRm4uYXBwbHkodHlwZUNsYXNzLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGF6eSBzdHJpbmcgdGhhdCBpbmNsdWRlcyBhIGRlY29uc3RydWN0ZWQgRm46OkdldEF0IHRvIGEgY2VydGFpblxuICogcmVzb3VyY2Ugb3IgY29uc3RydWN0LlxuICpcbiAqIElmIGBpZGAgcG9pbnRzIHRvIGEgQ0RLIGNvbnN0cnVjdCwgdGhlIHJlc29sdmVkIHZhbHVlIHdpbGwgYmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5XG4gKiB0aGUgcHJvcGVydHkgYGF0dHJpYnV0ZWAuIElmIGBpZGAgcG9pbnRzIHRvIGEgXCJyYXdcIiByZXNvdXJjZSwgdGhlIHJlc29sdmVkIHZhbHVlIHdpbGwgYmVcbiAqIGFuIGBGbjo6R2V0QXR0YC5cbiAqL1xuZnVuY3Rpb24gZGVjb25zdHJ1Y3RHZXRBdHQoc3RhY2s6IGNkay5TdGFjaywgaWQ6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNkay5MYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChpZCk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIGNvbnN0IGluY2x1ZGUgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZCgnSW5jbHVkZScpIGFzIGNkay5DZm5JbmNsdWRlO1xuICAgICAgaWYgKCFpbmNsdWRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCAtIFwiSW5jbHVkZVwiIHNob3VsZCBiZSBpbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByYXcgPSAoaW5jbHVkZS50ZW1wbGF0ZSBhcyBhbnkpLlJlc291cmNlc1tpZF07XG4gICAgICBpZiAoIXJhdykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGEgcmVzb3VyY2UgJHtpZH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8ganVzdCBsZWFrXG4gICAgICByZXR1cm4geyBcIkZuOjpHZXRBdHRcIjogWyBpZCwgYXR0cmlidXRlIF0gfTtcbiAgICB9XG4gICAgcmV0dXJuIChyZXMgYXMgYW55KVthdHRyaWJ1dGVdO1xuICB9fSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRDb25zdHJ1Y3Qoc3RhY2s6IGNkay5TdGFjaywgaWQ6IHN0cmluZykge1xuICBjb25zdCBjaGlsZCA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKTtcbiAgaWYgKCFjaGlsZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29uc3RydWN0IHdpdGggSUQgJHtpZH0gbm90IGZvdW5kIChpdCBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGl0IGlzIHJlZmVyZW5jZWQpYCk7XG4gIH1cbiAgcmV0dXJuIGNoaWxkO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVmZXJlbmNlcyhzdGFjazogY2RrLlN0YWNrKSB7XG4gIGNvbnN0IGluY2x1ZGUgPSBzdGFjay5ub2RlLmZpbmRDaGlsZCgnSW5jbHVkZScpIGFzIGNkay5DZm5JbmNsdWRlO1xuICBpZiAoIWluY2x1ZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIHByb2Nlc3MoaW5jbHVkZS50ZW1wbGF0ZSBhcyBhbnkpO1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3ModmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEgJiYgT2JqZWN0LmtleXModmFsdWUpWzBdID09PSAnRm46OkdldEF0dCcpIHtcbiAgICAgIGNvbnN0IFsgaWQsIGF0dHJpYnV0ZSBdID0gdmFsdWVbJ0ZuOjpHZXRBdHQnXTtcbiAgICAgIHJldHVybiBkZWNvbnN0cnVjdEdldEF0dChzdGFjaywgaWQsIGF0dHJpYnV0ZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKHggPT4gcHJvY2Vzcyh4KSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IFsgaywgdiBdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZVtrXSA9IHByb2Nlc3Modik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZuUmVzb3VyY2VUeXBlKHJlc291cmNlVHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiByZXNvdXJjZVR5cGUuaW5jbHVkZXMoJzo6Jyk7XG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHsgfVxuXG5mdW5jdGlvbiBfY3dkPFQ+KHdvcmtEaXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2I6ICgpID0+IFQpOiBUIHtcbiAgaWYgKCF3b3JrRGlyKSB7IHJldHVybiBjYigpOyB9XG4gIGNvbnN0IHByZXZXZCA9IHByb2Nlc3MuY3dkKCk7XG4gIHRyeSB7XG4gICAgcHJvY2Vzcy5jaGRpcih3b3JrRGlyKTtcbiAgICByZXR1cm4gY2IoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHByZXZXZCk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/decdk/lib/index.d.ts b/packages/decdk/lib/index.d.ts deleted file mode 100644 index 433953438b16e..0000000000000 --- a/packages/decdk/lib/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './declarative-stack'; -export * from './jsii2schema'; -export * from './util'; diff --git a/packages/decdk/lib/index.js b/packages/decdk/lib/index.js deleted file mode 100644 index 8aa6d7ae76bcc..0000000000000 --- a/packages/decdk/lib/index.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./declarative-stack"), exports); -__exportStar(require("./jsii2schema"), exports); -__exportStar(require("./util"), exports); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsZ0RBQThCO0FBQzlCLHlDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGVjbGFyYXRpdmUtc3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9qc2lpMnNjaGVtYSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwnOyJdfQ== \ No newline at end of file diff --git a/packages/decdk/lib/jsii2schema.d.ts b/packages/decdk/lib/jsii2schema.d.ts deleted file mode 100644 index 0041ee37caa35..0000000000000 --- a/packages/decdk/lib/jsii2schema.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as jsiiReflect from 'jsii-reflect'; -export declare class SchemaContext { - static root(definitions?: { - [fqn: string]: any; - }): SchemaContext; - readonly definitions: { - [fqn: string]: any; - }; - readonly path: string; - readonly children: SchemaContext[]; - readonly name: string; - readonly root: boolean; - readonly warnings: string[]; - readonly errors: string[]; - private readonly definitionStack; - private constructor(); - child(type: string, name: string): SchemaContext; - get hasWarningsOrErrors(): boolean; - warning(format: any, ...args: any[]): void; - error(format: any, ...args: any[]): void; - findDefinition(ref: string): any; - define(fqn: string, schema: () => any): { - $ref: string; - } | undefined; -} -export declare function schemaForTypeReference(type: jsiiReflect.TypeReference, ctx: SchemaContext): any; -export declare function schemaForPolymorphic(type: jsiiReflect.Type | undefined, ctx: SchemaContext): { - $ref: string; -} | undefined; -export declare function schemaForInterface(type: jsiiReflect.Type | undefined, ctx: SchemaContext): { - $ref: string; -} | undefined; -export declare function isDataType(t: jsiiReflect.Type | undefined): t is jsiiReflect.InterfaceType; -export declare function isSerializableTypeReference(type: jsiiReflect.TypeReference, errorPrefix?: string): boolean; -export declare function isSerializableInterface(type: jsiiReflect.Type | undefined, errorPrefix?: string): type is jsiiReflect.InterfaceType; -export declare function isEnumLikeClass(cls: jsiiReflect.Type | undefined): cls is jsiiReflect.ClassType; -export declare function enumLikeClassMethods(cls: jsiiReflect.ClassType): jsiiReflect.Method[]; -export declare function enumLikeClassProperties(cls: jsiiReflect.ClassType): jsiiReflect.Property[]; -export declare function isConstruct(typeOrTypeRef: jsiiReflect.TypeReference | jsiiReflect.Type): boolean; diff --git a/packages/decdk/lib/jsii2schema.js b/packages/decdk/lib/jsii2schema.js deleted file mode 100644 index e067d5ab700f9..0000000000000 --- a/packages/decdk/lib/jsii2schema.js +++ /dev/null @@ -1,479 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isConstruct = exports.enumLikeClassProperties = exports.enumLikeClassMethods = exports.isEnumLikeClass = exports.isSerializableInterface = exports.isSerializableTypeReference = exports.isDataType = exports.schemaForInterface = exports.schemaForPolymorphic = exports.schemaForTypeReference = exports.SchemaContext = void 0; -const jsiiReflect = require("jsii-reflect"); -const util = require("util"); -/* eslint-disable no-console */ -class SchemaContext { - constructor(name, parent, definitions) { - this.children = new Array(); - this.warnings = new Array(); - this.errors = new Array(); - this.name = name || ''; - if (parent) { - this.root = false; - parent.children.push(this); - this.definitions = parent.definitions; - this.path = parent.path + '/' + this.name; - this.definitionStack = parent.definitionStack; - } - else { - this.root = true; - this.definitions = definitions || {}; - this.path = this.name || ''; - this.definitionStack = new Array(); - } - } - static root(definitions) { - return new SchemaContext(undefined, undefined, definitions); - } - child(type, name) { - return new SchemaContext(`[${type} "${name}"]`, this); - } - get hasWarningsOrErrors() { - return this.warnings.length > 0 || this.errors.length > 0 || this.children.some(child => child.hasWarningsOrErrors); - } - warning(format, ...args) { - this.warnings.push(util.format(format, ...args)); - } - error(format, ...args) { - this.errors.push(util.format(format, ...args)); - } - findDefinition(ref) { - const [, , id] = ref.split('/'); - return this.definitions[id]; - } - define(fqn, schema) { - const originalFqn = fqn; - fqn = fqn.replace('/', '.'); - if (!(fqn in this.definitions)) { - if (this.definitionStack.includes(fqn)) { - this.error(`cyclic definition of ${fqn}`); - return undefined; - } - this.definitionStack.push(fqn); - try { - const s = schema(); - if (!s) { - this.error('cannot schematize'); - return undefined; - } - s.comment = originalFqn; - this.definitions[fqn] = s; - } - finally { - this.definitionStack.pop(); - } - } - return { $ref: `#/definitions/${fqn}` }; - } -} -exports.SchemaContext = SchemaContext; -function schemaForTypeReference(type, ctx) { - const prim = schemaForPrimitive(type); - if (prim) { - return prim; - } - const arr = schemaForArray(type, ctx); - if (arr) { - return arr; - } - const map = schemaForMap(type, ctx); - if (map) { - return map; - } - const union = schemaForUnion(type, ctx); - if (union) { - return union; - } - const constructRef = schemaForConstructRef(type); - if (constructRef) { - return constructRef; - } - const iface = schemaForInterface(type.type, ctx); - if (iface) { - return iface; - } - const enm = schemaForEnum(type.type); - if (enm) { - return enm; - } - const enumLike = schemaForEnumLikeClass(type.type, ctx); - if (enumLike) { - return enumLike; - } - const cls = schemaForPolymorphic(type.type, ctx); - if (cls) { - return cls; - } - if (!ctx.hasWarningsOrErrors) { - ctx.error(`didn't match any schematizable shape`); - } - return undefined; -} -exports.schemaForTypeReference = schemaForTypeReference; -function schemaForPolymorphic(type, ctx) { - if (!type) { - return undefined; - } - ctx = ctx.child('polymorphic', type.fqn); - const anyOf = new Array(); - const parentctx = ctx; - for (const x of allImplementationsOfType(type)) { - ctx = parentctx.child('impl', x.fqn); - const enumLike = schemaForEnumLikeClass(x, ctx); - if (enumLike) { - anyOf.push(enumLike); - } - if (x.initializer) { - const methd = methodSchema(x.initializer, ctx); - if (methd) { - anyOf.push({ - type: 'object', - additionalProperties: false, - properties: { - [x.fqn]: methd - } - }); - } - } - } - if (anyOf.length === 0) { - return undefined; - } - return ctx.define(type.fqn, () => { - return { anyOf }; - }); -} -exports.schemaForPolymorphic = schemaForPolymorphic; -function schemaForEnum(type) { - if (!type || !(type instanceof jsiiReflect.EnumType)) { - return undefined; - } - return { - enum: type.members.map(m => m.name) - }; -} -function schemaForMap(type, ctx) { - ctx = ctx.child('map', type.toString()); - if (!type.mapOfType) { - return undefined; - } - const s = schemaForTypeReference(type.mapOfType, ctx); - if (!s) { - return undefined; - } - return { - type: 'object', - additionalProperties: s - }; -} -function schemaForArray(type, ctx) { - ctx = ctx.child('array', type.toString()); - if (!type.arrayOfType) { - return undefined; - } - const s = schemaForTypeReference(type.arrayOfType, ctx); - if (!s) { - return undefined; - } - return { - type: 'array', - items: schemaForTypeReference(type.arrayOfType, ctx) - }; -} -function schemaForPrimitive(type) { - if (!type.primitive) { - return undefined; - } - switch (type.primitive) { - case 'date': return { type: 'string', format: 'date-time' }; - case 'json': return { type: 'object' }; - case 'any': return {}; // this means "any" - default: return { type: type.primitive }; - } -} -function schemaForUnion(type, ctx) { - ctx = ctx.child('union', type.toString()); - if (!type.unionOfTypes) { - return undefined; - } - const anyOf = type.unionOfTypes - .map(x => schemaForTypeReference(x, ctx)) - .filter(x => x); // filter failed schemas - if (anyOf.length === 0) { - return undefined; - } - return { anyOf }; -} -function schemaForConstructRef(type) { - if (!isConstruct(type)) { - return undefined; - } - return { - type: 'object', - properties: { - Ref: { type: 'string' } - } - }; -} -function schemaForInterface(type, ctx) { - if (!type || !(type instanceof jsiiReflect.InterfaceType)) { - return undefined; // skip - } - if (type.allMethods.length > 0) { - return undefined; - } - ctx = ctx.child('interface', type.fqn); - const ifctx = ctx; - return ctx.define(type.fqn, () => { - const properties = {}; - const required = new Array(); - for (const prop of type.allProperties) { - ctx = ifctx.child(prop.optional ? 'optional' : 'required' + ' property', prop.name); - const schema = schemaForTypeReference(prop.type, ctx); - if (!schema) { - // if prop is not serializable but optional, we can still serialize - // but without this property. - if (prop.optional) { - ctx.warning(`optional proprety omitted because it cannot be schematized`); - continue; - } - // error - ctx.error('property cannot be schematized'); - return undefined; - } - properties[prop.name] = schema; - const docstring = prop.docs.toString(); - if (docstring) { - properties[prop.name].description = docstring; - } - if (!prop.optional) { - required.push(prop.name); - } - } - return { - type: 'object', - title: type.name, - additionalProperties: false, - properties, - required: required.length > 0 ? required : undefined, - }; - }); -} -exports.schemaForInterface = schemaForInterface; -function schemaForEnumLikeClass(type, ctx) { - if (type) { - ctx = ctx.child('enum-like', type.toString()); - } - if (!type || !(type instanceof jsiiReflect.ClassType)) { - return undefined; - } - const enumLikeProps = enumLikeClassProperties(type); - const enumLikeMethods = enumLikeClassMethods(type); - if (enumLikeProps.length === 0 && enumLikeMethods.length === 0) { - return undefined; - } - const anyOf = new Array(); - if (enumLikeProps.length > 0) { - anyOf.push({ enum: enumLikeProps.map(m => m.name) }); - } - for (const method of enumLikeMethods) { - const s = methodSchema(method, ctx); - if (!s) { - continue; - } - anyOf.push({ - type: 'object', - additionalProperties: false, - properties: { - [method.name]: methodSchema(method, ctx) - } - }); - } - if (anyOf.length === 0) { - return undefined; - } - return ctx.define(type.fqn, () => { - return { anyOf }; - }); -} -function methodSchema(method, ctx) { - ctx = ctx.child('method', method.name); - const fqn = `${method.parentType.fqn}.${method.name}`; - const methodctx = ctx; - return ctx.define(fqn, () => { - const properties = {}; - const required = new Array(); - const addProperty = (prop) => { - const param = schemaForTypeReference(prop.type, ctx); - // bail out - can't serialize a required parameter, so we can't serialize the method - if (!param && !prop.optional) { - ctx.error(`cannot schematize method because parameter cannot be schematized`); - return undefined; - } - properties[prop.name] = param; - if (!prop.optional) { - required.push(prop.name); - } - }; - for (let i = 0; i < method.parameters.length; ++i) { - const p = method.parameters[i]; - methodctx.child('param', p.name); - // if this is the last parameter and it's a data type, treat as keyword arguments - if (i === method.parameters.length - 1 && isDataType(p.type.type)) { - const kwargs = schemaForInterface(p.type.type, ctx); - if (kwargs) { - for (const prop of p.type.type.allProperties) { - addProperty(prop); - } - } - } - else { - addProperty(p); - } - } - return { - type: 'object', - properties, - additionalProperties: false, - required: required.length > 0 ? required : undefined - }; - }); -} -function isDataType(t) { - if (!t) { - return false; - } - return t instanceof jsiiReflect.InterfaceType && t.spec.datatype; -} -exports.isDataType = isDataType; -// Must only have properties, all of which are scalars, -// lists or isSerializableInterface types. -function isSerializableTypeReference(type, errorPrefix) { - if (type.primitive) { - return true; - } - if (type.arrayOfType) { - return isSerializableTypeReference(type.arrayOfType, errorPrefix); - } - if (type.mapOfType) { - return isSerializableTypeReference(type.mapOfType, errorPrefix); - } - if (type.type) { - return isSerializableType(type.type, errorPrefix); - } - if (type.unionOfTypes) { - return type.unionOfTypes.some(x => isSerializableTypeReference(x, errorPrefix)); - } - return false; -} -exports.isSerializableTypeReference = isSerializableTypeReference; -function isSerializableType(type, errorPrefix) { - // if this is a cosntruct class, we can represent it as a "Ref" - if (isConstruct(type)) { - return true; - } - if (isEnum(type)) { - return true; - } - if (isSerializableInterface(type)) { - return true; - } - // if this is a class that looks like an enum, we can represent it - if (isEnumLikeClass(type)) { - return true; - } - if (allImplementationsOfType(type).length > 0) { - return true; - } - if (errorPrefix) { - console.error(errorPrefix, `${type} is not serializable`); - } - return false; -} -function isSerializableInterface(type, errorPrefix) { - if (!type || !(type instanceof jsiiReflect.InterfaceType)) { - return false; - } - if (type.allMethods.length > 0) { - return false; - } - return type.allProperties.every(p => isSerializableTypeReference(p.type, errorPrefix) - || isConstruct(p.type) - || p.optional); -} -exports.isSerializableInterface = isSerializableInterface; -function isEnum(type) { - return type instanceof jsiiReflect.EnumType; -} -function isEnumLikeClass(cls) { - if (!cls) { - return false; - } - if (!(cls instanceof jsiiReflect.ClassType)) { - return false; - } - return enumLikeClassMethods(cls).length > 0 - || enumLikeClassProperties(cls).length > 0; -} -exports.isEnumLikeClass = isEnumLikeClass; -function enumLikeClassMethods(cls) { - return cls.allMethods.filter(m => m.static && m.returns && m.returns.type.type && m.returns.type.type.extends(cls)); -} -exports.enumLikeClassMethods = enumLikeClassMethods; -function enumLikeClassProperties(cls) { - return cls.allProperties.filter(p => p.static && p.type.type && p.type.type.extends(cls)); -} -exports.enumLikeClassProperties = enumLikeClassProperties; -function isConstruct(typeOrTypeRef) { - let type; - if (typeOrTypeRef instanceof jsiiReflect.Type) { - type = typeOrTypeRef; - } - else { - if (typeOrTypeRef.arrayOfType) { - return isConstruct(typeOrTypeRef.arrayOfType); - } - if (typeOrTypeRef.mapOfType) { - return isConstruct(typeOrTypeRef.mapOfType); - } - if (typeOrTypeRef.unionOfTypes) { - return typeOrTypeRef.unionOfTypes.some(x => isConstruct(x)); - } - if (typeOrTypeRef.type) { - type = typeOrTypeRef.type; - } - else { - return false; - } - } - // if it is an interface, it should extend constructs.IConstruct - if (type instanceof jsiiReflect.InterfaceType) { - const constructIface = type.system.findFqn('constructs.IConstruct'); - return type.extends(constructIface); - } - // if it is a class, it should extend constructs.Construct - if (type instanceof jsiiReflect.ClassType) { - const constructClass = type.system.findFqn('constructs.Construct'); - return type.extends(constructClass); - } - return false; -} -exports.isConstruct = isConstruct; -function allImplementationsOfType(type) { - if (type instanceof jsiiReflect.ClassType) { - return allSubclasses(type).filter(x => !x.abstract); - } - if (type instanceof jsiiReflect.InterfaceType) { - return allImplementations(type).filter(x => !x.abstract); - } - throw new Error(`Must either be a class or an interface`); -} -function allSubclasses(base) { - return base.system.classes.filter(x => x.extends(base)); -} -function allImplementations(base) { - return base.system.classes.filter(x => x.getInterfaces(true).some(i => i.extends(base))); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaTJzY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqc2lpMnNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBNEM7QUFDNUMsNkJBQTZCO0FBRTdCLCtCQUErQjtBQUUvQixNQUFhLGFBQWE7SUFleEIsWUFBb0IsSUFBYSxFQUFFLE1BQXNCLEVBQUUsV0FBb0M7UUFSL0UsYUFBUSxHQUFHLElBQUksS0FBSyxFQUFpQixDQUFDO1FBR3RDLGFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQy9CLFdBQU0sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBSzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQy9DO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsSUFBSSxFQUFHLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBNUJNLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBb0M7UUFDckQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxT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Q0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDMUQ7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQTJCO0lBQ2hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLElBQStCO0lBQ3pELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMganNpaVJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cblxuZXhwb3J0IGNsYXNzIFNjaGVtYUNvbnRleHQge1xuICBwdWJsaWMgc3RhdGljIHJvb3QoZGVmaW5pdGlvbnM/OiB7IFtmcW46IHN0cmluZ106IGFueSB9KTogU2NoZW1hQ29udGV4dCB7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFDb250ZXh0KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBkZWZpbml0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZGVmaW5pdGlvbnM6IHsgW2Zxbjogc3RyaW5nXTogYW55IH07XG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjaGlsZHJlbiA9IG5ldyBBcnJheTxTY2hlbWFDb250ZXh0PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdDogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZpbml0aW9uU3RhY2s6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobmFtZT86IHN0cmluZywgcGFyZW50PzogU2NoZW1hQ29udGV4dCwgZGVmaW5pdGlvbnM/OiB7IFtmcW46IHN0cmluZ106IGFueSB9KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZSB8fCAnJztcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB0aGlzLnJvb3QgPSBmYWxzZTtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHRoaXMpO1xuICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHBhcmVudC5kZWZpbml0aW9ucztcbiAgICAgIHRoaXMucGF0aCA9IHBhcmVudC5wYXRoICsgJy8nICsgdGhpcy5uYW1lO1xuICAgICAgdGhpcy5kZWZpbml0aW9uU3RhY2sgPSBwYXJlbnQuZGVmaW5pdGlvblN0YWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvb3QgPSB0cnVlO1xuICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zIHx8IHsgfTtcbiAgICAgIHRoaXMucGF0aCA9IHRoaXMubmFtZSB8fCAnJztcbiAgICAgIHRoaXMuZGVmaW5pdGlvblN0YWNrID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hpbGQodHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBTY2hlbWFDb250ZXh0IHtcbiAgICByZXR1cm4gbmV3IFNjaGVtYUNvbnRleHQoYFske3R5cGV9IFwiJHtuYW1lfVwiXWAsIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNXYXJuaW5nc09yRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndhcm5pbmdzLmxlbmd0aCA+IDAgfHwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMCB8fCB0aGlzLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaGFzV2FybmluZ3NPckVycm9ycyk7XG4gIH1cblxuICBwdWJsaWMgd2FybmluZyhmb3JtYXQ6IGFueSwgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLndhcm5pbmdzLnB1c2godXRpbC5mb3JtYXQoZm9ybWF0LCAuLi5hcmdzKSk7XG4gIH1cblxuICBwdWJsaWMgZXJyb3IoZm9ybWF0OiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5lcnJvcnMucHVzaCh1dGlsLmZvcm1hdChmb3JtYXQsIC4uLmFyZ3MpKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRGVmaW5pdGlvbihyZWY6IHN0cmluZykge1xuICAgIGNvbnN0IFsgLCAsIGlkIF0gPSByZWYuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uc1tpZF07XG4gIH1cblxuICBwdWJsaWMgZGVmaW5lKGZxbjogc3RyaW5nLCBzY2hlbWE6ICgpID0+IGFueSkge1xuICAgIGNvbnN0IG9yaWdpbmFsRnFuID0gZnFuO1xuICAgIGZxbiA9IGZxbi5yZXBsYWNlKCcvJywgJy4nKTtcblxuICAgIGlmICghKGZxbiBpbiB0aGlzLmRlZmluaXRpb25zKSkge1xuICAgICAgaWYgKHRoaXMuZGVmaW5pdGlvblN0YWNrLmluY2x1ZGVzKGZxbikpIHtcbiAgICAgICAgdGhpcy5lcnJvcihgY3ljbGljIGRlZmluaXRpb24gb2YgJHtmcW59YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvblN0YWNrLnB1c2goZnFuKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IHNjaGVtYSgpO1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKCdjYW5ub3Qgc2NoZW1hdGl6ZScpO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzLmNvbW1lbnQgPSBvcmlnaW5hbEZxbjtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zW2Zxbl0gPSBzO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmcW59YCB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFGb3JUeXBlUmVmZXJlbmNlKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGVSZWZlcmVuY2UsIGN0eDogU2NoZW1hQ29udGV4dCk6IGFueSB7XG5cbiAgY29uc3QgcHJpbSA9IHNjaGVtYUZvclByaW1pdGl2ZSh0eXBlKTtcbiAgaWYgKHByaW0pIHtcbiAgICByZXR1cm4gcHJpbTtcbiAgfVxuXG4gIGNvbnN0IGFyciA9IHNjaGVtYUZvckFycmF5KHR5cGUsIGN0eCk7XG4gIGlmIChhcnIpIHtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgY29uc3QgbWFwID0gc2NoZW1hRm9yTWFwKHR5cGUsIGN0eCk7XG4gIGlmIChtYXApIHtcbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgY29uc3QgdW5pb24gPSBzY2hlbWFGb3JVbmlvbih0eXBlLCBjdHgpO1xuICBpZiAodW5pb24pIHtcbiAgICByZXR1cm4gdW5pb247XG4gIH1cblxuICBjb25zdCBjb25zdHJ1Y3RSZWYgPSBzY2hlbWFGb3JDb25zdHJ1Y3RSZWYodHlwZSk7XG4gIGlmIChjb25zdHJ1Y3RSZWYpIHtcbiAgICByZXR1cm4gY29uc3RydWN0UmVmO1xuICB9XG5cbiAgY29uc3QgaWZhY2UgPSBzY2hlbWFGb3JJbnRlcmZhY2UodHlwZS50eXBlLCBjdHgpO1xuICBpZiAoaWZhY2UpIHtcbiAgICByZXR1cm4gaWZhY2U7XG4gIH1cblxuICBjb25zdCBlbm0gPSBzY2hlbWFGb3JFbnVtKHR5cGUudHlwZSk7XG4gIGlmIChlbm0pIHtcbiAgICByZXR1cm4gZW5tO1xuICB9XG5cbiAgY29uc3QgZW51bUxpa2UgPSBzY2hlbWFGb3JFbnVtTGlrZUNsYXNzKHR5cGUudHlwZSwgY3R4KTtcbiAgaWYgKGVudW1MaWtlKSB7XG4gICAgcmV0dXJuIGVudW1MaWtlO1xuICB9XG5cbiAgY29uc3QgY2xzID0gc2NoZW1hRm9yUG9seW1vcnBoaWModHlwZS50eXBlLCBjdHgpO1xuICBpZiAoY2xzKSB7XG4gICAgcmV0dXJuIGNscztcbiAgfVxuXG4gIGlmICghY3R4Lmhhc1dhcm5pbmdzT3JFcnJvcnMpIHtcbiAgICBjdHguZXJyb3IoYGRpZG4ndCBtYXRjaCBhbnkgc2NoZW1hdGl6YWJsZSBzaGFwZWApO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZvclBvbHltb3JwaGljKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGUgfCB1bmRlZmluZWQsIGN0eDogU2NoZW1hQ29udGV4dCkge1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY3R4ID0gY3R4LmNoaWxkKCdwb2x5bW9ycGhpYycsIHR5cGUuZnFuKTtcblxuICBjb25zdCBhbnlPZiA9IG5ldyBBcnJheTxhbnk+KCk7XG5cbiAgY29uc3QgcGFyZW50Y3R4ID0gY3R4O1xuXG4gIGZvciAoY29uc3QgeCBvZiBhbGxJbXBsZW1lbnRhdGlvbnNPZlR5cGUodHlwZSkpIHtcblxuICAgIGN0eCA9IHBhcmVudGN0eC5jaGlsZCgnaW1wbCcsIHguZnFuKTtcblxuICAgIGNvbnN0IGVudW1MaWtlID0gc2NoZW1hRm9yRW51bUxpa2VDbGFzcyh4LCBjdHgpO1xuICAgIGlmIChlbnVtTGlrZSkge1xuICAgICAgYW55T2YucHVzaChlbnVtTGlrZSk7XG4gICAgfVxuXG4gICAgaWYgKHguaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGNvbnN0IG1ldGhkID0gbWV0aG9kU2NoZW1hKHguaW5pdGlhbGl6ZXIsIGN0eCk7XG4gICAgICBpZiAobWV0aGQpIHtcbiAgICAgICAgYW55T2YucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFt4LmZxbl06IG1ldGhkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBjdHguZGVmaW5lKHR5cGUuZnFuLCAoKSA9PiB7XG4gICAgcmV0dXJuIHsgYW55T2YgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjaGVtYUZvckVudW0odHlwZToganNpaVJlZmxlY3QuVHlwZSB8IHVuZGVmaW5lZCkge1xuICBpZiAoIXR5cGUgfHwgISh0eXBlIGluc3RhbmNlb2YganNpaVJlZmxlY3QuRW51bVR5cGUpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW51bTogdHlwZS5tZW1iZXJzLm1hcChtID0+IG0ubmFtZSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2NoZW1hRm9yTWFwKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGVSZWZlcmVuY2UsIGN0eDogU2NoZW1hQ29udGV4dCkge1xuICBjdHggPSBjdHguY2hpbGQoJ21hcCcsIHR5cGUudG9TdHJpbmcoKSk7XG5cbiAgaWYgKCF0eXBlLm1hcE9mVHlwZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzID0gc2NoZW1hRm9yVHlwZVJlZmVyZW5jZSh0eXBlLm1hcE9mVHlwZSwgY3R4KTtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHNcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2NoZW1hRm9yQXJyYXkodHlwZToganNpaVJlZmxlY3QuVHlwZVJlZmVyZW5jZSwgY3R4OiBTY2hlbWFDb250ZXh0KSB7XG4gIGN0eCA9IGN0eC5jaGlsZCgnYXJyYXknLCB0eXBlLnRvU3RyaW5nKCkpO1xuXG4gIGlmICghdHlwZS5hcnJheU9mVHlwZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzID0gc2NoZW1hRm9yVHlwZVJlZmVyZW5jZSh0eXBlLmFycmF5T2ZUeXBlLCBjdHgpO1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIGl0ZW1zOiBzY2hlbWFGb3JUeXBlUmVmZXJlbmNlKHR5cGUuYXJyYXlPZlR5cGUsIGN0eClcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2NoZW1hRm9yUHJpbWl0aXZlKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGVSZWZlcmVuY2UpOiBhbnkge1xuICBpZiAoIXR5cGUucHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZS5wcmltaXRpdmUpIHtcbiAgICBjYXNlICdkYXRlJzogcmV0dXJuIHsgdHlwZTogJ3N0cmluZycsIGZvcm1hdDogJ2RhdGUtdGltZScgfTtcbiAgICBjYXNlICdqc29uJzogcmV0dXJuIHsgdHlwZTogJ29iamVjdCcgfTtcbiAgICBjYXNlICdhbnknOiByZXR1cm4geyB9OyAvLyB0aGlzIG1lYW5zIFwiYW55XCJcbiAgICBkZWZhdWx0OiByZXR1cm4geyB0eXBlOiB0eXBlLnByaW1pdGl2ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVtYUZvclVuaW9uKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGVSZWZlcmVuY2UsIGN0eDogU2NoZW1hQ29udGV4dCk6IGFueSB7XG4gIGN0eCA9IGN0eC5jaGlsZCgndW5pb24nLCB0eXBlLnRvU3RyaW5nKCkpO1xuXG4gIGlmICghdHlwZS51bmlvbk9mVHlwZXMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgYW55T2YgPSB0eXBlLnVuaW9uT2ZUeXBlc1xuICAgIC5tYXAoeCA9PiBzY2hlbWFGb3JUeXBlUmVmZXJlbmNlKHgsIGN0eCkpXG4gICAgLmZpbHRlcih4ID0+IHgpOyAvLyBmaWx0ZXIgZmFpbGVkIHNjaGVtYXNcblxuICBpZiAoYW55T2YubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGFueU9mIH07XG59XG5cbmZ1bmN0aW9uIHNjaGVtYUZvckNvbnN0cnVjdFJlZih0eXBlOiBqc2lpUmVmbGVjdC5UeXBlUmVmZXJlbmNlKSB7XG4gIGlmICghaXNDb25zdHJ1Y3QodHlwZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBSZWY6IHsgdHlwZTogJ3N0cmluZycgfVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVtYUZvckludGVyZmFjZSh0eXBlOiBqc2lpUmVmbGVjdC5UeXBlIHwgdW5kZWZpbmVkLCBjdHg6IFNjaGVtYUNvbnRleHQpIHtcbiAgaWYgKCF0eXBlIHx8ICEodHlwZSBpbnN0YW5jZW9mIGpzaWlSZWZsZWN0LkludGVyZmFjZVR5cGUpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuICB9XG5cbiAgaWYgKHR5cGUuYWxsTWV0aG9kcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGN0eCA9IGN0eC5jaGlsZCgnaW50ZXJmYWNlJywgdHlwZS5mcW4pO1xuXG4gIGNvbnN0IGlmY3R4ID0gY3R4O1xuXG4gIHJldHVybiBjdHguZGVmaW5lKHR5cGUuZnFuLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0ge307XG4gICAgY29uc3QgcmVxdWlyZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHR5cGUuYWxsUHJvcGVydGllcykge1xuXG4gICAgICBjdHggPSBpZmN0eC5jaGlsZChwcm9wLm9wdGlvbmFsID8gJ29wdGlvbmFsJyA6ICdyZXF1aXJlZCcgKyAnIHByb3BlcnR5JywgcHJvcC5uYW1lKTtcblxuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hRm9yVHlwZVJlZmVyZW5jZShwcm9wLnR5cGUsIGN0eCk7XG4gICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICAvLyBpZiBwcm9wIGlzIG5vdCBzZXJpYWxpemFibGUgYnV0IG9wdGlvbmFsLCB3ZSBjYW4gc3RpbGwgc2VyaWFsaXplXG4gICAgICAgIC8vIGJ1dCB3aXRob3V0IHRoaXMgcHJvcGVydHkuXG4gICAgICAgIGlmIChwcm9wLm9wdGlvbmFsKSB7XG4gICAgICAgICAgY3R4Lndhcm5pbmcoYG9wdGlvbmFsIHByb3ByZXR5IG9taXR0ZWQgYmVjYXVzZSBpdCBjYW5ub3QgYmUgc2NoZW1hdGl6ZWRgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVycm9yXG4gICAgICAgIGN0eC5lcnJvcigncHJvcGVydHkgY2Fubm90IGJlIHNjaGVtYXRpemVkJyk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXNbcHJvcC5uYW1lXSA9IHNjaGVtYTtcblxuICAgICAgY29uc3QgZG9jc3RyaW5nID0gcHJvcC5kb2NzLnRvU3RyaW5nKCk7XG4gICAgICBpZiAoZG9jc3RyaW5nKSB7XG4gICAgICAgIHByb3BlcnRpZXNbcHJvcC5uYW1lXS5kZXNjcmlwdGlvbiA9IGRvY3N0cmluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wLm9wdGlvbmFsKSB7XG4gICAgICAgIHJlcXVpcmVkLnB1c2gocHJvcC5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICB0aXRsZTogdHlwZS5uYW1lLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZC5sZW5ndGggPiAwID8gcmVxdWlyZWQgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjaGVtYUZvckVudW1MaWtlQ2xhc3ModHlwZToganNpaVJlZmxlY3QuVHlwZSB8IHVuZGVmaW5lZCwgY3R4OiBTY2hlbWFDb250ZXh0KSB7XG4gIGlmICh0eXBlKSB7XG4gICAgY3R4ID0gY3R4LmNoaWxkKCdlbnVtLWxpa2UnLCB0eXBlLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYgKCF0eXBlIHx8ICEodHlwZSBpbnN0YW5jZW9mIGpzaWlSZWZsZWN0LkNsYXNzVHlwZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZW51bUxpa2VQcm9wcyA9IGVudW1MaWtlQ2xhc3NQcm9wZXJ0aWVzKHR5cGUpO1xuICBjb25zdCBlbnVtTGlrZU1ldGhvZHMgPSBlbnVtTGlrZUNsYXNzTWV0aG9kcyh0eXBlKTtcblxuICBpZiAoZW51bUxpa2VQcm9wcy5sZW5ndGggPT09IDAgJiYgZW51bUxpa2VNZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBhbnlPZiA9IG5ldyBBcnJheTxhbnk+KCk7XG5cbiAgaWYgKGVudW1MaWtlUHJvcHMubGVuZ3RoID4gMCkge1xuICAgIGFueU9mLnB1c2goeyBlbnVtOiBlbnVtTGlrZVByb3BzLm1hcChtID0+IG0ubmFtZSkgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBlbnVtTGlrZU1ldGhvZHMpIHtcbiAgICBjb25zdCBzID0gbWV0aG9kU2NoZW1hKG1ldGhvZCwgY3R4KTtcbiAgICBpZiAoIXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGFueU9mLnB1c2goe1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFttZXRob2QubmFtZV06IG1ldGhvZFNjaGVtYShtZXRob2QsIGN0eClcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChhbnlPZi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGN0eC5kZWZpbmUodHlwZS5mcW4sICgpID0+IHtcbiAgICByZXR1cm4geyBhbnlPZiB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWV0aG9kU2NoZW1hKG1ldGhvZDoganNpaVJlZmxlY3QuQ2FsbGFibGUsIGN0eDogU2NoZW1hQ29udGV4dCkge1xuICBjdHggPSBjdHguY2hpbGQoJ21ldGhvZCcsIG1ldGhvZC5uYW1lKTtcblxuICBjb25zdCBmcW4gPSBgJHttZXRob2QucGFyZW50VHlwZS5mcW59LiR7bWV0aG9kLm5hbWV9YDtcblxuICBjb25zdCBtZXRob2RjdHggPSBjdHg7XG5cbiAgcmV0dXJuIGN0eC5kZWZpbmUoZnFuLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0geyB9O1xuICAgIGNvbnN0IHJlcXVpcmVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IGFkZFByb3BlcnR5ID0gKHByb3A6IGpzaWlSZWZsZWN0LlByb3BlcnR5IHwganNpaVJlZmxlY3QuUGFyYW1ldGVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBwYXJhbSA9IHNjaGVtYUZvclR5cGVSZWZlcmVuY2UocHJvcC50eXBlLCBjdHgpO1xuXG4gICAgICAvLyBiYWlsIG91dCAtIGNhbid0IHNlcmlhbGl6ZSBhIHJlcXVpcmVkIHBhcmFtZXRlciwgc28gd2UgY2FuJ3Qgc2VyaWFsaXplIHRoZSBtZXRob2RcbiAgICAgIGlmICghcGFyYW0gJiYgIXByb3Aub3B0aW9uYWwpIHtcbiAgICAgICAgY3R4LmVycm9yKGBjYW5ub3Qgc2NoZW1hdGl6ZSBtZXRob2QgYmVjYXVzZSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNjaGVtYXRpemVkYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXNbcHJvcC5uYW1lXSA9IHBhcmFtO1xuXG4gICAgICBpZiAoIXByb3Aub3B0aW9uYWwpIHtcbiAgICAgICAgcmVxdWlyZWQucHVzaChwcm9wLm5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGhvZC5wYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwID0gbWV0aG9kLnBhcmFtZXRlcnNbaV07XG4gICAgICBtZXRob2RjdHguY2hpbGQoJ3BhcmFtJywgcC5uYW1lKTtcblxuICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgbGFzdCBwYXJhbWV0ZXIgYW5kIGl0J3MgYSBkYXRhIHR5cGUsIHRyZWF0IGFzIGtleXdvcmQgYXJndW1lbnRzXG4gICAgICBpZiAoaSA9PT0gbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoIC0gMSAmJiBpc0RhdGFUeXBlKHAudHlwZS50eXBlKSkge1xuICAgICAgICBjb25zdCBrd2FyZ3MgPSBzY2hlbWFGb3JJbnRlcmZhY2UocC50eXBlLnR5cGUsIGN0eCk7XG4gICAgICAgIGlmIChrd2FyZ3MpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcC50eXBlLnR5cGUuYWxsUHJvcGVydGllcykge1xuICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRQcm9wZXJ0eShwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkLmxlbmd0aCA+IDAgPyByZXF1aXJlZCA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVHlwZSh0OiBqc2lpUmVmbGVjdC5UeXBlIHwgdW5kZWZpbmVkKTogdCBpcyBqc2lpUmVmbGVjdC5JbnRlcmZhY2VUeXBlIHtcbiAgaWYgKCF0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0IGluc3RhbmNlb2YganNpaVJlZmxlY3QuSW50ZXJmYWNlVHlwZSAmJiAodCBhcyBhbnkpLnNwZWMuZGF0YXR5cGU7XG59XG5cbi8vIE11c3Qgb25seSBoYXZlIHByb3BlcnRpZXMsIGFsbCBvZiB3aGljaCBhcmUgc2NhbGFycyxcbi8vIGxpc3RzIG9yIGlzU2VyaWFsaXphYmxlSW50ZXJmYWNlIHR5cGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VyaWFsaXphYmxlVHlwZVJlZmVyZW5jZSh0eXBlOiBqc2lpUmVmbGVjdC5UeXBlUmVmZXJlbmNlLCBlcnJvclByZWZpeD86IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gIGlmICh0eXBlLnByaW1pdGl2ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGUuYXJyYXlPZlR5cGUpIHtcbiAgICByZXR1cm4gaXNTZXJpYWxpemFibGVUeXBlUmVmZXJlbmNlKHR5cGUuYXJyYXlPZlR5cGUsIGVycm9yUHJlZml4KTtcbiAgfVxuXG4gIGlmICh0eXBlLm1hcE9mVHlwZSkge1xuICAgIHJldHVybiBpc1NlcmlhbGl6YWJsZVR5cGVSZWZlcmVuY2UodHlwZS5tYXBPZlR5cGUsIGVycm9yUHJlZml4KTtcbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUpIHtcbiAgICByZXR1cm4gaXNTZXJpYWxpemFibGVUeXBlKHR5cGUudHlwZSwgZXJyb3JQcmVmaXgpO1xuICB9XG5cbiAgaWYgKHR5cGUudW5pb25PZlR5cGVzKSB7XG4gICAgcmV0dXJuIHR5cGUudW5pb25PZlR5cGVzLnNvbWUoeCA9PiBpc1NlcmlhbGl6YWJsZVR5cGVSZWZlcmVuY2UoeCwgZXJyb3JQcmVmaXgpKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemFibGVUeXBlKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGUsIGVycm9yUHJlZml4Pzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIGlmIHRoaXMgaXMgYSBjb3NudHJ1Y3QgY2xhc3MsIHdlIGNhbiByZXByZXNlbnQgaXQgYXMgYSBcIlJlZlwiXG4gIGlmIChpc0NvbnN0cnVjdCh0eXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzRW51bSh0eXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzU2VyaWFsaXphYmxlSW50ZXJmYWNlKHR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgY2xhc3MgdGhhdCBsb29rcyBsaWtlIGFuIGVudW0sIHdlIGNhbiByZXByZXNlbnQgaXRcbiAgaWYgKGlzRW51bUxpa2VDbGFzcyh0eXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGFsbEltcGxlbWVudGF0aW9uc09mVHlwZSh0eXBlKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3JQcmVmaXgpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yUHJlZml4LCBgJHt0eXBlfSBpcyBub3Qgc2VyaWFsaXphYmxlYCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcmlhbGl6YWJsZUludGVyZmFjZSh0eXBlOiBqc2lpUmVmbGVjdC5UeXBlIHwgdW5kZWZpbmVkLCBlcnJvclByZWZpeD86IHN0cmluZyk6IHR5cGUgaXMganNpaVJlZmxlY3QuSW50ZXJmYWNlVHlwZSB7XG4gIGlmICghdHlwZSB8fCAhKHR5cGUgaW5zdGFuY2VvZiBqc2lpUmVmbGVjdC5JbnRlcmZhY2VUeXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlLmFsbE1ldGhvZHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlLmFsbFByb3BlcnRpZXMuZXZlcnkocCA9PlxuICAgICAgaXNTZXJpYWxpemFibGVUeXBlUmVmZXJlbmNlKHAudHlwZSwgZXJyb3JQcmVmaXgpXG4gICAgICB8fCBpc0NvbnN0cnVjdChwLnR5cGUpXG4gICAgICB8fCBwLm9wdGlvbmFsKTtcbn1cblxuZnVuY3Rpb24gaXNFbnVtKHR5cGU6IGpzaWlSZWZsZWN0LlR5cGUpOiB0eXBlIGlzIGpzaWlSZWZsZWN0LkVudW1UeXBlIHtcbiAgcmV0dXJuIHR5cGUgaW5zdGFuY2VvZiBqc2lpUmVmbGVjdC5FbnVtVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW51bUxpa2VDbGFzcyhjbHM6IGpzaWlSZWZsZWN0LlR5cGUgfCB1bmRlZmluZWQpOiBjbHMgaXMganNpaVJlZmxlY3QuQ2xhc3NUeXBlIHtcbiAgaWYgKCFjbHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIShjbHMgaW5zdGFuY2VvZiBqc2lpUmVmbGVjdC5DbGFzc1R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlbnVtTGlrZUNsYXNzTWV0aG9kcyhjbHMpLmxlbmd0aCA+IDBcbiAgICB8fCBlbnVtTGlrZUNsYXNzUHJvcGVydGllcyhjbHMpLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnVtTGlrZUNsYXNzTWV0aG9kcyhjbHM6IGpzaWlSZWZsZWN0LkNsYXNzVHlwZSkge1xuICByZXR1cm4gY2xzLmFsbE1ldGhvZHMuZmlsdGVyKG0gPT4gbS5zdGF0aWMgJiYgbS5yZXR1cm5zICYmIG0ucmV0dXJucy50eXBlLnR5cGUgJiYgbS5yZXR1cm5zLnR5cGUudHlwZS5leHRlbmRzKGNscykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW51bUxpa2VDbGFzc1Byb3BlcnRpZXMoY2xzOiBqc2lpUmVmbGVjdC5DbGFzc1R5cGUpIHtcbiAgcmV0dXJuIGNscy5hbGxQcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAuc3RhdGljICYmIHAudHlwZS50eXBlICYmIHAudHlwZS50eXBlLmV4dGVuZHMoY2xzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0cnVjdCh0eXBlT3JUeXBlUmVmOiBqc2lpUmVmbGVjdC5UeXBlUmVmZXJlbmNlIHwganNpaVJlZmxlY3QuVHlwZSk6IGJvb2xlYW4ge1xuICBsZXQgdHlwZToganNpaVJlZmxlY3QuVHlwZTtcblxuICBpZiAodHlwZU9yVHlwZVJlZiBpbnN0YW5jZW9mIGpzaWlSZWZsZWN0LlR5cGUpIHtcbiAgICB0eXBlID0gdHlwZU9yVHlwZVJlZjtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZU9yVHlwZVJlZi5hcnJheU9mVHlwZSkge1xuICAgICAgcmV0dXJuIGlzQ29uc3RydWN0KHR5cGVPclR5cGVSZWYuYXJyYXlPZlR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlT3JUeXBlUmVmLm1hcE9mVHlwZSkge1xuICAgICAgcmV0dXJuIGlzQ29uc3RydWN0KHR5cGVPclR5cGVSZWYubWFwT2ZUeXBlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZU9yVHlwZVJlZi51bmlvbk9mVHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlT3JUeXBlUmVmLnVuaW9uT2ZUeXBlcy5zb21lKHggPT4gaXNDb25zdHJ1Y3QoeCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlT3JUeXBlUmVmLnR5cGUpIHtcbiAgICAgIHR5cGUgPSB0eXBlT3JUeXBlUmVmLnR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiBpdCBpcyBhbiBpbnRlcmZhY2UsIGl0IHNob3VsZCBleHRlbmQgY29uc3RydWN0cy5JQ29uc3RydWN0XG4gIGlmICh0eXBlIGluc3RhbmNlb2YganNpaVJlZmxlY3QuSW50ZXJmYWNlVHlwZSkge1xuICAgIGNvbnN0IGNvbnN0cnVjdElmYWNlID0gdHlwZS5zeXN0ZW0uZmluZEZxbignY29uc3RydWN0cy5JQ29uc3RydWN0Jyk7XG4gICAgcmV0dXJuIHR5cGUuZXh0ZW5kcyhjb25zdHJ1Y3RJZmFjZSk7XG4gIH1cblxuICAvLyBpZiBpdCBpcyBhIGNsYXNzLCBpdCBzaG91bGQgZXh0ZW5kIGNvbnN0cnVjdHMuQ29uc3RydWN0XG4gIGlmICh0eXBlIGluc3RhbmNlb2YganNpaVJlZmxlY3QuQ2xhc3NUeXBlKSB7XG4gICAgY29uc3QgY29uc3RydWN0Q2xhc3MgPSB0eXBlLnN5c3RlbS5maW5kRnFuKCdjb25zdHJ1Y3RzLkNvbnN0cnVjdCcpO1xuICAgIHJldHVybiB0eXBlLmV4dGVuZHMoY29uc3RydWN0Q2xhc3MpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhbGxJbXBsZW1lbnRhdGlvbnNPZlR5cGUodHlwZToganNpaVJlZmxlY3QuVHlwZSkge1xuICBpZiAodHlwZSBpbnN0YW5jZW9mIGpzaWlSZWZsZWN0LkNsYXNzVHlwZSkge1xuICAgIHJldHVybiBhbGxTdWJjbGFzc2VzKHR5cGUpLmZpbHRlcih4ID0+ICF4LmFic3RyYWN0KTtcbiAgfVxuXG4gIGlmICh0eXBlIGluc3RhbmNlb2YganNpaVJlZmxlY3QuSW50ZXJmYWNlVHlwZSkge1xuICAgIHJldHVybiBhbGxJbXBsZW1lbnRhdGlvbnModHlwZSkuZmlsdGVyKHggPT4gIXguYWJzdHJhY3QpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBNdXN0IGVpdGhlciBiZSBhIGNsYXNzIG9yIGFuIGludGVyZmFjZWApO1xufVxuXG5mdW5jdGlvbiBhbGxTdWJjbGFzc2VzKGJhc2U6IGpzaWlSZWZsZWN0LkNsYXNzVHlwZSkge1xuICByZXR1cm4gYmFzZS5zeXN0ZW0uY2xhc3Nlcy5maWx0ZXIoeCA9PiB4LmV4dGVuZHMoYmFzZSkpO1xufVxuXG5mdW5jdGlvbiBhbGxJbXBsZW1lbnRhdGlvbnMoYmFzZToganNpaVJlZmxlY3QuSW50ZXJmYWNlVHlwZSkge1xuICByZXR1cm4gYmFzZS5zeXN0ZW0uY2xhc3Nlcy5maWx0ZXIoeCA9PiB4LmdldEludGVyZmFjZXModHJ1ZSkuc29tZShpID0+IGkuZXh0ZW5kcyhiYXNlKSkpO1xufVxuIl19 \ No newline at end of file diff --git a/packages/decdk/lib/util.d.ts b/packages/decdk/lib/util.d.ts deleted file mode 100644 index 8484e2c542931..0000000000000 --- a/packages/decdk/lib/util.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as jsiiReflect from 'jsii-reflect'; -/** - * Reads a YAML/JSON template file. - */ -export declare function readTemplate(templateFile: string): Promise; -export declare function loadTypeSystem(validate?: boolean): Promise; -export declare function stackNameFromFileName(fileName: string): string; diff --git a/packages/decdk/lib/util.js b/packages/decdk/lib/util.js deleted file mode 100644 index c1fd33d5f6352..0000000000000 --- a/packages/decdk/lib/util.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.stackNameFromFileName = exports.loadTypeSystem = exports.readTemplate = void 0; -const fs = require("fs-extra"); -const jsiiReflect = require("jsii-reflect"); -const path = require("path"); -const YAML = require("yaml"); -/** - * Reads a YAML/JSON template file. - */ -async function readTemplate(templateFile) { - const str = await fs.readFile(templateFile, { encoding: 'utf-8' }); - const template = YAML.parse(str, { schema: 'yaml-1.1' }); - return template; -} -exports.readTemplate = readTemplate; -async function loadTypeSystem(validate = true) { - const typeSystem = new jsiiReflect.TypeSystem(); - await typeSystem.loadNpmDependencies(path.resolve(__dirname, '..'), { validate }); - return typeSystem; -} -exports.loadTypeSystem = loadTypeSystem; -function stackNameFromFileName(fileName) { - return path.parse(fileName).name.replace('.', '-'); -} -exports.stackNameFromFileName = stackNameFromFileName; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDRDQUE0QztBQUM1Qyw2QkFBNkI7QUFDN0IsNkJBQTZCO0FBRTdCOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxZQUFvQjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN6RCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBSkQsb0NBSUM7QUFFTSxLQUFLLFVBQVUsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2hELE1BQU0sVUFBVSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRixPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBSkQsd0NBSUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUZELHNEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMganNpaVJlZmxlY3QgZnJvbSAnanNpaS1yZWZsZWN0JztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBZQU1MIGZyb20gJ3lhbWwnO1xuXG4vKipcbiAqIFJlYWRzIGEgWUFNTC9KU09OIHRlbXBsYXRlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkVGVtcGxhdGUodGVtcGxhdGVGaWxlOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RyID0gYXdhaXQgZnMucmVhZEZpbGUodGVtcGxhdGVGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICBjb25zdCB0ZW1wbGF0ZSA9IFlBTUwucGFyc2Uoc3RyLCB7IHNjaGVtYTogJ3lhbWwtMS4xJyB9KTtcbiAgcmV0dXJuIHRlbXBsYXRlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFR5cGVTeXN0ZW0odmFsaWRhdGUgPSB0cnVlKSB7XG4gIGNvbnN0IHR5cGVTeXN0ZW0gPSBuZXcganNpaVJlZmxlY3QuVHlwZVN5c3RlbSgpO1xuICBhd2FpdCB0eXBlU3lzdGVtLmxvYWROcG1EZXBlbmRlbmNpZXMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJyksIHsgdmFsaWRhdGUgfSk7XG4gIHJldHVybiB0eXBlU3lzdGVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhY2tOYW1lRnJvbUZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGgucGFyc2UoZmlsZU5hbWUpLm5hbWUucmVwbGFjZSgnLicsICctJyk7XG59XG4iXX0= \ No newline at end of file diff --git a/packages/decdk/test/fixture/index.d.ts b/packages/decdk/test/fixture/index.d.ts deleted file mode 100644 index 570a4a324f0fd..0000000000000 --- a/packages/decdk/test/fixture/index.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Tests how an array with a bunch of primitives is represented in JSON schema. - */ -export interface InterfaceWithPrimitives { - /** - * A property of type number. - */ - readonly numberProperty: number; - /** - * A property of type string. - */ - readonly stringProperty: string; - /** - * Array of strings. - */ - readonly arrayOfStrings: string[]; - /** - * Optional boolean - */ - readonly optionalBoolean?: boolean; - readonly mapOfNumbers: { - [key: string]: number; - }; -} -export declare enum MyNormalEnum { - ENUM_MEMBER_1 = 0, - ENUM_MEMBER_2 = 1, - ENUM_MEMBER_3 = 2 -} diff --git a/packages/decdk/test/fixture/index.js b/packages/decdk/test/fixture/index.js deleted file mode 100644 index 135dab999f808..0000000000000 --- a/packages/decdk/test/fixture/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MyNormalEnum = void 0; -var MyNormalEnum; -(function (MyNormalEnum) { - MyNormalEnum[MyNormalEnum["ENUM_MEMBER_1"] = 0] = "ENUM_MEMBER_1"; - MyNormalEnum[MyNormalEnum["ENUM_MEMBER_2"] = 1] = "ENUM_MEMBER_2"; - MyNormalEnum[MyNormalEnum["ENUM_MEMBER_3"] = 2] = "ENUM_MEMBER_3"; -})(MyNormalEnum = exports.MyNormalEnum || (exports.MyNormalEnum = {})); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4QkEsSUFBWSxZQUlYO0FBSkQsV0FBWSxZQUFZO0lBQ3RCLGlFQUFhLENBQUE7SUFDYixpRUFBYSxDQUFBO0lBQ2IsaUVBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUl2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgaG93IGFuIGFycmF5IHdpdGggYSBidW5jaCBvZiBwcmltaXRpdmVzIGlzIHJlcHJlc2VudGVkIGluIEpTT04gc2NoZW1hLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZVdpdGhQcmltaXRpdmVzIHtcbiAgLyoqXG4gICAqIEEgcHJvcGVydHkgb2YgdHlwZSBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSBudW1iZXJQcm9wZXJ0eTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHByb3BlcnR5IG9mIHR5cGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaW5nUHJvcGVydHk6IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2Ygc3RyaW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGFycmF5T2ZTdHJpbmdzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYm9vbGVhblxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWxCb29sZWFuPzogYm9vbGVhbjtcblxuICAvL1xuICAvLyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsgKHRvIGNoZWNrIHRoYXQgZGVzY3JpcHRpb24gaXMgb21pdHRlZClcbiAgLy9cbiAgcmVhZG9ubHkgbWFwT2ZOdW1iZXJzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9XG59XG5cbmV4cG9ydCBlbnVtIE15Tm9ybWFsRW51bSB7XG4gIEVOVU1fTUVNQkVSXzEsXG4gIEVOVU1fTUVNQkVSXzIsXG4gIEVOVU1fTUVNQkVSXzNcbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/decdk/test/sanity.test.d.ts b/packages/decdk/test/sanity.test.d.ts deleted file mode 100644 index cb0ff5c3b541f..0000000000000 --- a/packages/decdk/test/sanity.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/decdk/test/sanity.test.js b/packages/decdk/test/sanity.test.js deleted file mode 100644 index 1665a9ab56e28..0000000000000 --- a/packages/decdk/test/sanity.test.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const path = require("path"); -test('path.resolve is sane', async () => { - // Reasons why this might not be true: - // graceful-fs, which is used by Jest, hooks into process.cwd() and - // process.chdir() and caches the values. Because... profit? - const targetDir = path.join(__dirname, 'fixture'); - const cwd = process.cwd(); - try { - process.chdir(targetDir); - expect(process.cwd()).toEqual(targetDir); - const resolved = path.resolve('.'); - expect(resolved).toEqual(targetDir); - } - finally { - process.chdir(cwd); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXR5LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzYW5pdHkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUU3QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDdEMsc0NBQXNDO0lBQ3RDLG1FQUFtRTtJQUNuRSw0REFBNEQ7SUFFNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTFCLElBQUk7UUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBRXJDO1lBQVM7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG50ZXN0KCdwYXRoLnJlc29sdmUgaXMgc2FuZScsIGFzeW5jICgpID0+IHtcbiAgLy8gUmVhc29ucyB3aHkgdGhpcyBtaWdodCBub3QgYmUgdHJ1ZTpcbiAgLy8gZ3JhY2VmdWwtZnMsIHdoaWNoIGlzIHVzZWQgYnkgSmVzdCwgaG9va3MgaW50byBwcm9jZXNzLmN3ZCgpIGFuZFxuICAvLyBwcm9jZXNzLmNoZGlyKCkgYW5kIGNhY2hlcyB0aGUgdmFsdWVzLiBCZWNhdXNlLi4uIHByb2ZpdD9cblxuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZml4dHVyZScpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHRhcmdldERpcik7XG4gICAgZXhwZWN0KHByb2Nlc3MuY3dkKCkpLnRvRXF1YWwodGFyZ2V0RGlyKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKCcuJyk7XG4gICAgZXhwZWN0KHJlc29sdmVkKS50b0VxdWFsKHRhcmdldERpcik7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKGN3ZCk7XG4gIH1cbn0pOyJdfQ== \ No newline at end of file diff --git a/packages/decdk/test/schema.test.d.ts b/packages/decdk/test/schema.test.d.ts deleted file mode 100644 index cb0ff5c3b541f..0000000000000 --- a/packages/decdk/test/schema.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/decdk/test/schema.test.js b/packages/decdk/test/schema.test.js deleted file mode 100644 index e1b8884655b06..0000000000000 --- a/packages/decdk/test/schema.test.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const child_process_1 = require("child_process"); -const reflect = require("jsii-reflect"); -const path = require("path"); -const jsii2schema_1 = require("../lib/jsii2schema"); -const fixturedir = path.join(__dirname, 'fixture'); -/* eslint-disable no-console */ -// building the decdk schema often does not complete in the default 5 second Jest timeout -jest.setTimeout(60000); -let typesys; -beforeAll(async () => { - typesys = new reflect.TypeSystem(); - // jsii-compile the fixtures module - await spawn(require.resolve('jsii/bin/jsii'), { cwd: fixturedir, }); - // load the resulting file system - await typesys.loadFile(path.join(fixturedir, '.jsii')); - await typesys.load(path.dirname(require.resolve('@aws-cdk/core/.jsii'))); -}); -test('schemaForInterface: interface with primitives', async () => { - // GIVEN - const defs = {}; - const ctx = jsii2schema_1.SchemaContext.root(defs); - // WHEN - const ref = jsii2schema_1.schemaForInterface(typesys.findFqn('fixture.InterfaceWithPrimitives'), ctx); - // THEN - expect(ref).toStrictEqual({ $ref: '#/definitions/fixture.InterfaceWithPrimitives' }); - expect(ctx.definitions).toStrictEqual({ - 'fixture.InterfaceWithPrimitives': { - type: 'object', - title: 'InterfaceWithPrimitives', - additionalProperties: false, - properties: { - arrayOfStrings: { - type: 'array', - items: { type: 'string' }, - description: 'Array of strings.' - }, - mapOfNumbers: { - type: 'object', - additionalProperties: { type: 'number' } - }, - numberProperty: { - type: 'number', - description: 'A property of type number.' - }, - stringProperty: { - type: 'string', - description: 'A property of type string.' - }, - optionalBoolean: { - type: 'boolean', - description: 'Optional boolean.' - } - }, - required: [ - 'arrayOfStrings', - 'mapOfNumbers', - 'numberProperty', - 'stringProperty' - ], - comment: 'fixture.InterfaceWithPrimitives' - } - }); -}); -/** - * Version of spawn() that returns a promise - * - * Need spawn() so that we can set stdio to inherit so that any jsii errors - * are propagated outwards. - */ -function spawn(command, options) { - return new Promise((resolve, reject) => { - const cp = child_process_1.spawn(command, [], { stdio: 'inherit', ...options }); - cp.on('error', reject); - cp.on('exit', (code, signal) => { - if (code === 0) { - resolve(); - } - reject(new Error(`Subprocess exited with ${code || signal}`)); - }); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzY2hlbWEudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlEQUFrRTtBQUNsRSx3Q0FBd0M7QUFDeEMsNkJBQTZCO0FBQzdCLG9EQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVuRCwrQkFBK0I7QUFFL0IseUZBQXlGO0FBQ3pGLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUM7QUFFeEIsSUFBSSxPQUEyQixDQUFDO0FBRWhDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNuQixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFbkMsbUNBQW1DO0lBQ25DLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxHQUFJLENBQUMsQ0FBQztJQUVyRSxpQ0FBaUM7SUFDakMsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMvRCxRQUFRO0lBQ1IsTUFBTSxJQUFJLEdBQUcsRUFBRyxDQUFDO0lBQ2pCLE1BQU0sR0FBRyxHQUFHLDJCQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJDLE9BQU87SUFDUCxNQUFNLEdBQUcsR0FBRyxnQ0FBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFeEYsT0FBTztJQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsK0NBQStDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3BDLGlDQUFpQyxFQUFFO1lBQ2pDLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLHlCQUF5QjtZQUNoQyxvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLFVBQVUsRUFBRTtnQkFDVixjQUFjLEVBQUU7b0JBQ2QsSUFBSSxFQUFFLE9BQU87b0JBQ2IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDekIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLElBQUksRUFBRSxRQUFRO29CQUNkLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtpQkFDekM7Z0JBQ0QsY0FBYyxFQUFFO29CQUNkLElBQUksRUFBRSxRQUFRO29CQUNkLFdBQVcsRUFBRSw0QkFBNEI7aUJBQzFDO2dCQUNELGNBQWMsRUFBRTtvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXLEVBQUUsNEJBQTRCO2lCQUMxQztnQkFDRCxlQUFlLEVBQUU7b0JBQ2YsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixnQkFBZ0I7Z0JBQ2hCLGNBQWM7Z0JBQ2QsZ0JBQWdCO2dCQUNoQixnQkFBZ0I7YUFDakI7WUFDRCxPQUFPLEVBQUUsaUNBQWlDO1NBQzNDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILFNBQVMsS0FBSyxDQUFDLE9BQWUsRUFBRSxPQUFpQztJQUMvRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLHFCQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzdCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPLEVBQUUsQ0FBQzthQUFFO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIGFzIHNwYXduQXN5bmMsIFNwYXduT3B0aW9ucyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICdqc2lpLXJlZmxlY3QnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNjaGVtYUNvbnRleHQsIHNjaGVtYUZvckludGVyZmFjZSB9IGZyb20gJy4uL2xpYi9qc2lpMnNjaGVtYSc7XG5cbmNvbnN0IGZpeHR1cmVkaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZml4dHVyZScpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5cbi8vIGJ1aWxkaW5nIHRoZSBkZWNkayBzY2hlbWEgb2Z0ZW4gZG9lcyBub3QgY29tcGxldGUgaW4gdGhlIGRlZmF1bHQgNSBzZWNvbmQgSmVzdCB0aW1lb3V0XG5qZXN0LnNldFRpbWVvdXQoNjBfMDAwKTtcblxubGV0IHR5cGVzeXM6IHJlZmxlY3QuVHlwZVN5c3RlbTtcblxuYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgdHlwZXN5cyA9IG5ldyByZWZsZWN0LlR5cGVTeXN0ZW0oKTtcblxuICAvLyBqc2lpLWNvbXBpbGUgdGhlIGZpeHR1cmVzIG1vZHVsZVxuICBhd2FpdCBzcGF3bihyZXF1aXJlLnJlc29sdmUoJ2pzaWkvYmluL2pzaWknKSwgeyBjd2Q6IGZpeHR1cmVkaXIsICB9KTtcblxuICAvLyBsb2FkIHRoZSByZXN1bHRpbmcgZmlsZSBzeXN0ZW1cbiAgYXdhaXQgdHlwZXN5cy5sb2FkRmlsZShwYXRoLmpvaW4oZml4dHVyZWRpciwgJy5qc2lpJykpO1xuICBhd2FpdCB0eXBlc3lzLmxvYWQocGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnQGF3cy1jZGsvY29yZS8uanNpaScpKSk7XG59KTtcblxudGVzdCgnc2NoZW1hRm9ySW50ZXJmYWNlOiBpbnRlcmZhY2Ugd2l0aCBwcmltaXRpdmVzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBkZWZzID0geyB9O1xuICBjb25zdCBjdHggPSBTY2hlbWFDb250ZXh0LnJvb3QoZGVmcyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZWYgPSBzY2hlbWFGb3JJbnRlcmZhY2UodHlwZXN5cy5maW5kRnFuKCdmaXh0dXJlLkludGVyZmFjZVdpdGhQcmltaXRpdmVzJyksIGN0eCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmVmKS50b1N0cmljdEVxdWFsKHsgJHJlZjogJyMvZGVmaW5pdGlvbnMvZml4dHVyZS5JbnRlcmZhY2VXaXRoUHJpbWl0aXZlcycgfSk7XG4gIGV4cGVjdChjdHguZGVmaW5pdGlvbnMpLnRvU3RyaWN0RXF1YWwoe1xuICAgICdmaXh0dXJlLkludGVyZmFjZVdpdGhQcmltaXRpdmVzJzoge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICB0aXRsZTogJ0ludGVyZmFjZVdpdGhQcmltaXRpdmVzJyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYXJyYXlPZlN0cmluZ3M6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiBzdHJpbmdzLidcbiAgICAgICAgfSxcbiAgICAgICAgbWFwT2ZOdW1iZXJzOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ251bWJlcicgfVxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJQcm9wZXJ0eToge1xuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQSBwcm9wZXJ0eSBvZiB0eXBlIG51bWJlci4nXG4gICAgICAgIH0sXG4gICAgICAgIHN0cmluZ1Byb3BlcnR5OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBIHByb3BlcnR5IG9mIHR5cGUgc3RyaW5nLidcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uYWxCb29sZWFuOiB7XG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgYm9vbGVhbi4nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogW1xuICAgICAgICAnYXJyYXlPZlN0cmluZ3MnLFxuICAgICAgICAnbWFwT2ZOdW1iZXJzJyxcbiAgICAgICAgJ251bWJlclByb3BlcnR5JyxcbiAgICAgICAgJ3N0cmluZ1Byb3BlcnR5J1xuICAgICAgXSxcbiAgICAgIGNvbW1lbnQ6ICdmaXh0dXJlLkludGVyZmFjZVdpdGhQcmltaXRpdmVzJ1xuICAgIH1cbiAgfSk7XG59KTtcblxuLyoqXG4gKiBWZXJzaW9uIG9mIHNwYXduKCkgdGhhdCByZXR1cm5zIGEgcHJvbWlzZVxuICpcbiAqIE5lZWQgc3Bhd24oKSBzbyB0aGF0IHdlIGNhbiBzZXQgc3RkaW8gdG8gaW5oZXJpdCBzbyB0aGF0IGFueSBqc2lpIGVycm9yc1xuICogYXJlIHByb3BhZ2F0ZWQgb3V0d2FyZHMuXG4gKi9cbmZ1bmN0aW9uIHNwYXduKGNvbW1hbmQ6IHN0cmluZywgb3B0aW9uczogU3Bhd25PcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY3AgPSBzcGF3bkFzeW5jKGNvbW1hbmQsIFtdLCB7IHN0ZGlvOiAnaW5oZXJpdCcsIC4uLm9wdGlvbnMgfSk7XG5cbiAgICBjcC5vbignZXJyb3InLCByZWplY3QpO1xuICAgIGNwLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHsgcmVzb2x2ZSgpOyB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBTdWJwcm9jZXNzIGV4aXRlZCB3aXRoICR7Y29kZSB8fCBzaWduYWx9YCkpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/packages/decdk/test/synth.test.d.ts b/packages/decdk/test/synth.test.d.ts deleted file mode 100644 index cb0ff5c3b541f..0000000000000 --- a/packages/decdk/test/synth.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/decdk/test/synth.test.js b/packages/decdk/test/synth.test.js deleted file mode 100644 index ff0be889b76eb..0000000000000 --- a/packages/decdk/test/synth.test.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const cdk = require("@aws-cdk/core"); -const fs = require("fs"); -const path = require("path"); -const cx_api_1 = require("@aws-cdk/cx-api"); -const lib_1 = require("../lib"); -const VALIDATE_ASSEMBLIES = true; -const dir = path.join(__dirname, '..', 'examples'); -if (VALIDATE_ASSEMBLIES) { - // With validation loading all assemblies takes 10s on my machine. - // Without validation it's 600ms. - // - // Add a big margin for slower machines in case validation is enabled. - jest.setTimeout(60 * 1000); -} -let _cachedTS; -async function obtainTypeSystem() { - // Load the typesystem only once, it's quite expensive - if (!_cachedTS) { - _cachedTS = await lib_1.loadTypeSystem(VALIDATE_ASSEMBLIES); - } - return _cachedTS; -} -for (const templateFile of fs.readdirSync(dir)) { - test(templateFile, async () => { - const workingDirectory = dir; - const template = await lib_1.readTemplate(path.resolve(dir, templateFile)); - const typeSystem = await obtainTypeSystem(); - const app = new cdk.App({ - context: { - ...cx_api_1.FUTURE_FLAGS, - } - }); - const stackName = lib_1.stackNameFromFileName(templateFile); - new lib_1.DeclarativeStack(app, stackName, { - workingDirectory, - template, - typeSystem - }); - const output = app.synth().getStackByName(stackName); - expect(output.template).toMatchSnapshot(stackName); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN5bnRoLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBcUM7QUFDckMseUJBQXlCO0FBRXpCLDZCQUE2QjtBQUM3Qiw0Q0FBK0M7QUFDL0MsZ0NBQStGO0FBRS9GLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVuRCxJQUFJLG1CQUFtQixFQUFFO0lBQ3ZCLGtFQUFrRTtJQUNsRSxpQ0FBaUM7SUFDakMsRUFBRTtJQUNGLHNFQUFzRTtJQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUM1QjtBQUVELElBQUksU0FBNkIsQ0FBQztBQUNsQyxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLHNEQUFzRDtJQUN0RCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsU0FBUyxHQUFHLE1BQU0sb0JBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3ZEO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELEtBQUssTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztRQUU1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDdEIsT0FBTyxFQUFFO2dCQUNQLEdBQUcscUJBQVk7YUFDaEI7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRywyQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RCxJQUFJLHNCQUFnQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7WUFDbkMsZ0JBQWdCO1lBQ2hCLFFBQVE7WUFDUixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICdqc2lpLXJlZmxlY3QnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEZVVFVSRV9GTEFHUyB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBEZWNsYXJhdGl2ZVN0YWNrLCBsb2FkVHlwZVN5c3RlbSwgcmVhZFRlbXBsYXRlLCBzdGFja05hbWVGcm9tRmlsZU5hbWUgfSBmcm9tICcuLi9saWInO1xuXG5jb25zdCBWQUxJREFURV9BU1NFTUJMSUVTID0gdHJ1ZTtcblxuY29uc3QgZGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ2V4YW1wbGVzJyk7XG5cbmlmIChWQUxJREFURV9BU1NFTUJMSUVTKSB7XG4gIC8vIFdpdGggdmFsaWRhdGlvbiBsb2FkaW5nIGFsbCBhc3NlbWJsaWVzIHRha2VzIDEwcyBvbiBteSBtYWNoaW5lLlxuICAvLyBXaXRob3V0IHZhbGlkYXRpb24gaXQncyA2MDBtcy5cbiAgLy9cbiAgLy8gQWRkIGEgYmlnIG1hcmdpbiBmb3Igc2xvd2VyIG1hY2hpbmVzIGluIGNhc2UgdmFsaWRhdGlvbiBpcyBlbmFibGVkLlxuICBqZXN0LnNldFRpbWVvdXQoNjAgKiAxMDAwKTtcbn1cblxubGV0IF9jYWNoZWRUUzogcmVmbGVjdC5UeXBlU3lzdGVtO1xuYXN5bmMgZnVuY3Rpb24gb2J0YWluVHlwZVN5c3RlbSgpIHtcbiAgLy8gTG9hZCB0aGUgdHlwZXN5c3RlbSBvbmx5IG9uY2UsIGl0J3MgcXVpdGUgZXhwZW5zaXZlXG4gIGlmICghX2NhY2hlZFRTKSB7XG4gICAgX2NhY2hlZFRTID0gYXdhaXQgbG9hZFR5cGVTeXN0ZW0oVkFMSURBVEVfQVNTRU1CTElFUyk7XG4gIH1cbiAgcmV0dXJuIF9jYWNoZWRUUztcbn1cblxuZm9yIChjb25zdCB0ZW1wbGF0ZUZpbGUgb2YgZnMucmVhZGRpclN5bmMoZGlyKSkge1xuICB0ZXN0KHRlbXBsYXRlRmlsZSwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdvcmtpbmdEaXJlY3RvcnkgPSBkaXI7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCByZWFkVGVtcGxhdGUocGF0aC5yZXNvbHZlKGRpciwgdGVtcGxhdGVGaWxlKSk7XG4gICAgY29uc3QgdHlwZVN5c3RlbSA9IGF3YWl0IG9idGFpblR5cGVTeXN0ZW0oKTtcblxuICAgIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgLi4uRlVUVVJFX0ZMQUdTLFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IHN0YWNrTmFtZUZyb21GaWxlTmFtZSh0ZW1wbGF0ZUZpbGUpO1xuXG4gICAgbmV3IERlY2xhcmF0aXZlU3RhY2soYXBwLCBzdGFja05hbWUsIHtcbiAgICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIHR5cGVTeXN0ZW1cbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGFwcC5zeW50aCgpLmdldFN0YWNrQnlOYW1lKHN0YWNrTmFtZSk7XG4gICAgZXhwZWN0KG91dHB1dC50ZW1wbGF0ZSkudG9NYXRjaFNuYXBzaG90KHN0YWNrTmFtZSk7XG4gIH0pO1xufVxuIl19 \ No newline at end of file