terraconstructs 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.envrc +5 -0
- package/.jsii +79780 -0
- package/.mise.toml +8 -0
- package/.nvmrc +1 -0
- package/.terraform-version +1 -0
- package/.terraform.d/plugin-cache/.gitignore +5 -0
- package/LICENSE +674 -0
- package/NOTICE.txt +12 -0
- package/README.md +42 -0
- package/bun.lockb +0 -0
- package/go.mod +158 -0
- package/go.sum +1206 -0
- package/lib/aws/arn.d.ts +187 -0
- package/lib/aws/arn.js +383 -0
- package/lib/aws/aws-construct.d.ts +76 -0
- package/lib/aws/aws-construct.js +38 -0
- package/lib/aws/aws-stack.d.ts +201 -0
- package/lib/aws/aws-stack.js +303 -0
- package/lib/aws/cloudwatch/actions/ec2.d.ts +35 -0
- package/lib/aws/cloudwatch/actions/ec2.js +48 -0
- package/lib/aws/cloudwatch/actions/index.d.ts +2 -0
- package/lib/aws/cloudwatch/actions/index.js +24 -0
- package/lib/aws/cloudwatch/actions/lambda.d.ts +16 -0
- package/lib/aws/cloudwatch/actions/lambda.js +48 -0
- package/lib/aws/cloudwatch/alarm-action.d.ts +23 -0
- package/lib/aws/cloudwatch/alarm-action.js +4 -0
- package/lib/aws/cloudwatch/alarm-base.d.ts +84 -0
- package/lib/aws/cloudwatch/alarm-base.js +64 -0
- package/lib/aws/cloudwatch/alarm-rule.d.ts +61 -0
- package/lib/aws/cloudwatch/alarm-rule.js +116 -0
- package/lib/aws/cloudwatch/alarm-status-widget.d.ts +77 -0
- package/lib/aws/cloudwatch/alarm-status-widget.js +62 -0
- package/lib/aws/cloudwatch/alarm.d.ts +158 -0
- package/lib/aws/cloudwatch/alarm.js +410 -0
- package/lib/aws/cloudwatch/composite-alarm.d.ts +88 -0
- package/lib/aws/cloudwatch/composite-alarm.js +98 -0
- package/lib/aws/cloudwatch/dashboard.d.ts +137 -0
- package/lib/aws/cloudwatch/dashboard.js +141 -0
- package/lib/aws/cloudwatch/data-protection-policy.d.ts +184 -0
- package/lib/aws/cloudwatch/data-protection-policy.js +246 -0
- package/lib/aws/cloudwatch/graph.d.ts +792 -0
- package/lib/aws/cloudwatch/graph.js +537 -0
- package/lib/aws/cloudwatch/index.d.ts +26 -0
- package/lib/aws/cloudwatch/index.js +49 -0
- package/lib/aws/cloudwatch/layout.d.ts +89 -0
- package/lib/aws/cloudwatch/layout.js +147 -0
- package/lib/aws/cloudwatch/log-destinations/index.d.ts +2 -0
- package/lib/aws/cloudwatch/log-destinations/index.js +20 -0
- package/lib/aws/cloudwatch/log-destinations/kinesis.d.ts +29 -0
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +52 -0
- package/lib/aws/cloudwatch/log-destinations/lambda.d.ts +22 -0
- package/lib/aws/cloudwatch/log-destinations/lambda.js +46 -0
- package/lib/aws/cloudwatch/log-group.d.ts +453 -0
- package/lib/aws/cloudwatch/log-group.js +350 -0
- package/lib/aws/cloudwatch/log-query.d.ts +91 -0
- package/lib/aws/cloudwatch/log-query.js +85 -0
- package/lib/aws/cloudwatch/log-stream.d.ts +57 -0
- package/lib/aws/cloudwatch/log-stream.js +57 -0
- package/lib/aws/cloudwatch/metric-filter.d.ts +30 -0
- package/lib/aws/cloudwatch/metric-filter.js +69 -0
- package/lib/aws/cloudwatch/metric-types.d.ts +407 -0
- package/lib/aws/cloudwatch/metric-types.js +151 -0
- package/lib/aws/cloudwatch/metric.d.ts +492 -0
- package/lib/aws/cloudwatch/metric.js +493 -0
- package/lib/aws/cloudwatch/pattern.d.ts +195 -0
- package/lib/aws/cloudwatch/pattern.js +412 -0
- package/lib/aws/cloudwatch/policy.d.ts +43 -0
- package/lib/aws/cloudwatch/policy.js +50 -0
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +14 -0
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +37 -0
- package/lib/aws/cloudwatch/private/env-tokens.d.ts +8 -0
- package/lib/aws/cloudwatch/private/env-tokens.js +48 -0
- package/lib/aws/cloudwatch/private/metric-util.d.ts +60 -0
- package/lib/aws/cloudwatch/private/metric-util.js +132 -0
- package/lib/aws/cloudwatch/private/object.d.ts +1 -0
- package/lib/aws/cloudwatch/private/object.js +18 -0
- package/lib/aws/cloudwatch/private/rendering.d.ts +60 -0
- package/lib/aws/cloudwatch/private/rendering.js +181 -0
- package/lib/aws/cloudwatch/private/statistic.d.ts +51 -0
- package/lib/aws/cloudwatch/private/statistic.js +176 -0
- package/lib/aws/cloudwatch/query-definition.d.ts +150 -0
- package/lib/aws/cloudwatch/query-definition.js +114 -0
- package/lib/aws/cloudwatch/stats.d.ts +150 -0
- package/lib/aws/cloudwatch/stats.js +207 -0
- package/lib/aws/cloudwatch/subscription-filter.d.ts +75 -0
- package/lib/aws/cloudwatch/subscription-filter.js +51 -0
- package/lib/aws/cloudwatch/text.d.ts +52 -0
- package/lib/aws/cloudwatch/text.js +53 -0
- package/lib/aws/cloudwatch/variable.d.ts +156 -0
- package/lib/aws/cloudwatch/variable.js +156 -0
- package/lib/aws/cloudwatch/widget.d.ts +62 -0
- package/lib/aws/cloudwatch/widget.js +45 -0
- package/lib/aws/compute/activity.d.ts +81 -0
- package/lib/aws/compute/activity.js +132 -0
- package/lib/aws/compute/architecture.d.ts +33 -0
- package/lib/aws/compute/architecture.js +42 -0
- package/lib/aws/compute/chain.d.ts +52 -0
- package/lib/aws/compute/chain.js +68 -0
- package/lib/aws/compute/condition.d.ts +202 -0
- package/lib/aws/compute/condition.js +409 -0
- package/lib/aws/compute/event-invoke-config.d.ts +74 -0
- package/lib/aws/compute/event-invoke-config.js +63 -0
- package/lib/aws/compute/event-source-filter.d.ts +64 -0
- package/lib/aws/compute/event-source-filter.js +86 -0
- package/lib/aws/compute/event-source-mapping.d.ts +310 -0
- package/lib/aws/compute/event-source-mapping.js +267 -0
- package/lib/aws/compute/event-sources/index.d.ts +4 -0
- package/lib/aws/compute/event-sources/index.js +28 -0
- package/lib/aws/compute/event-sources/s3-onfailure-destination.d.ts +13 -0
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +26 -0
- package/lib/aws/compute/event-sources/s3.d.ts +24 -0
- package/lib/aws/compute/event-sources/s3.js +25 -0
- package/lib/aws/compute/event-sources/sqs-dlq.d.ts +13 -0
- package/lib/aws/compute/event-sources/sqs-dlq.js +26 -0
- package/lib/aws/compute/event-sources/sqs.d.ts +75 -0
- package/lib/aws/compute/event-sources/sqs.js +84 -0
- package/lib/aws/compute/fields.d.ts +367 -0
- package/lib/aws/compute/fields.js +546 -0
- package/lib/aws/compute/function-alias.d.ts +148 -0
- package/lib/aws/compute/function-alias.js +176 -0
- package/lib/aws/compute/function-base.d.ts +314 -0
- package/lib/aws/compute/function-base.js +421 -0
- package/lib/aws/compute/function-destination.d.ts +42 -0
- package/lib/aws/compute/function-destination.js +18 -0
- package/lib/aws/compute/function-destinations/event-bridge.d.ts +19 -0
- package/lib/aws/compute/function-destinations/event-bridge.js +46 -0
- package/lib/aws/compute/function-destinations/function.d.ts +34 -0
- package/lib/aws/compute/function-destinations/function.js +55 -0
- package/lib/aws/compute/function-destinations/index.d.ts +3 -0
- package/lib/aws/compute/function-destinations/index.js +22 -0
- package/lib/aws/compute/function-destinations/sqs.d.ts +14 -0
- package/lib/aws/compute/function-destinations/sqs.js +27 -0
- package/lib/aws/compute/function-nodejs.d.ts +55 -0
- package/lib/aws/compute/function-nodejs.js +70 -0
- package/lib/aws/compute/function-permission.d.ts +83 -0
- package/lib/aws/compute/function-permission.js +3 -0
- package/lib/aws/compute/function-url.d.ts +210 -0
- package/lib/aws/compute/function-url.js +148 -0
- package/lib/aws/compute/function-vpc-config.generated.d.ts +36 -0
- package/lib/aws/compute/function-vpc-config.generated.js +3 -0
- package/lib/aws/compute/function.d.ts +492 -0
- package/lib/aws/compute/function.js +692 -0
- package/lib/aws/compute/index.d.ts +42 -0
- package/lib/aws/compute/index.js +64 -0
- package/lib/aws/compute/private/intrinstics.d.ts +86 -0
- package/lib/aws/compute/private/intrinstics.js +220 -0
- package/lib/aws/compute/private/json-path.d.ts +57 -0
- package/lib/aws/compute/private/json-path.js +351 -0
- package/lib/aws/compute/private/util.d.ts +1 -0
- package/lib/aws/compute/private/util.js +38 -0
- package/lib/aws/compute/state-graph.d.ts +100 -0
- package/lib/aws/compute/state-graph.js +177 -0
- package/lib/aws/compute/state-machine-fragment.d.ts +61 -0
- package/lib/aws/compute/state-machine-fragment.js +56 -0
- package/lib/aws/compute/state-machine.d.ts +323 -0
- package/lib/aws/compute/state-machine.js +392 -0
- package/lib/aws/compute/states/choice.d.ts +94 -0
- package/lib/aws/compute/states/choice.js +81 -0
- package/lib/aws/compute/states/custom-state.d.ts +55 -0
- package/lib/aws/compute/states/custom-state.js +114 -0
- package/lib/aws/compute/states/distributed-map/item-batcher.d.ts +64 -0
- package/lib/aws/compute/states/distributed-map/item-batcher.js +58 -0
- package/lib/aws/compute/states/distributed-map/item-reader.d.ts +256 -0
- package/lib/aws/compute/states/distributed-map/item-reader.js +253 -0
- package/lib/aws/compute/states/distributed-map/result-writer.d.ts +41 -0
- package/lib/aws/compute/states/distributed-map/result-writer.js +66 -0
- package/lib/aws/compute/states/distributed-map.d.ts +153 -0
- package/lib/aws/compute/states/distributed-map.js +207 -0
- package/lib/aws/compute/states/fail.d.ts +74 -0
- package/lib/aws/compute/states/fail.js +83 -0
- package/lib/aws/compute/states/map-base.d.ts +145 -0
- package/lib/aws/compute/states/map-base.js +109 -0
- package/lib/aws/compute/states/map.d.ts +76 -0
- package/lib/aws/compute/states/map.js +110 -0
- package/lib/aws/compute/states/parallel.d.ts +113 -0
- package/lib/aws/compute/states/parallel.js +100 -0
- package/lib/aws/compute/states/pass.d.ts +122 -0
- package/lib/aws/compute/states/pass.js +99 -0
- package/lib/aws/compute/states/private/state-type.d.ts +13 -0
- package/lib/aws/compute/states/private/state-type.js +19 -0
- package/lib/aws/compute/states/state.d.ts +276 -0
- package/lib/aws/compute/states/state.js +482 -0
- package/lib/aws/compute/states/succeed.d.ts +51 -0
- package/lib/aws/compute/states/succeed.js +32 -0
- package/lib/aws/compute/states/task-base.d.ts +225 -0
- package/lib/aws/compute/states/task-base.js +160 -0
- package/lib/aws/compute/states/task.d.ts +127 -0
- package/lib/aws/compute/states/task.js +92 -0
- package/lib/aws/compute/states/wait.d.ts +78 -0
- package/lib/aws/compute/states/wait.js +90 -0
- package/lib/aws/compute/step-functions-task.d.ts +78 -0
- package/lib/aws/compute/step-functions-task.js +27 -0
- package/lib/aws/compute/task-credentials.d.ts +45 -0
- package/lib/aws/compute/task-credentials.js +52 -0
- package/lib/aws/compute/task-input.d.ts +86 -0
- package/lib/aws/compute/task-input.js +107 -0
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.d.ts +73 -0
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +69 -0
- package/lib/aws/compute/tasks/eventbridge/put-events.d.ts +74 -0
- package/lib/aws/compute/tasks/eventbridge/put-events.js +94 -0
- package/lib/aws/compute/tasks/http/invoke.d.ts +104 -0
- package/lib/aws/compute/tasks/http/invoke.js +117 -0
- package/lib/aws/compute/tasks/index.d.ts +7 -0
- package/lib/aws/compute/tasks/index.js +42 -0
- package/lib/aws/compute/tasks/lambda/invoke.d.ts +106 -0
- package/lib/aws/compute/tasks/lambda/invoke.js +125 -0
- package/lib/aws/compute/tasks/private/task-utils.d.ts +8 -0
- package/lib/aws/compute/tasks/private/task-utils.js +36 -0
- package/lib/aws/compute/tasks/resource-arn-suffix.d.ts +3 -0
- package/lib/aws/compute/tasks/resource-arn-suffix.js +25 -0
- package/lib/aws/compute/tasks/sqs/send-message.d.ts +62 -0
- package/lib/aws/compute/tasks/sqs/send-message.js +70 -0
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.d.ts +36 -0
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +45 -0
- package/lib/aws/compute/tasks/stepfunctions/start-execution.d.ts +63 -0
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +123 -0
- package/lib/aws/compute/types.d.ts +214 -0
- package/lib/aws/compute/types.js +103 -0
- package/lib/aws/compute/util.d.ts +12 -0
- package/lib/aws/compute/util.js +29 -0
- package/lib/aws/edge/certificate.d.ts +144 -0
- package/lib/aws/edge/certificate.js +191 -0
- package/lib/aws/edge/distribution.d.ts +505 -0
- package/lib/aws/edge/distribution.js +444 -0
- package/lib/aws/edge/dns-alias-record-targets.d.ts +29 -0
- package/lib/aws/edge/dns-alias-record-targets.js +46 -0
- package/lib/aws/edge/dns-record.d.ts +536 -0
- package/lib/aws/edge/dns-record.js +532 -0
- package/lib/aws/edge/dns-zone.d.ts +169 -0
- package/lib/aws/edge/dns-zone.js +149 -0
- package/lib/aws/edge/function.d.ts +185 -0
- package/lib/aws/edge/function.js +141 -0
- package/lib/aws/edge/index.d.ts +8 -0
- package/lib/aws/edge/index.js +25 -0
- package/lib/aws/edge/key-value-store.d.ts +162 -0
- package/lib/aws/edge/key-value-store.js +163 -0
- package/lib/aws/edge/origin.d.ts +160 -0
- package/lib/aws/edge/origin.js +245 -0
- package/lib/aws/encryption/alias.d.ts +137 -0
- package/lib/aws/encryption/alias.js +216 -0
- package/lib/aws/encryption/index.d.ts +4 -0
- package/lib/aws/encryption/index.js +21 -0
- package/lib/aws/encryption/key-lookup.d.ts +11 -0
- package/lib/aws/encryption/key-lookup.js +4 -0
- package/lib/aws/encryption/key.d.ts +461 -0
- package/lib/aws/encryption/key.js +586 -0
- package/lib/aws/encryption/private/perms.d.ts +5 -0
- package/lib/aws/encryption/private/perms.js +30 -0
- package/lib/aws/encryption/via-service-principal.d.ts +11 -0
- package/lib/aws/encryption/via-service-principal.js +39 -0
- package/lib/aws/iam/grant.d.ts +221 -0
- package/lib/aws/iam/grant.js +239 -0
- package/lib/aws/iam/identity-base.d.ts +20 -0
- package/lib/aws/iam/identity-base.js +3 -0
- package/lib/aws/iam/index.d.ts +16 -0
- package/lib/aws/iam/index.js +34 -0
- package/lib/aws/iam/managed-policy.d.ts +227 -0
- package/lib/aws/iam/managed-policy.js +237 -0
- package/lib/aws/iam/oidc-provider.d.ts +120 -0
- package/lib/aws/iam/oidc-provider.js +82 -0
- package/lib/aws/iam/policy-document-config.generated.d.ts +78 -0
- package/lib/aws/iam/policy-document-config.generated.js +3 -0
- package/lib/aws/iam/policy-document.d.ts +150 -0
- package/lib/aws/iam/policy-document.js +172 -0
- package/lib/aws/iam/policy-statement-props.generated.d.ts +55 -0
- package/lib/aws/iam/policy-statement-props.generated.js +3 -0
- package/lib/aws/iam/policy-statement.d.ts +451 -0
- package/lib/aws/iam/policy-statement.js +947 -0
- package/lib/aws/iam/policy.d.ts +122 -0
- package/lib/aws/iam/policy.js +192 -0
- package/lib/aws/iam/principals.d.ts +668 -0
- package/lib/aws/iam/principals.js +1032 -0
- package/lib/aws/iam/private/adapter.d.ts +21 -0
- package/lib/aws/iam/private/adapter.js +51 -0
- package/lib/aws/iam/private/assume-role-policy.d.ts +8 -0
- package/lib/aws/iam/private/assume-role-policy.js +27 -0
- package/lib/aws/iam/private/comparable-principal.d.ts +6 -0
- package/lib/aws/iam/private/comparable-principal.js +20 -0
- package/lib/aws/iam/private/immutable-role.d.ts +43 -0
- package/lib/aws/iam/private/immutable-role.js +76 -0
- package/lib/aws/iam/private/imported-role.d.ts +49 -0
- package/lib/aws/iam/private/imported-role.js +103 -0
- package/lib/aws/iam/private/merge-statements.d.ts +44 -0
- package/lib/aws/iam/private/merge-statements.js +214 -0
- package/lib/aws/iam/private/postprocess-policy-document.d.ts +15 -0
- package/lib/aws/iam/private/postprocess-policy-document.js +102 -0
- package/lib/aws/iam/private/util.d.ts +37 -0
- package/lib/aws/iam/private/util.js +87 -0
- package/lib/aws/iam/role.d.ts +425 -0
- package/lib/aws/iam/role.js +407 -0
- package/lib/aws/iam/saml-provider.d.ts +79 -0
- package/lib/aws/iam/saml-provider.js +79 -0
- package/lib/aws/iam/unknown-principal.d.ts +32 -0
- package/lib/aws/iam/unknown-principal.js +45 -0
- package/lib/aws/iam/utils.d.ts +12 -0
- package/lib/aws/iam/utils.js +41 -0
- package/lib/aws/index.d.ts +13 -0
- package/lib/aws/index.js +34 -0
- package/lib/aws/log-retention.d.ts +97 -0
- package/lib/aws/log-retention.js +103 -0
- package/lib/aws/network/index.d.ts +4 -0
- package/lib/aws/network/index.js +21 -0
- package/lib/aws/network/network.d.ts +77 -0
- package/lib/aws/network/network.js +3 -0
- package/lib/aws/network/simple-ipv4-vpc.d.ts +84 -0
- package/lib/aws/network/simple-ipv4-vpc.js +236 -0
- package/lib/aws/network/subnet-group.d.ts +42 -0
- package/lib/aws/network/subnet-group.js +72 -0
- package/lib/aws/network/subnet.d.ts +95 -0
- package/lib/aws/network/subnet.js +123 -0
- package/lib/aws/notify/archive.d.ts +77 -0
- package/lib/aws/notify/archive.js +62 -0
- package/lib/aws/notify/connection.d.ts +276 -0
- package/lib/aws/notify/connection.js +261 -0
- package/lib/aws/notify/event-bus.d.ts +298 -0
- package/lib/aws/notify/event-bus.js +326 -0
- package/lib/aws/notify/event-pattern.d.ts +220 -0
- package/lib/aws/notify/event-pattern.js +197 -0
- package/lib/aws/notify/index.d.ts +15 -0
- package/lib/aws/notify/index.js +35 -0
- package/lib/aws/notify/input.d.ts +126 -0
- package/lib/aws/notify/input.js +282 -0
- package/lib/aws/notify/kinesis-canned-metrics.generated.d.ts +68 -0
- package/lib/aws/notify/kinesis-canned-metrics.generated.js +103 -0
- package/lib/aws/notify/kinesis-fixed-canned-metrics.d.ts +195 -0
- package/lib/aws/notify/kinesis-fixed-canned-metrics.js +155 -0
- package/lib/aws/notify/kinesis-stream.d.ts +705 -0
- package/lib/aws/notify/kinesis-stream.js +541 -0
- package/lib/aws/notify/on-event-options.d.ts +54 -0
- package/lib/aws/notify/on-event-options.js +3 -0
- package/lib/aws/notify/queue-config.generated.d.ts +85 -0
- package/lib/aws/notify/queue-config.generated.js +3 -0
- package/lib/aws/notify/queue-policy.d.ts +35 -0
- package/lib/aws/notify/queue-policy.js +39 -0
- package/lib/aws/notify/queue.d.ts +355 -0
- package/lib/aws/notify/queue.js +305 -0
- package/lib/aws/notify/resource-policy.d.ts +41 -0
- package/lib/aws/notify/resource-policy.js +43 -0
- package/lib/aws/notify/rule.d.ts +153 -0
- package/lib/aws/notify/rule.js +227 -0
- package/lib/aws/notify/schedule.d.ts +83 -0
- package/lib/aws/notify/schedule.js +116 -0
- package/lib/aws/notify/target.d.ts +102 -0
- package/lib/aws/notify/target.js +3 -0
- package/lib/aws/notify/targets/event-bus.d.ts +39 -0
- package/lib/aws/notify/targets/event-bus.js +40 -0
- package/lib/aws/notify/targets/function.d.ts +31 -0
- package/lib/aws/notify/targets/function.js +36 -0
- package/lib/aws/notify/targets/index.d.ts +6 -0
- package/lib/aws/notify/targets/index.js +37 -0
- package/lib/aws/notify/targets/log-group.d.ts +89 -0
- package/lib/aws/notify/targets/log-group.js +110 -0
- package/lib/aws/notify/targets/sqs.d.ts +45 -0
- package/lib/aws/notify/targets/sqs.js +73 -0
- package/lib/aws/notify/targets/state-machine.d.ts +36 -0
- package/lib/aws/notify/targets/state-machine.js +39 -0
- package/lib/aws/notify/targets/util.d.ts +71 -0
- package/lib/aws/notify/targets/util.js +130 -0
- package/lib/aws/notify/util.d.ts +13 -0
- package/lib/aws/notify/util.js +69 -0
- package/lib/aws/provider-config.generated.d.ts +220 -0
- package/lib/aws/provider-config.generated.js +3 -0
- package/lib/aws/storage/bucket-destination.d.ts +41 -0
- package/lib/aws/storage/bucket-destination.js +13 -0
- package/lib/aws/storage/bucket-notifications.d.ts +58 -0
- package/lib/aws/storage/bucket-notifications.js +169 -0
- package/lib/aws/storage/bucket-perms.d.ts +9 -0
- package/lib/aws/storage/bucket-perms.js +33 -0
- package/lib/aws/storage/bucket-policy.d.ts +51 -0
- package/lib/aws/storage/bucket-policy.js +53 -0
- package/lib/aws/storage/bucket-source.d.ts +41 -0
- package/lib/aws/storage/bucket-source.js +79 -0
- package/lib/aws/storage/bucket.d.ts +941 -0
- package/lib/aws/storage/bucket.js +869 -0
- package/lib/aws/storage/cors-config.generated.d.ts +57 -0
- package/lib/aws/storage/cors-config.generated.js +3 -0
- package/lib/aws/storage/cors-rule-config.generated.d.ts +38 -0
- package/lib/aws/storage/cors-rule-config.generated.js +3 -0
- package/lib/aws/storage/index.d.ts +12 -0
- package/lib/aws/storage/index.js +31 -0
- package/lib/aws/storage/lifecycle-config.generated.d.ts +55 -0
- package/lib/aws/storage/lifecycle-config.generated.js +3 -0
- package/lib/aws/storage/notification-targets/function.d.ts +11 -0
- package/lib/aws/storage/notification-targets/function.js +48 -0
- package/lib/aws/storage/notification-targets/index.d.ts +2 -0
- package/lib/aws/storage/notification-targets/index.js +21 -0
- package/lib/aws/storage/notification-targets/queue.d.ts +15 -0
- package/lib/aws/storage/notification-targets/queue.js +58 -0
- package/lib/aws/storage/origin-access-identity.d.ts +91 -0
- package/lib/aws/storage/origin-access-identity.js +76 -0
- package/lib/aws/storage/util.d.ts +40 -0
- package/lib/aws/storage/util.js +85 -0
- package/lib/aws/storage/website-config.generated.d.ts +73 -0
- package/lib/aws/storage/website-config.generated.js +3 -0
- package/lib/aws/util.d.ts +4 -0
- package/lib/aws/util.js +25 -0
- package/lib/construct-base.d.ts +69 -0
- package/lib/construct-base.js +89 -0
- package/lib/duration.d.ts +160 -0
- package/lib/duration.js +327 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +24 -0
- package/lib/private/index.d.ts +2 -0
- package/lib/private/index.js +19 -0
- package/lib/private/terraform-dependables-aspect.d.ts +20 -0
- package/lib/private/terraform-dependables-aspect.js +95 -0
- package/lib/private/unique-resource-name.d.ts +9 -0
- package/lib/private/unique-resource-name.js +145 -0
- package/lib/size.d.ts +146 -0
- package/lib/size.js +220 -0
- package/lib/stack-base.d.ts +188 -0
- package/lib/stack-base.js +183 -0
- package/lib/token.d.ts +32 -0
- package/lib/token.js +54 -0
- package/node_modules/camel-case/LICENSE +21 -0
- package/node_modules/camel-case/README.md +47 -0
- package/node_modules/camel-case/dist/index.d.ts +5 -0
- package/node_modules/camel-case/dist/index.js +23 -0
- package/node_modules/camel-case/dist/index.js.map +1 -0
- package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
- package/node_modules/camel-case/dist/index.spec.js +26 -0
- package/node_modules/camel-case/dist/index.spec.js.map +1 -0
- package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
- package/node_modules/camel-case/dist.es2015/index.js +17 -0
- package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
- package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/camel-case/package.json +89 -0
- package/node_modules/capital-case/LICENSE +21 -0
- package/node_modules/capital-case/README.md +37 -0
- package/node_modules/capital-case/dist/index.d.ts +4 -0
- package/node_modules/capital-case/dist/index.js +16 -0
- package/node_modules/capital-case/dist/index.js.map +1 -0
- package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
- package/node_modules/capital-case/dist/index.spec.js +24 -0
- package/node_modules/capital-case/dist/index.spec.js.map +1 -0
- package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
- package/node_modules/capital-case/dist.es2015/index.js +11 -0
- package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
- package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/capital-case/package.json +90 -0
- package/node_modules/change-case/LICENSE +21 -0
- package/node_modules/change-case/README.md +44 -0
- package/node_modules/change-case/dist/index.d.ts +11 -0
- package/node_modules/change-case/dist/index.js +15 -0
- package/node_modules/change-case/dist/index.js.map +1 -0
- package/node_modules/change-case/dist/index.spec.d.ts +1 -0
- package/node_modules/change-case/dist/index.spec.js +9 -0
- package/node_modules/change-case/dist/index.spec.js.map +1 -0
- package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
- package/node_modules/change-case/dist.es2015/index.js +12 -0
- package/node_modules/change-case/dist.es2015/index.js.map +1 -0
- package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
- package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/change-case/package.json +101 -0
- package/node_modules/constant-case/LICENSE +21 -0
- package/node_modules/constant-case/README.md +37 -0
- package/node_modules/constant-case/dist/index.d.ts +3 -0
- package/node_modules/constant-case/dist/index.js +12 -0
- package/node_modules/constant-case/dist/index.js.map +1 -0
- package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
- package/node_modules/constant-case/dist/index.spec.js +26 -0
- package/node_modules/constant-case/dist/index.spec.js.map +1 -0
- package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/constant-case/dist.es2015/index.js +8 -0
- package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
- package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/constant-case/package.json +90 -0
- package/node_modules/dot-case/LICENSE +21 -0
- package/node_modules/dot-case/README.md +37 -0
- package/node_modules/dot-case/dist/index.d.ts +3 -0
- package/node_modules/dot-case/dist/index.js +11 -0
- package/node_modules/dot-case/dist/index.js.map +1 -0
- package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
- package/node_modules/dot-case/dist/index.spec.js +26 -0
- package/node_modules/dot-case/dist/index.spec.js.map +1 -0
- package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/dot-case/dist.es2015/index.js +7 -0
- package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
- package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
- package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/dot-case/package.json +89 -0
- package/node_modules/esbuild-wasm/LICENSE.md +21 -0
- package/node_modules/esbuild-wasm/README.md +3 -0
- package/node_modules/esbuild-wasm/bin/esbuild +91 -0
- package/node_modules/esbuild-wasm/esbuild.wasm +0 -0
- package/node_modules/esbuild-wasm/esm/browser.d.ts +705 -0
- package/node_modules/esbuild-wasm/esm/browser.js +2370 -0
- package/node_modules/esbuild-wasm/esm/browser.min.js +20 -0
- package/node_modules/esbuild-wasm/lib/browser.d.ts +705 -0
- package/node_modules/esbuild-wasm/lib/browser.js +2415 -0
- package/node_modules/esbuild-wasm/lib/browser.min.js +22 -0
- package/node_modules/esbuild-wasm/lib/main.d.ts +705 -0
- package/node_modules/esbuild-wasm/lib/main.js +2051 -0
- package/node_modules/esbuild-wasm/package.json +19 -0
- package/node_modules/esbuild-wasm/wasm_exec.js +561 -0
- package/node_modules/esbuild-wasm/wasm_exec_node.js +39 -0
- package/node_modules/header-case/LICENSE +21 -0
- package/node_modules/header-case/README.md +37 -0
- package/node_modules/header-case/dist/index.d.ts +3 -0
- package/node_modules/header-case/dist/index.js +11 -0
- package/node_modules/header-case/dist/index.js.map +1 -0
- package/node_modules/header-case/dist/index.spec.d.ts +1 -0
- package/node_modules/header-case/dist/index.spec.js +24 -0
- package/node_modules/header-case/dist/index.spec.js.map +1 -0
- package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/header-case/dist.es2015/index.js +7 -0
- package/node_modules/header-case/dist.es2015/index.js.map +1 -0
- package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/header-case/package.json +89 -0
- package/node_modules/lower-case/LICENSE +21 -0
- package/node_modules/lower-case/README.md +35 -0
- package/node_modules/lower-case/dist/index.d.ts +8 -0
- package/node_modules/lower-case/dist/index.js +53 -0
- package/node_modules/lower-case/dist/index.js.map +1 -0
- package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
- package/node_modules/lower-case/dist/index.spec.js +36 -0
- package/node_modules/lower-case/dist/index.spec.js.map +1 -0
- package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
- package/node_modules/lower-case/dist.es2015/index.js +48 -0
- package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
- package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
- package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/lower-case/package.json +87 -0
- package/node_modules/mime-db/HISTORY.md +507 -0
- package/node_modules/mime-db/LICENSE +23 -0
- package/node_modules/mime-db/README.md +100 -0
- package/node_modules/mime-db/db.json +8519 -0
- package/node_modules/mime-db/index.js +12 -0
- package/node_modules/mime-db/package.json +60 -0
- package/node_modules/mime-types/HISTORY.md +397 -0
- package/node_modules/mime-types/LICENSE +23 -0
- package/node_modules/mime-types/README.md +113 -0
- package/node_modules/mime-types/index.js +188 -0
- package/node_modules/mime-types/package.json +44 -0
- package/node_modules/no-case/LICENSE +21 -0
- package/node_modules/no-case/README.md +37 -0
- package/node_modules/no-case/dist/index.d.ts +10 -0
- package/node_modules/no-case/dist/index.js +35 -0
- package/node_modules/no-case/dist/index.js.map +1 -0
- package/node_modules/no-case/dist/index.spec.d.ts +1 -0
- package/node_modules/no-case/dist/index.spec.js +59 -0
- package/node_modules/no-case/dist/index.spec.js.map +1 -0
- package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
- package/node_modules/no-case/dist.es2015/index.js +31 -0
- package/node_modules/no-case/dist.es2015/index.js.map +1 -0
- package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
- package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/no-case/package.json +85 -0
- package/node_modules/param-case/LICENSE +21 -0
- package/node_modules/param-case/README.md +37 -0
- package/node_modules/param-case/dist/index.d.ts +3 -0
- package/node_modules/param-case/dist/index.js +11 -0
- package/node_modules/param-case/dist/index.js.map +1 -0
- package/node_modules/param-case/dist/index.spec.d.ts +1 -0
- package/node_modules/param-case/dist/index.spec.js +24 -0
- package/node_modules/param-case/dist/index.spec.js.map +1 -0
- package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/param-case/dist.es2015/index.js +7 -0
- package/node_modules/param-case/dist.es2015/index.js.map +1 -0
- package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/param-case/package.json +91 -0
- package/node_modules/pascal-case/LICENSE +21 -0
- package/node_modules/pascal-case/README.md +47 -0
- package/node_modules/pascal-case/dist/index.d.ts +5 -0
- package/node_modules/pascal-case/dist/index.js +24 -0
- package/node_modules/pascal-case/dist/index.js.map +1 -0
- package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
- package/node_modules/pascal-case/dist/index.spec.js +25 -0
- package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
- package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
- package/node_modules/pascal-case/dist.es2015/index.js +18 -0
- package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
- package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/pascal-case/package.json +90 -0
- package/node_modules/path-case/LICENSE +21 -0
- package/node_modules/path-case/README.md +37 -0
- package/node_modules/path-case/dist/index.d.ts +3 -0
- package/node_modules/path-case/dist/index.js +11 -0
- package/node_modules/path-case/dist/index.js.map +1 -0
- package/node_modules/path-case/dist/index.spec.d.ts +1 -0
- package/node_modules/path-case/dist/index.spec.js +24 -0
- package/node_modules/path-case/dist/index.spec.js.map +1 -0
- package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/path-case/dist.es2015/index.js +7 -0
- package/node_modules/path-case/dist.es2015/index.js.map +1 -0
- package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/path-case/package.json +88 -0
- package/node_modules/sentence-case/LICENSE +21 -0
- package/node_modules/sentence-case/README.md +37 -0
- package/node_modules/sentence-case/dist/index.d.ts +4 -0
- package/node_modules/sentence-case/dist/index.js +19 -0
- package/node_modules/sentence-case/dist/index.js.map +1 -0
- package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
- package/node_modules/sentence-case/dist/index.spec.js +24 -0
- package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
- package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
- package/node_modules/sentence-case/dist.es2015/index.js +14 -0
- package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
- package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/sentence-case/package.json +89 -0
- package/node_modules/snake-case/LICENSE +21 -0
- package/node_modules/snake-case/README.md +37 -0
- package/node_modules/snake-case/dist/index.d.ts +3 -0
- package/node_modules/snake-case/dist/index.js +11 -0
- package/node_modules/snake-case/dist/index.js.map +1 -0
- package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
- package/node_modules/snake-case/dist/index.spec.js +25 -0
- package/node_modules/snake-case/dist/index.spec.js.map +1 -0
- package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
- package/node_modules/snake-case/dist.es2015/index.js +7 -0
- package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
- package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
- package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/snake-case/package.json +90 -0
- package/node_modules/tslib/CopyrightNotice.txt +15 -0
- package/node_modules/tslib/LICENSE.txt +12 -0
- package/node_modules/tslib/README.md +164 -0
- package/node_modules/tslib/SECURITY.md +41 -0
- package/node_modules/tslib/modules/index.d.ts +37 -0
- package/node_modules/tslib/modules/index.js +68 -0
- package/node_modules/tslib/modules/package.json +3 -0
- package/node_modules/tslib/package.json +47 -0
- package/node_modules/tslib/tslib.d.ts +453 -0
- package/node_modules/tslib/tslib.es6.html +1 -0
- package/node_modules/tslib/tslib.es6.js +374 -0
- package/node_modules/tslib/tslib.es6.mjs +373 -0
- package/node_modules/tslib/tslib.html +1 -0
- package/node_modules/tslib/tslib.js +424 -0
- package/node_modules/upper-case/README.md +34 -0
- package/node_modules/upper-case/dist/index.d.ts +8 -0
- package/node_modules/upper-case/dist/index.js +49 -0
- package/node_modules/upper-case/dist/index.js.map +1 -0
- package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
- package/node_modules/upper-case/dist/index.spec.js +34 -0
- package/node_modules/upper-case/dist/index.spec.js.map +1 -0
- package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
- package/node_modules/upper-case/dist.es2015/index.js +44 -0
- package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
- package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
- package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/upper-case/package.json +86 -0
- package/node_modules/upper-case-first/LICENSE +21 -0
- package/node_modules/upper-case-first/README.md +32 -0
- package/node_modules/upper-case-first/dist/index.d.ts +4 -0
- package/node_modules/upper-case-first/dist/index.js +11 -0
- package/node_modules/upper-case-first/dist/index.js.map +1 -0
- package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
- package/node_modules/upper-case-first/dist/index.spec.js +20 -0
- package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
- package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
- package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
- package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
- package/node_modules/upper-case-first/package.json +87 -0
- package/package.json +152 -0
- package/setup.js +2 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// IAM Statement merging
|
|
3
|
+
// copied from https://github.com/aws/aws-cdk/blob/v2.161.1/packages/aws-cdk-lib/aws-iam/lib/private/merge-statements.ts
|
|
4
|
+
//
|
|
5
|
+
// See https://github.com/aws/aws-cdk/blob/v2.161.1/packages/aws-cdk-lib/aws-iam/docs/policy-merging.als
|
|
6
|
+
// for a formal model of the logic implemented here.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.mergeStatements = void 0;
|
|
9
|
+
const comparable_principal_1 = require("./comparable-principal");
|
|
10
|
+
const policy_statement_1 = require("../policy-statement");
|
|
11
|
+
// import { LITERAL_STRING_KEY } from "../util";
|
|
12
|
+
/*
|
|
13
|
+
* Don't produce any merged statements larger than this.
|
|
14
|
+
*
|
|
15
|
+
* They will become impossible to divide across managed policies if we do,
|
|
16
|
+
* and this is the maximum size for User policies.
|
|
17
|
+
*/
|
|
18
|
+
const MAX_MERGE_SIZE = 2000;
|
|
19
|
+
/**
|
|
20
|
+
* Merge as many statements as possible to shrink the total policy doc, modifying the input array in place
|
|
21
|
+
*
|
|
22
|
+
* We compare and merge all pairs of statements (O(N^2) complexity), opportunistically
|
|
23
|
+
* merging them. This is not guaranteed to produce the optimal output, but it's probably
|
|
24
|
+
* Good Enough(tm). If it merges anything, it's at least going to produce a smaller output
|
|
25
|
+
* than the input.
|
|
26
|
+
*/
|
|
27
|
+
function mergeStatements(statements, options) {
|
|
28
|
+
const sizeOptions = (0, policy_statement_1.deriveEstimateSizeOptions)(options.scope);
|
|
29
|
+
const compStatements = statements.map(makeComparable);
|
|
30
|
+
const mergeFn = (options?.mergeIfCombinable ?? true) ? mergeIfCombinable : mergeIfEqual;
|
|
31
|
+
// Keep trying until nothing changes anymore
|
|
32
|
+
while (onePass()) {
|
|
33
|
+
/* again */
|
|
34
|
+
}
|
|
35
|
+
const mergedStatements = new Array();
|
|
36
|
+
const originsMap = new Map();
|
|
37
|
+
for (const comp of compStatements) {
|
|
38
|
+
const statement = renderComparable(comp);
|
|
39
|
+
mergedStatements.push(statement);
|
|
40
|
+
originsMap.set(statement, comp.originals);
|
|
41
|
+
}
|
|
42
|
+
return { mergedStatements, originsMap };
|
|
43
|
+
// Do one optimization pass, return 'true' if we merged anything
|
|
44
|
+
function onePass() {
|
|
45
|
+
let ret = false;
|
|
46
|
+
for (let i = 0; i < compStatements.length; i++) {
|
|
47
|
+
let j = i + 1;
|
|
48
|
+
while (j < compStatements.length) {
|
|
49
|
+
const merged = mergeFn(compStatements[i], compStatements[j], !!options.limitSize, sizeOptions);
|
|
50
|
+
if (merged) {
|
|
51
|
+
compStatements[i] = merged;
|
|
52
|
+
compStatements.splice(j, 1);
|
|
53
|
+
ret = true;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
j++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return ret;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.mergeStatements = mergeStatements;
|
|
64
|
+
/**
|
|
65
|
+
* Given two statements, return their merging (if possible)
|
|
66
|
+
*
|
|
67
|
+
* We can merge two statements if:
|
|
68
|
+
*
|
|
69
|
+
* - Their effects are the same
|
|
70
|
+
* - They don't have Sids (not really a hard requirement, but just a simplification and an escape hatch)
|
|
71
|
+
* - Their Conditions are the same
|
|
72
|
+
* - Their NotAction, NotResource and NotPrincipal sets are the same (empty sets is fine).
|
|
73
|
+
* - From their Action, Resource and Principal sets, 2 are subsets of each other
|
|
74
|
+
* (empty sets are fine).
|
|
75
|
+
*/
|
|
76
|
+
function mergeIfCombinable(a, b, limitSize, options) {
|
|
77
|
+
// Effects must be the same
|
|
78
|
+
if (a.statement.effect !== b.statement.effect) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// We don't merge Sids (for now)
|
|
82
|
+
if (a.statement.sid || b.statement.sid) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (a.conditionString !== b.conditionString) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!setEqual(a.statement.notActions, b.statement.notActions) ||
|
|
89
|
+
!setEqual(a.statement.notResources, b.statement.notResources) ||
|
|
90
|
+
!setEqualPrincipals(a.statement.notPrincipals, b.statement.notPrincipals)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// We can merge these statements if 2 out of the 3 sets of Action, Resource, Principal
|
|
94
|
+
// are the same.
|
|
95
|
+
const setsEqual = (setEqual(a.statement.actions, b.statement.actions) ? 1 : 0) +
|
|
96
|
+
(setEqual(a.statement.resources, b.statement.resources) ? 1 : 0) +
|
|
97
|
+
(setEqualPrincipals(a.statement.principals, b.statement.principals)
|
|
98
|
+
? 1
|
|
99
|
+
: 0);
|
|
100
|
+
if (setsEqual < 2 || unmergeablePrincipals(a, b)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const combined = a.statement.copy({
|
|
104
|
+
actions: setMerge(a.statement.actions, b.statement.actions),
|
|
105
|
+
resources: setMerge(a.statement.resources, b.statement.resources),
|
|
106
|
+
principals: setMergePrincipals(a.statement.principals, b.statement.principals),
|
|
107
|
+
});
|
|
108
|
+
if (limitSize && combined._estimateSize(options) > MAX_MERGE_SIZE) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
originals: [...a.originals, ...b.originals],
|
|
113
|
+
statement: combined,
|
|
114
|
+
conditionString: a.conditionString,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* We merge two statements only if they are exactly the same
|
|
119
|
+
*/
|
|
120
|
+
function mergeIfEqual(a, b) {
|
|
121
|
+
if (a.statement.effect !== b.statement.effect) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (a.statement.sid !== b.statement.sid) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (a.conditionString !== b.conditionString) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (!setEqual(a.statement.notActions, b.statement.notActions) ||
|
|
131
|
+
!setEqual(a.statement.notResources, b.statement.notResources) ||
|
|
132
|
+
!setEqualPrincipals(a.statement.notPrincipals, b.statement.notPrincipals)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!setEqual(a.statement.actions, b.statement.actions) ||
|
|
136
|
+
!setEqual(a.statement.resources, b.statement.resources) ||
|
|
137
|
+
!setEqualPrincipals(a.statement.principals, b.statement.principals)) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
originals: [...a.originals, ...b.originals],
|
|
142
|
+
statement: a.statement,
|
|
143
|
+
conditionString: a.conditionString,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Calculate and return cached string set representation of the statement elements
|
|
148
|
+
*
|
|
149
|
+
* This is to be able to do comparisons on these sets quickly.
|
|
150
|
+
*/
|
|
151
|
+
function makeComparable(s) {
|
|
152
|
+
return {
|
|
153
|
+
originals: [s],
|
|
154
|
+
statement: s,
|
|
155
|
+
...(s.conditions
|
|
156
|
+
? {
|
|
157
|
+
conditionString: JSON.stringify((0, policy_statement_1.toConditionJson)(...s.conditions)),
|
|
158
|
+
}
|
|
159
|
+
: {}),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Return 'true' if the two principals are unmergeable
|
|
164
|
+
*
|
|
165
|
+
* This only happens if one of them is a literal, untyped principal (typically,
|
|
166
|
+
* `Principal: '*'`) and the other one is typed.
|
|
167
|
+
*
|
|
168
|
+
* `Principal: '*'` behaves subtly different than `Principal: { AWS: '*' }` and must
|
|
169
|
+
* therefore be preserved.
|
|
170
|
+
*/
|
|
171
|
+
function unmergeablePrincipals(a, b) {
|
|
172
|
+
const aHasStarPrincipal = a.statement.principals.some((v) => typeof v.policyFragment.principalJson === "string" &&
|
|
173
|
+
v.policyFragment.principalJson == "*");
|
|
174
|
+
const bHasLiteral = b.statement.principals.some((v) => typeof v.policyFragment.principalJson === "string" &&
|
|
175
|
+
v.policyFragment.principalJson == "*");
|
|
176
|
+
return aHasStarPrincipal !== bHasLiteral;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Turn a ComparableStatement back into a Statement
|
|
180
|
+
*/
|
|
181
|
+
function renderComparable(s) {
|
|
182
|
+
return s.statement;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Whether the given sets are equal
|
|
186
|
+
*/
|
|
187
|
+
function setEqual(a, b) {
|
|
188
|
+
const bSet = new Set(b);
|
|
189
|
+
return a.length === b.length && a.every((k) => bSet.has(k));
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Merge two value sets
|
|
193
|
+
*/
|
|
194
|
+
function setMerge(x, y) {
|
|
195
|
+
return Array.from(new Set([...x, ...y])).sort();
|
|
196
|
+
}
|
|
197
|
+
function setEqualPrincipals(xs, ys) {
|
|
198
|
+
const xPrincipals = (0, comparable_principal_1.partitionPrincipals)(xs);
|
|
199
|
+
const yPrincipals = (0, comparable_principal_1.partitionPrincipals)(ys);
|
|
200
|
+
const nonComp = setEqual(xPrincipals.nonComparable, yPrincipals.nonComparable);
|
|
201
|
+
const comp = setEqual(Object.keys(xPrincipals.comparable), Object.keys(yPrincipals.comparable));
|
|
202
|
+
return nonComp && comp;
|
|
203
|
+
}
|
|
204
|
+
function setMergePrincipals(xs, ys) {
|
|
205
|
+
const xPrincipals = (0, comparable_principal_1.partitionPrincipals)(xs);
|
|
206
|
+
const yPrincipals = (0, comparable_principal_1.partitionPrincipals)(ys);
|
|
207
|
+
const comparable = { ...xPrincipals.comparable, ...yPrincipals.comparable };
|
|
208
|
+
return [
|
|
209
|
+
...Object.values(comparable),
|
|
210
|
+
...xPrincipals.nonComparable,
|
|
211
|
+
...yPrincipals.nonComparable,
|
|
212
|
+
];
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2Utc3RhdGVtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaWFtL3ByaXZhdGUvbWVyZ2Utc3RhdGVtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsd0JBQXdCO0FBQ3hCLHdIQUF3SDtBQUN4SCxFQUFFO0FBQ0Ysd0dBQXdHO0FBQ3hHLG9EQUFvRDs7O0FBR3BELGlFQUE2RDtBQUM3RCwwREFLNkI7QUFFN0IsZ0RBQWdEO0FBRWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBNEI1Qjs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixVQUE2QixFQUM3QixPQUE4QjtJQUU5QixNQUFNLFdBQVcsR0FBRyxJQUFBLDRDQUF5QixFQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUNYLENBQUMsT0FBTyxFQUFFLGlCQUFpQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRTFFLDRDQUE0QztJQUM1QyxPQUFPLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDakIsV0FBVztJQUNiLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksS0FBSyxFQUFtQixDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO0lBQ2pFLEtBQUssTUFBTSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUks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LFVBQVUsQ0FBQztRQUM1QixHQUFHLFdBQVcsQ0FBQyxhQUFhO1FBQzVCLEdBQUcsV0FBVyxDQUFDLGFBQWE7S0FDN0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJQU0gU3RhdGVtZW50IG1lcmdpbmdcbi8vIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE2MS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1pYW0vbGliL3ByaXZhdGUvbWVyZ2Utc3RhdGVtZW50cy50c1xuLy9cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNjEuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtaWFtL2RvY3MvcG9saWN5LW1lcmdpbmcuYWxzXG4vLyBmb3IgYSBmb3JtYWwgbW9kZWwgb2YgdGhlIGxvZ2ljIGltcGxlbWVudGVkIGhlcmUuXG5cbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgcGFydGl0aW9uUHJpbmNpcGFscyB9IGZyb20gXCIuL2NvbXBhcmFibGUtcHJpbmNpcGFsXCI7XG5pbXBvcnQge1xuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIEVzdGltYXRlU2l6ZU9wdGlvbnMsXG4gIGRlcml2ZUVzdGltYXRlU2l6ZU9wdGlvbnMsXG4gIHRvQ29uZGl0aW9uSnNvbixcbn0gZnJvbSBcIi4uL3BvbGljeS1zdGF0ZW1lbnRcIjtcbmltcG9ydCB7IElQcmluY2lwYWwgfSBmcm9tIFwiLi4vcHJpbmNpcGFsc1wiO1xuLy8gaW1wb3J0IHsgTElURVJBTF9TVFJJTkdfS0VZIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuLypcbiAqIERvbid0IHByb2R1Y2UgYW55IG1lcmdlZCBzdGF0ZW1lbnRzIGxhcmdlciB0aGFuIHRoaXMuXG4gKlxuICogVGhleSB3aWxsIGJlY29tZSBpbXBvc3NpYmxlIHRvIGRpdmlkZSBhY3Jvc3MgbWFuYWdlZCBwb2xpY2llcyBpZiB3ZSBkbyxcbiAqIGFuZCB0aGlzIGlzIHRoZSBtYXhpbXVtIHNpemUgZm9yIFVzZXIgcG9saWNpZXMuXG4gKi9cbmNvbnN0IE1BWF9NRVJHRV9TSVpFID0gMjAwMDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgbWVyZ2VTdGF0ZW1lbnQgY29tbWFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lcmdlU3RhdGVtZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTY29wZSB0byBkZXJpdmUgY29uZmlndXJhdGlvbiBmbGFncyBmcm9tXG4gICAqL1xuICByZWFkb25seSBzY29wZTogSUNvbnN0cnVjdDtcblxuICAvKipcbiAgICogRG8gbm90IG1lcmdlIHN0YXRlbWVudHMgaWYgdGhlIHJlc3VsdCB3b3VsZCBiZSBiaWdnZXIgdGhhbiBNQVhfTUVSR0VfU0laRVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRTaXplPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWVyZ2Ugc3RhdGVtZW50cyBpZiB0aGV5IGNhbiBiZSBjb21iaW5lZCB0byBwcm9kdWNlIHRoZSBzYW1lIGVmZmVjdHMuXG4gICAqXG4gICAqIElmIGZhbHNlLCBzdGF0ZW1lbnRzIGFyZSBvbmx5IG1lcmdlZCBpZiB0aGV5IGFyZSBleGFjdGx5IGVxdWFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtZXJnZUlmQ29tYmluYWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWVyZ2UgYXMgbWFueSBzdGF0ZW1lbnRzIGFzIHBvc3NpYmxlIHRvIHNocmluayB0aGUgdG90YWwgcG9saWN5IGRvYywgbW9kaWZ5aW5nIHRoZSBpbnB1dCBhcnJheSBpbiBwbGFjZVxuICpcbiAqIFdlIGNvbXBhcmUgYW5kIG1lcmdlIGFsbCBwYWlycyBvZiBzdGF0ZW1lbnRzIChPKE5eMikgY29tcGxleGl0eSksIG9wcG9ydHVuaXN0aWNhbGx5XG4gKiBtZXJnaW5nIHRoZW0uIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSB0aGUgb3B0aW1hbCBvdXRwdXQsIGJ1dCBpdCdzIHByb2JhYmx5XG4gKiBHb29kIEVub3VnaCh0bSkuIElmIGl0IG1lcmdlcyBhbnl0aGluZywgaXQncyBhdCBsZWFzdCBnb2luZyB0byBwcm9kdWNlIGEgc21hbGxlciBvdXRwdXRcbiAqIHRoYW4gdGhlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTdGF0ZW1lbnRzKFxuICBzdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSxcbiAgb3B0aW9uczogTWVyZ2VTdGF0ZW1lbnRPcHRpb25zLFxuKTogTWVyZ2VTdGF0ZW1lbnRSZXN1bHQge1xuICBjb25zdCBzaXplT3B0aW9ucyA9IGRlcml2ZUVzdGltYXRlU2l6ZU9wdGlvbnMob3B0aW9ucy5zY29wZSk7XG4gIGNvbnN0IGNvbXBTdGF0ZW1lbnRzID0gc3RhdGVtZW50cy5tYXAobWFrZUNvbXBhcmFibGUpO1xuICBjb25zdCBtZXJnZUZuID1cbiAgICAob3B0aW9ucz8ubWVyZ2VJZkNvbWJpbmFibGUgPz8gdHJ1ZSkgPyBtZXJnZUlmQ29tYmluYWJsZSA6IG1lcmdlSWZFcXVhbDtcblxuICAvLyBLZWVwIHRyeWluZyB1bnRpbCBub3RoaW5nIGNoYW5nZXMgYW55bW9yZVxuICB3aGlsZSAob25lUGFzcygpKSB7XG4gICAgLyogYWdhaW4gKi9cbiAgfVxuXG4gIGNvbnN0IG1lcmdlZFN0YXRlbWVudHMgPSBuZXcgQXJyYXk8UG9saWN5U3RhdGVtZW50PigpO1xuICBjb25zdCBvcmlnaW5zTWFwID0gbmV3IE1hcDxQb2xpY3lTdGF0ZW1lbnQsIFBvbGljeVN0YXRlbWVudFtdPigpO1xuICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcFN0YXRlbWVudHMpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSByZW5kZXJDb21wYXJhYmxlKGNvbXApO1xuICAgIG1lcmdlZFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIG9yaWdpbnNNYXAuc2V0KHN0YXRlbWVudCwgY29tcC5vcmlnaW5hbHMpO1xuICB9XG5cbiAgcmV0dXJuIHsgbWVyZ2VkU3RhdGVtZW50cywgb3JpZ2luc01hcCB9O1xuXG4gIC8vIERvIG9uZSBvcHRpbWl6YXRpb24gcGFzcywgcmV0dXJuICd0cnVlJyBpZiB3ZSBtZXJnZWQgYW55dGhpbmdcbiAgZnVuY3Rpb24gb25lUGFzcygpIHtcbiAgICBsZXQgcmV0ID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBTdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaiA9IGkgKyAxO1xuICAgICAgd2hpbGUgKGogPCBjb21wU3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VGbihcbiAgICAgICAgICBjb21wU3RhdGVtZW50c1tpXSxcbiAgICAgICAgICBjb21wU3RhdGVtZW50c1tqXSxcbiAgICAgICAgICAhIW9wdGlvbnMubGltaXRTaXplLFxuICAgICAgICAgIHNpemVPcHRpb25zLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICBjb21wU3RhdGVtZW50c1tpXSA9IG1lcmdlZDtcbiAgICAgICAgICBjb21wU3RhdGVtZW50cy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgcmV0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VTdGF0ZW1lbnRSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgbWF4aW1hbGx5IG1lcmdlZCBzdGF0ZW1lbnRzXG4gICAqL1xuICByZWFkb25seSBtZXJnZWRTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXTtcblxuICAvKipcbiAgICogTWFwcGluZyBvZiBvbGQgdG8gbmV3IHN0YXRlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbnNNYXA6IE1hcDxQb2xpY3lTdGF0ZW1lbnQsIFBvbGljeVN0YXRlbWVudFtdPjtcbn1cblxuLyoqXG4gKiBHaXZlbiB0d28gc3RhdGVtZW50cywgcmV0dXJuIHRoZWlyIG1lcmdpbmcgKGlmIHBvc3NpYmxlKVxuICpcbiAqIFdlIGNhbiBtZXJnZSB0d28gc3RhdGVtZW50cyBpZjpcbiAqXG4gKiAtIFRoZWlyIGVmZmVjdHMgYXJlIHRoZSBzYW1lXG4gKiAtIFRoZXkgZG9uJ3QgaGF2ZSBTaWRzIChub3QgcmVhbGx5IGEgaGFyZCByZXF1aXJlbWVudCwgYnV0IGp1c3QgYSBzaW1wbGlmaWNhdGlvbiBhbmQgYW4gZXNjYXBlIGhhdGNoKVxuICogLSBUaGVpciBDb25kaXRpb25zIGFyZSB0aGUgc2FtZVxuICogLSBUaGVpciBOb3RBY3Rpb24sIE5vdFJlc291cmNlIGFuZCBOb3RQcmluY2lwYWwgc2V0cyBhcmUgdGhlIHNhbWUgKGVtcHR5IHNldHMgaXMgZmluZSkuXG4gKiAtIEZyb20gdGhlaXIgQWN0aW9uLCBSZXNvdXJjZSBhbmQgUHJpbmNpcGFsIHNldHMsIDIgYXJlIHN1YnNldHMgb2YgZWFjaCBvdGhlclxuICogICAoZW1wdHkgc2V0cyBhcmUgZmluZSkuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSWZDb21iaW5hYmxlKFxuICBhOiBDb21wYXJhYmxlU3RhdGVtZW50LFxuICBiOiBDb21wYXJhYmxlU3RhdGVtZW50LFxuICBsaW1pdFNpemU6IGJvb2xlYW4sXG4gIG9wdGlvbnM6IEVzdGltYXRlU2l6ZU9wdGlvbnMsXG4pOiBDb21wYXJhYmxlU3RhdGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgLy8gRWZmZWN0cyBtdXN0IGJlIHRoZSBzYW1lXG4gIGlmIChhLnN0YXRlbWVudC5lZmZlY3QgIT09IGIuc3RhdGVtZW50LmVmZmVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBXZSBkb24ndCBtZXJnZSBTaWRzIChmb3Igbm93KVxuICBpZiAoYS5zdGF0ZW1lbnQuc2lkIHx8IGIuc3RhdGVtZW50LnNpZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhLmNvbmRpdGlvblN0cmluZyAhPT0gYi5jb25kaXRpb25TdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgICFzZXRFcXVhbChhLnN0YXRlbWVudC5ub3RBY3Rpb25zLCBiLnN0YXRlbWVudC5ub3RBY3Rpb25zKSB8fFxuICAgICFzZXRFcXVhbChhLnN0YXRlbWVudC5ub3RSZXNvdXJjZXMsIGIuc3RhdGVtZW50Lm5vdFJlc291cmNlcykgfHxcbiAgICAhc2V0RXF1YWxQcmluY2lwYWxzKGEuc3RhdGVtZW50Lm5vdFByaW5jaXBhbHMsIGIuc3RhdGVtZW50Lm5vdFByaW5jaXBhbHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIGNhbiBtZXJnZSB0aGVzZSBzdGF0ZW1lbnRzIGlmIDIgb3V0IG9mIHRoZSAzIHNldHMgb2YgQWN0aW9uLCBSZXNvdXJjZSwgUHJpbmNpcGFsXG4gIC8vIGFyZSB0aGUgc2FtZS5cbiAgY29uc3Qgc2V0c0VxdWFsID1cbiAgICAoc2V0RXF1YWwoYS5zdGF0ZW1lbnQuYWN0aW9ucywgYi5zdGF0ZW1lbnQuYWN0aW9ucykgPyAxIDogMCkgK1xuICAgIChzZXRFcXVhbChhLnN0YXRlbWVudC5yZXNvdXJjZXMsIGIuc3RhdGVtZW50LnJlc291cmNlcykgPyAxIDogMCkgK1xuICAgIChzZXRFcXVhbFByaW5jaXBhbHMoYS5zdGF0ZW1lbnQucHJpbmNpcGFscywgYi5zdGF0ZW1lbnQucHJpbmNpcGFscylcbiAgICAgID8gMVxuICAgICAgOiAwKTtcblxuICBpZiAoc2V0c0VxdWFsIDwgMiB8fCB1bm1lcmdlYWJsZVByaW5jaXBhbHMoYSwgYikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb21iaW5lZCA9IGEuc3RhdGVtZW50LmNvcHkoe1xuICAgIGFjdGlvbnM6IHNldE1lcmdlKGEuc3RhdGVtZW50LmFjdGlvbnMsIGIuc3RhdGVtZW50LmFjdGlvbnMpLFxuICAgIHJlc291cmNlczogc2V0TWVyZ2UoYS5zdGF0ZW1lbnQucmVzb3VyY2VzLCBiLnN0YXRlbWVudC5yZXNvdXJjZXMpLFxuICAgIHByaW5jaXBhbHM6IHNldE1lcmdlUHJpbmNpcGFscyhcbiAgICAgIGEuc3RhdGVtZW50LnByaW5jaXBhbHMsXG4gICAgICBiLnN0YXRlbWVudC5wcmluY2lwYWxzLFxuICAgICksXG4gIH0pO1xuXG4gIGlmIChsaW1pdFNpemUgJiYgY29tYmluZWQuX2VzdGltYXRlU2l6ZShvcHRpb25zKSA+IE1BWF9NRVJHRV9TSVpFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3JpZ2luYWxzOiBbLi4uYS5vcmlnaW5hbHMsIC4uLmIub3JpZ2luYWxzXSxcbiAgICBzdGF0ZW1lbnQ6IGNvbWJpbmVkLFxuICAgIGNvbmRpdGlvblN0cmluZzogYS5jb25kaXRpb25TdHJpbmcsXG4gIH07XG59XG5cbi8qKlxuICogV2UgbWVyZ2UgdHdvIHN0YXRlbWVudHMgb25seSBpZiB0aGV5IGFyZSBleGFjdGx5IHRoZSBzYW1lXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSWZFcXVhbChcbiAgYTogQ29tcGFyYWJsZVN0YXRlbWVudCxcbiAgYjogQ29tcGFyYWJsZVN0YXRlbWVudCxcbik6IENvbXBhcmFibGVTdGF0ZW1lbnQgfCB1bmRlZmluZWQge1xuICBpZiAoYS5zdGF0ZW1lbnQuZWZmZWN0ICE9PSBiLnN0YXRlbWVudC5lZmZlY3QpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGEuc3RhdGVtZW50LnNpZCAhPT0gYi5zdGF0ZW1lbnQuc2lkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChhLmNvbmRpdGlvblN0cmluZyAhPT0gYi5jb25kaXRpb25TdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKFxuICAgICFzZXRFcXVhbChhLnN0YXRlbWVudC5ub3RBY3Rpb25zLCBiLnN0YXRlbWVudC5ub3RBY3Rpb25zKSB8fFxuICAgICFzZXRFcXVhbChhLnN0YXRlbWVudC5ub3RSZXNvdXJjZXMsIGIuc3RhdGVtZW50Lm5vdFJlc291cmNlcykgfHxcbiAgICAhc2V0RXF1YWxQcmluY2lwYWxzKGEuc3RhdGVtZW50Lm5vdFByaW5jaXBhbHMsIGIuc3RhdGVtZW50Lm5vdFByaW5jaXBhbHMpXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoXG4gICAgIXNldEVxdWFsKGEuc3RhdGVtZW50LmFjdGlvbnMsIGIuc3RhdGVtZW50LmFjdGlvbnMpIHx8XG4gICAgIXNldEVxdWFsKGEuc3RhdGVtZW50LnJlc291cmNlcywgYi5zdGF0ZW1lbnQucmVzb3VyY2VzKSB8fFxuICAgICFzZXRFcXVhbFByaW5jaXBhbHMoYS5zdGF0ZW1lbnQucHJpbmNpcGFscywgYi5zdGF0ZW1lbnQucHJpbmNpcGFscylcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcmlnaW5hbHM6IFsuLi5hLm9yaWdpbmFscywgLi4uYi5vcmlnaW5hbHNdLFxuICAgIHN0YXRlbWVudDogYS5zdGF0ZW1lbnQsXG4gICAgY29uZGl0aW9uU3RyaW5nOiBhLmNvbmRpdGlvblN0cmluZyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgYW5kIHJldHVybiBjYWNoZWQgc3RyaW5nIHNldCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGVtZW50IGVsZW1lbnRzXG4gKlxuICogVGhpcyBpcyB0byBiZSBhYmxlIHRvIGRvIGNvbXBhcmlzb25zIG9uIHRoZXNlIHNldHMgcXVpY2tseS5cbiAqL1xuZnVuY3Rpb24gbWFrZUNvbXBhcmFibGUoczogUG9saWN5U3RhdGVtZW50KTogQ29tcGFyYWJsZVN0YXRlbWVudCB7XG4gIHJldHVybiB7XG4gICAgb3JpZ2luYWxzOiBbc10sXG4gICAgc3RhdGVtZW50OiBzLFxuICAgIC4uLihzLmNvbmRpdGlvbnNcbiAgICAgID8ge1xuICAgICAgICAgIGNvbmRpdGlvblN0cmluZzogSlNPTi5zdHJpbmdpZnkodG9Db25kaXRpb25Kc29uKC4uLnMuY29uZGl0aW9ucykpLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gJ3RydWUnIGlmIHRoZSB0d28gcHJpbmNpcGFscyBhcmUgdW5tZXJnZWFibGVcbiAqXG4gKiBUaGlzIG9ubHkgaGFwcGVucyBpZiBvbmUgb2YgdGhlbSBpcyBhIGxpdGVyYWwsIHVudHlwZWQgcHJpbmNpcGFsICh0eXBpY2FsbHksXG4gKiBgUHJpbmNpcGFsOiAnKidgKSBhbmQgdGhlIG90aGVyIG9uZSBpcyB0eXBlZC5cbiAqXG4gKiBgUHJpbmNpcGFsOiAnKidgIGJlaGF2ZXMgc3VidGx5IGRpZmZlcmVudCB0aGFuIGBQcmluY2lwYWw6IHsgQVdTOiAnKicgfWAgYW5kIG11c3RcbiAqIHRoZXJlZm9yZSBiZSBwcmVzZXJ2ZWQuXG4gKi9cbmZ1bmN0aW9uIHVubWVyZ2VhYmxlUHJpbmNpcGFscyhhOiBDb21wYXJhYmxlU3RhdGVtZW50LCBiOiBDb21wYXJhYmxlU3RhdGVtZW50KSB7XG4gIGNvbnN0IGFIYXNTdGFyUHJpbmNpcGFsID0gYS5zdGF0ZW1lbnQucHJpbmNpcGFscy5zb21lKFxuICAgICh2KSA9PlxuICAgICAgdHlwZW9mIHYucG9saWN5RnJhZ21lbnQucHJpbmNpcGFsSnNvbiA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgdi5wb2xpY3lGcmFnbWVudC5wcmluY2lwYWxKc29uID09IFwiKlwiLFxuICApO1xuICBjb25zdCBiSGFzTGl0ZXJhbCA9IGIuc3RhdGVtZW50LnByaW5jaXBhbHMuc29tZShcbiAgICAodikgPT5cbiAgICAgIHR5cGVvZiB2LnBvbGljeUZyYWdtZW50LnByaW5jaXBhbEpzb24gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHYucG9saWN5RnJhZ21lbnQucHJpbmNpcGFsSnNvbiA9PSBcIipcIixcbiAgKTtcbiAgcmV0dXJuIGFIYXNTdGFyUHJpbmNpcGFsICE9PSBiSGFzTGl0ZXJhbDtcbn1cblxuLyoqXG4gKiBUdXJuIGEgQ29tcGFyYWJsZVN0YXRlbWVudCBiYWNrIGludG8gYSBTdGF0ZW1lbnRcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcGFyYWJsZShzOiBDb21wYXJhYmxlU3RhdGVtZW50KTogUG9saWN5U3RhdGVtZW50IHtcbiAgcmV0dXJuIHMuc3RhdGVtZW50O1xufVxuXG4vKipcbiAqIEFuIGFuYWx5emVkIHZlcnNpb24gb2YgYSBzdGF0ZW1lbnQgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gZG8gY29tcGFyaXNvbnMgYW5kIG1lcmdpbmcgb25cbiAqL1xuaW50ZXJmYWNlIENvbXBhcmFibGVTdGF0ZW1lbnQge1xuICByZWFkb25seSBzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudDtcbiAgcmVhZG9ubHkgb3JpZ2luYWxzOiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgcmVhZG9ubHkgY29uZGl0aW9uU3RyaW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGdpdmVuIHNldHMgYXJlIGVxdWFsXG4gKi9cbmZ1bmN0aW9uIHNldEVxdWFsPEE+KGE6IEFbXSwgYjogQVtdKSB7XG4gIGNvbnN0IGJTZXQgPSBuZXcgU2V0KGIpO1xuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKGspID0+IGJTZXQuaGFzKGspKTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gdmFsdWUgc2V0c1xuICovXG5mdW5jdGlvbiBzZXRNZXJnZTxBPih4OiBBW10sIHk6IEFbXSk6IEFbXSB7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLngsIC4uLnldKSkuc29ydCgpO1xufVxuXG5mdW5jdGlvbiBzZXRFcXVhbFByaW5jaXBhbHMoeHM6IElQcmluY2lwYWxbXSwgeXM6IElQcmluY2lwYWxbXSk6IGJvb2xlYW4ge1xuICBjb25zdCB4UHJpbmNpcGFscyA9IHBhcnRpdGlvblByaW5jaXBhbHMoeHMpO1xuICBjb25zdCB5UHJpbmNpcGFscyA9IHBhcnRpdGlvblByaW5jaXBhbHMoeXMpO1xuXG4gIGNvbnN0IG5vbkNvbXAgPSBzZXRFcXVhbChcbiAgICB4UHJpbmNpcGFscy5ub25Db21wYXJhYmxlLFxuICAgIHlQcmluY2lwYWxzLm5vbkNvbXBhcmFibGUsXG4gICk7XG4gIGNvbnN0IGNvbXAgPSBzZXRFcXVhbChcbiAgICBPYmplY3Qua2V5cyh4UHJpbmNpcGFscy5jb21wYXJhYmxlKSxcbiAgICBPYmplY3Qua2V5cyh5UHJpbmNpcGFscy5jb21wYXJhYmxlKSxcbiAgKTtcblxuICByZXR1cm4gbm9uQ29tcCAmJiBjb21wO1xufVxuXG5mdW5jdGlvbiBzZXRNZXJnZVByaW5jaXBhbHMoeHM6IElQcmluY2lwYWxbXSwgeXM6IElQcmluY2lwYWxbXSk6IElQcmluY2lwYWxbXSB7XG4gIGNvbnN0IHhQcmluY2lwYWxzID0gcGFydGl0aW9uUHJpbmNpcGFscyh4cyk7XG4gIGNvbnN0IHlQcmluY2lwYWxzID0gcGFydGl0aW9uUHJpbmNpcGFscyh5cyk7XG5cbiAgY29uc3QgY29tcGFyYWJsZSA9IHsgLi4ueFByaW5jaXBhbHMuY29tcGFyYWJsZSwgLi4ueVByaW5jaXBhbHMuY29tcGFyYWJsZSB9O1xuICByZXR1cm4gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoY29tcGFyYWJsZSksXG4gICAgLi4ueFByaW5jaXBhbHMubm9uQ29tcGFyYWJsZSxcbiAgICAuLi55UHJpbmNpcGFscy5ub25Db21wYXJhYmxlLFxuICBdO1xufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IPostProcessor, IResolveContext } from "cdktf";
|
|
2
|
+
/**
|
|
3
|
+
* A Token postprocesser for policy documents
|
|
4
|
+
*
|
|
5
|
+
* Removes duplicate statements, and assign Sids if necessary
|
|
6
|
+
*
|
|
7
|
+
* Because policy documents can contain all kinds of crazy things,
|
|
8
|
+
* we do all the necessary work here after the document has been mostly resolved
|
|
9
|
+
* into a predictable Terraform form.
|
|
10
|
+
*/
|
|
11
|
+
export declare class PostProcessPolicyDocument implements IPostProcessor {
|
|
12
|
+
private readonly autoAssignSids;
|
|
13
|
+
constructor(autoAssignSids: boolean);
|
|
14
|
+
postProcess(input: any, _context: IResolveContext): any;
|
|
15
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostProcessPolicyDocument = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A Token postprocesser for policy documents
|
|
6
|
+
*
|
|
7
|
+
* Removes duplicate statements, and assign Sids if necessary
|
|
8
|
+
*
|
|
9
|
+
* Because policy documents can contain all kinds of crazy things,
|
|
10
|
+
* we do all the necessary work here after the document has been mostly resolved
|
|
11
|
+
* into a predictable Terraform form.
|
|
12
|
+
*/
|
|
13
|
+
class PostProcessPolicyDocument {
|
|
14
|
+
constructor(autoAssignSids) {
|
|
15
|
+
this.autoAssignSids = autoAssignSids;
|
|
16
|
+
}
|
|
17
|
+
// this is called with an array of statements
|
|
18
|
+
postProcess(input, _context) {
|
|
19
|
+
if (!input || !Array.isArray(input)) {
|
|
20
|
+
return input;
|
|
21
|
+
}
|
|
22
|
+
// Also remove full-on duplicates (this will not be necessary if
|
|
23
|
+
// we minimized, but it might still dedupe statements we didn't
|
|
24
|
+
// minimize like if they contained tokens, and definitely is still necessary
|
|
25
|
+
// if we didn't minimize)
|
|
26
|
+
const jsonStatements = new Set();
|
|
27
|
+
const uniqueStatements = [];
|
|
28
|
+
for (const statement of input) {
|
|
29
|
+
const jsonStatement = JSON.stringify(statement);
|
|
30
|
+
if (!jsonStatements.has(jsonStatement)) {
|
|
31
|
+
uniqueStatements.push(statement);
|
|
32
|
+
jsonStatements.add(jsonStatement);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// assign unique SIDs (the statement index) if `autoAssignSids` is enabled
|
|
36
|
+
const statements = uniqueStatements.map((s, i) => {
|
|
37
|
+
if (this.autoAssignSids && !s.sid) {
|
|
38
|
+
s.sid = i.toString();
|
|
39
|
+
}
|
|
40
|
+
// TODO: re-add sorting support
|
|
41
|
+
// ref: https://github.com/aws/aws-cdk/tree/v2.161.1/packages/aws-cdk-lib/aws-iam/lib/private/postprocess-policy-document.ts
|
|
42
|
+
// if (this.sort) {
|
|
43
|
+
// // Don't act on the values if they are 'undefined'
|
|
44
|
+
// s = s.copy({
|
|
45
|
+
// sid: s.sid,
|
|
46
|
+
// actions: s.actions ? sortByJson(s.actions) : undefined,
|
|
47
|
+
// resources: s.resources ? sortByJson(s.resources) : undefined,
|
|
48
|
+
// condition: s.conditions,
|
|
49
|
+
// effect: s.effect,
|
|
50
|
+
// notActions: s.notActions,
|
|
51
|
+
// notResources: s.notResources,
|
|
52
|
+
// principals: s.principals ? sortPrincipals(s.principals) : undefined,
|
|
53
|
+
// notPrincipals: s.notPrincipals,
|
|
54
|
+
// }
|
|
55
|
+
// }
|
|
56
|
+
return s;
|
|
57
|
+
});
|
|
58
|
+
return statements;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.PostProcessPolicyDocument = PostProcessPolicyDocument;
|
|
62
|
+
// function noUndef(x: any): any {
|
|
63
|
+
// const ret: any = {};
|
|
64
|
+
// for (const [key, value] of Object.entries(x)) {
|
|
65
|
+
// if (value !== undefined) {
|
|
66
|
+
// ret[key] = value;
|
|
67
|
+
// }
|
|
68
|
+
// }
|
|
69
|
+
// return ret;
|
|
70
|
+
// }
|
|
71
|
+
// function sortPrincipals<A>(
|
|
72
|
+
// xs?: string | string[] | Record<string, A | A[]>,
|
|
73
|
+
// ): typeof xs {
|
|
74
|
+
// if (!xs || Array.isArray(xs) || typeof xs !== "object") {
|
|
75
|
+
// return xs;
|
|
76
|
+
// }
|
|
77
|
+
// const ret: NonNullable<typeof xs> = {};
|
|
78
|
+
// for (const k of Object.keys(xs).sort()) {
|
|
79
|
+
// ret[k] = sortByJson(xs[k]);
|
|
80
|
+
// }
|
|
81
|
+
// return ret;
|
|
82
|
+
// }
|
|
83
|
+
// /**
|
|
84
|
+
// * Sort the values in the list by the JSON representation, removing duplicates.
|
|
85
|
+
// *
|
|
86
|
+
// * Mutates in place AND returns the mutated list.
|
|
87
|
+
// */
|
|
88
|
+
// function sortByJson<B, A extends B | B[] | undefined>(xs: A): A {
|
|
89
|
+
// if (!Array.isArray(xs)) {
|
|
90
|
+
// return xs;
|
|
91
|
+
// }
|
|
92
|
+
// const intermediate = new Map<string, A>();
|
|
93
|
+
// for (const x of xs) {
|
|
94
|
+
// intermediate.set(JSON.stringify(x), x);
|
|
95
|
+
// }
|
|
96
|
+
// const sorted = Array.from(intermediate.keys())
|
|
97
|
+
// .sort()
|
|
98
|
+
// .map((k) => intermediate.get(k)!);
|
|
99
|
+
// xs.splice(0, xs.length, ...sorted);
|
|
100
|
+
// return xs.length !== 1 ? xs : xs[0];
|
|
101
|
+
// }
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHByb2Nlc3MtcG9saWN5LWRvY3VtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pYW0vcHJpdmF0ZS9wb3N0cHJvY2Vzcy1wb2xpY3ktZG9jdW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLHlCQUF5QjtJQUNwQyxZQUNtQixjQUF1QjtRQUF2QixtQkFBYyxHQUFkLGNBQWMsQ0FBUztJQUV2QyxDQUFDO0lBRUosNkNBQTZDO0lBQ3RDLFdBQVcsQ0FBQyxLQUFVLEVBQUUsUUFBeUI7UUFDdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsK0RBQStEO1FBQy9ELDRFQUE0RTtRQUM1RSx5QkFBeUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN6QyxNQUFNLGdCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFL0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNsQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBRUQsK0JBQStCO1lBQy9CLDRIQUE0SDtZQUM1SCxtQkFBbUI7WUFDbkIsdURBQXVEO1lBQ3ZELGlCQUFpQjtZQUNqQixrQkFBa0I7WUFDbEIsOERBQThEO1lBQzlELG9FQUFvRTtZQUNwRSwrQkFBK0I7WUFDL0Isd0JBQXdCO1lBQ3hCLGdDQUFnQztZQUNoQyxvQ0FBb0M7WUFDcEMsMkVBQTJFO1lBQzNFLHNDQUFzQztZQUN0QyxNQUFNO1lBQ04sSUFBSTtZQUVKLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUF2REQsOERBdURDO0FBRUQsa0NBQWtDO0FBQ2xDLHlCQUF5QjtBQUN6QixvREFBb0Q7QUFDcEQsaUNBQWlDO0FBQ2pDLDBCQUEwQjtBQUMxQixRQUFRO0FBQ1IsTUFBTTtBQUNOLGdCQUFnQjtBQUNoQixJQUFJO0FBRUosOEJBQThCO0FBQzlCLHNEQUFzRDtBQUN0RCxpQkFBaUI7QUFDakIsOERBQThEO0FBQzlELGlCQUFpQjtBQUNqQixNQUFNO0FBRU4sNENBQTRDO0FBQzVDLDhDQUE4QztBQUM5QyxrQ0FBa0M7QUFDbEMsTUFBTTtBQUVOLGdCQUFnQjtBQUNoQixJQUFJO0FBRUosTUFBTTtBQUNOLGtGQUFrRjtBQUNsRixLQUFLO0FBQ0wsb0RBQW9EO0FBQ3BELE1BQU07QUFDTixvRUFBb0U7QUFDcEUsOEJBQThCO0FBQzlCLGlCQUFpQjtBQUNqQixNQUFNO0FBRU4sK0NBQStDO0FBQy9DLDBCQUEwQjtBQUMxQiw4Q0FBOEM7QUFDOUMsTUFBTTtBQUVOLG1EQUFtRDtBQUNuRCxjQUFjO0FBQ2QseUNBQXlDO0FBQ3pDLHdDQUF3QztBQUN4Qyx5Q0FBeUM7QUFDekMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElQb3N0UHJvY2Vzc29yLFxuICBJUmVzb2x2ZUNvbnRleHQsXG4gIC8vVG9rZW5cbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcG9saWN5LXN0YXRlbWVudFwiO1xuLyoqXG4gKiBBIFRva2VuIHBvc3Rwcm9jZXNzZXIgZm9yIHBvbGljeSBkb2N1bWVudHNcbiAqXG4gKiBSZW1vdmVzIGR1cGxpY2F0ZSBzdGF0ZW1lbnRzLCBhbmQgYXNzaWduIFNpZHMgaWYgbmVjZXNzYXJ5XG4gKlxuICogQmVjYXVzZSBwb2xpY3kgZG9jdW1lbnRzIGNhbiBjb250YWluIGFsbCBraW5kcyBvZiBjcmF6eSB0aGluZ3MsXG4gKiB3ZSBkbyBhbGwgdGhlIG5lY2Vzc2FyeSB3b3JrIGhlcmUgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIG1vc3RseSByZXNvbHZlZFxuICogaW50byBhIHByZWRpY3RhYmxlIFRlcnJhZm9ybSBmb3JtLlxuICovXG5leHBvcnQgY2xhc3MgUG9zdFByb2Nlc3NQb2xpY3lEb2N1bWVudCBpbXBsZW1lbnRzIElQb3N0UHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRvQXNzaWduU2lkczogYm9vbGVhbixcbiAgICAvLyBwcml2YXRlIHJlYWRvbmx5IHNvcnQ6IGJvb2xlYW4sXG4gICkge31cblxuICAvLyB0aGlzIGlzIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIHN0YXRlbWVudHNcbiAgcHVibGljIHBvc3RQcm9jZXNzKGlucHV0OiBhbnksIF9jb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpOiBhbnkge1xuICAgIGlmICghaW5wdXQgfHwgIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gQWxzbyByZW1vdmUgZnVsbC1vbiBkdXBsaWNhdGVzICh0aGlzIHdpbGwgbm90IGJlIG5lY2Vzc2FyeSBpZlxuICAgIC8vIHdlIG1pbmltaXplZCwgYnV0IGl0IG1pZ2h0IHN0aWxsIGRlZHVwZSBzdGF0ZW1lbnRzIHdlIGRpZG4ndFxuICAgIC8vIG1pbmltaXplIGxpa2UgaWYgdGhleSBjb250YWluZWQgdG9rZW5zLCBhbmQgZGVmaW5pdGVseSBpcyBzdGlsbCBuZWNlc3NhcnlcbiAgICAvLyBpZiB3ZSBkaWRuJ3QgbWluaW1pemUpXG4gICAgY29uc3QganNvblN0YXRlbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCB1bmlxdWVTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgaW5wdXQpIHtcbiAgICAgIGNvbnN0IGpzb25TdGF0ZW1lbnQgPSBKU09OLnN0cmluZ2lmeShzdGF0ZW1lbnQpO1xuICAgICAgaWYgKCFqc29uU3RhdGVtZW50cy5oYXMoanNvblN0YXRlbWVudCkpIHtcbiAgICAgICAgdW5pcXVlU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIGpzb25TdGF0ZW1lbnRzLmFkZChqc29uU3RhdGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhc3NpZ24gdW5pcXVlIFNJRHMgKHRoZSBzdGF0ZW1lbnQgaW5kZXgpIGlmIGBhdXRvQXNzaWduU2lkc2AgaXMgZW5hYmxlZFxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB1bmlxdWVTdGF0ZW1lbnRzLm1hcCgocywgaSkgPT4ge1xuICAgICAgaWYgKHRoaXMuYXV0b0Fzc2lnblNpZHMgJiYgIXMuc2lkKSB7XG4gICAgICAgIHMuc2lkID0gaS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiByZS1hZGQgc29ydGluZyBzdXBwb3J0XG4gICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay90cmVlL3YyLjE2MS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1pYW0vbGliL3ByaXZhdGUvcG9zdHByb2Nlc3MtcG9saWN5LWRvY3VtZW50LnRzXG4gICAgICAvLyBpZiAodGhpcy5zb3J0KSB7XG4gICAgICAvLyAgIC8vIERvbid0IGFjdCBvbiB0aGUgdmFsdWVzIGlmIHRoZXkgYXJlICd1bmRlZmluZWQnXG4gICAgICAvLyAgIHMgPSBzLmNvcHkoe1xuICAgICAgLy8gICAgIHNpZDogcy5zaWQsXG4gICAgICAvLyAgICAgYWN0aW9uczogcy5hY3Rpb25zID8gc29ydEJ5SnNvbihzLmFjdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgLy8gICAgIHJlc291cmNlczogcy5yZXNvdXJjZXMgPyBzb3J0QnlKc29uKHMucmVzb3VyY2VzKSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vICAgICBjb25kaXRpb246IHMuY29uZGl0aW9ucyxcbiAgICAgIC8vICAgICBlZmZlY3Q6IHMuZWZmZWN0LFxuICAgICAgLy8gICAgIG5vdEFjdGlvbnM6IHMubm90QWN0aW9ucyxcbiAgICAgIC8vICAgICBub3RSZXNvdXJjZXM6IHMubm90UmVzb3VyY2VzLFxuICAgICAgLy8gICAgIHByaW5jaXBhbHM6IHMucHJpbmNpcGFscyA/IHNvcnRQcmluY2lwYWxzKHMucHJpbmNpcGFscykgOiB1bmRlZmluZWQsXG4gICAgICAvLyAgICAgbm90UHJpbmNpcGFsczogcy5ub3RQcmluY2lwYWxzLFxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG5cbiAgICAgIHJldHVybiBzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cbn1cblxuLy8gZnVuY3Rpb24gbm9VbmRlZih4OiBhbnkpOiBhbnkge1xuLy8gICBjb25zdCByZXQ6IGFueSA9IHt9O1xuLy8gICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh4KSkge1xuLy8gICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4vLyAgICAgICByZXRba2V5XSA9IHZhbHVlO1xuLy8gICAgIH1cbi8vICAgfVxuLy8gICByZXR1cm4gcmV0O1xuLy8gfVxuXG4vLyBmdW5jdGlvbiBzb3J0UHJpbmNpcGFsczxBPihcbi8vICAgeHM/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIEEgfCBBW10+LFxuLy8gKTogdHlwZW9mIHhzIHtcbi8vICAgaWYgKCF4cyB8fCBBcnJheS5pc0FycmF5KHhzKSB8fCB0eXBlb2YgeHMgIT09IFwib2JqZWN0XCIpIHtcbi8vICAgICByZXR1cm4geHM7XG4vLyAgIH1cblxuLy8gICBjb25zdCByZXQ6IE5vbk51bGxhYmxlPHR5cGVvZiB4cz4gPSB7fTtcbi8vICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHhzKS5zb3J0KCkpIHtcbi8vICAgICByZXRba10gPSBzb3J0QnlKc29uKHhzW2tdKTtcbi8vICAgfVxuXG4vLyAgIHJldHVybiByZXQ7XG4vLyB9XG5cbi8vIC8qKlxuLy8gICogU29ydCB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGJ5IHRoZSBKU09OIHJlcHJlc2VudGF0aW9uLCByZW1vdmluZyBkdXBsaWNhdGVzLlxuLy8gICpcbi8vICAqIE11dGF0ZXMgaW4gcGxhY2UgQU5EIHJldHVybnMgdGhlIG11dGF0ZWQgbGlzdC5cbi8vICAqL1xuLy8gZnVuY3Rpb24gc29ydEJ5SnNvbjxCLCBBIGV4dGVuZHMgQiB8IEJbXSB8IHVuZGVmaW5lZD4oeHM6IEEpOiBBIHtcbi8vICAgaWYgKCFBcnJheS5pc0FycmF5KHhzKSkge1xuLy8gICAgIHJldHVybiB4cztcbi8vICAgfVxuXG4vLyAgIGNvbnN0IGludGVybWVkaWF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBBPigpO1xuLy8gICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbi8vICAgICBpbnRlcm1lZGlhdGUuc2V0KEpTT04uc3RyaW5naWZ5KHgpLCB4KTtcbi8vICAgfVxuXG4vLyAgIGNvbnN0IHNvcnRlZCA9IEFycmF5LmZyb20oaW50ZXJtZWRpYXRlLmtleXMoKSlcbi8vICAgICAuc29ydCgpXG4vLyAgICAgLm1hcCgoaykgPT4gaW50ZXJtZWRpYXRlLmdldChrKSEpO1xuLy8gICB4cy5zcGxpY2UoMCwgeHMubGVuZ3RoLCAuLi5zb3J0ZWQpO1xuLy8gICByZXR1cm4geHMubGVuZ3RoICE9PSAxID8geHMgOiB4c1swXTtcbi8vIH1cbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { IPostProcessor, IResolvable, IResolveContext } from "cdktf";
|
|
2
|
+
import { IPolicy } from "../policy";
|
|
3
|
+
export declare const MAX_POLICY_NAME_LEN = 128;
|
|
4
|
+
export declare function undefinedIfEmpty(f: () => string[]): string[];
|
|
5
|
+
/**
|
|
6
|
+
* Helper class that maintains the set of attached policies for a principal.
|
|
7
|
+
*/
|
|
8
|
+
export declare class AttachedPolicies {
|
|
9
|
+
private policies;
|
|
10
|
+
/**
|
|
11
|
+
* Adds a policy to the list of attached policies.
|
|
12
|
+
*
|
|
13
|
+
* If this policy is already, attached, returns false.
|
|
14
|
+
* If there is another policy attached with the same name, throws an exception.
|
|
15
|
+
*/
|
|
16
|
+
attach(policy: IPolicy): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lazy string set token that dedupes entries
|
|
20
|
+
*
|
|
21
|
+
* Needs to operate post-resolve, because the inputs could be
|
|
22
|
+
* `[ '${Token[TOKEN.9]}', '${Token[TOKEN.10]}', '${Token[TOKEN.20]}' ]`, which
|
|
23
|
+
* still all resolve to the same string value.
|
|
24
|
+
*
|
|
25
|
+
* Needs to JSON.stringify() results because strings could resolve to literal
|
|
26
|
+
* strings but could also resolve to `${index(...)}`.
|
|
27
|
+
*/
|
|
28
|
+
export declare class UniqueStringSet implements IResolvable, IPostProcessor {
|
|
29
|
+
private readonly fn;
|
|
30
|
+
static from(fn: () => string[]): string[];
|
|
31
|
+
readonly creationStack: string[];
|
|
32
|
+
private constructor();
|
|
33
|
+
resolve(context: IResolveContext): string[];
|
|
34
|
+
postProcess(input: any, _context: IResolveContext): any;
|
|
35
|
+
toString(): string;
|
|
36
|
+
}
|
|
37
|
+
export declare function sum(xs: number[]): number;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sum = exports.UniqueStringSet = exports.AttachedPolicies = exports.undefinedIfEmpty = exports.MAX_POLICY_NAME_LEN = void 0;
|
|
4
|
+
const cdktf_1 = require("cdktf");
|
|
5
|
+
exports.MAX_POLICY_NAME_LEN = 128;
|
|
6
|
+
function undefinedIfEmpty(f) {
|
|
7
|
+
return cdktf_1.Lazy.listValue({
|
|
8
|
+
produce: () => {
|
|
9
|
+
const array = f();
|
|
10
|
+
return array && array.length > 0 ? array : undefined;
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
exports.undefinedIfEmpty = undefinedIfEmpty;
|
|
15
|
+
/**
|
|
16
|
+
* Helper class that maintains the set of attached policies for a principal.
|
|
17
|
+
*/
|
|
18
|
+
class AttachedPolicies {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.policies = new Array();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Adds a policy to the list of attached policies.
|
|
24
|
+
*
|
|
25
|
+
* If this policy is already, attached, returns false.
|
|
26
|
+
* If there is another policy attached with the same name, throws an exception.
|
|
27
|
+
*/
|
|
28
|
+
attach(policy) {
|
|
29
|
+
if (this.policies.find((p) => p === policy)) {
|
|
30
|
+
return; // already attached
|
|
31
|
+
}
|
|
32
|
+
if (this.policies.find((p) => p.policyName === policy.policyName)) {
|
|
33
|
+
throw new Error(`A policy named "${policy.policyName}" is already attached`);
|
|
34
|
+
}
|
|
35
|
+
this.policies.push(policy);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.AttachedPolicies = AttachedPolicies;
|
|
39
|
+
/**
|
|
40
|
+
* Lazy string set token that dedupes entries
|
|
41
|
+
*
|
|
42
|
+
* Needs to operate post-resolve, because the inputs could be
|
|
43
|
+
* `[ '${Token[TOKEN.9]}', '${Token[TOKEN.10]}', '${Token[TOKEN.20]}' ]`, which
|
|
44
|
+
* still all resolve to the same string value.
|
|
45
|
+
*
|
|
46
|
+
* Needs to JSON.stringify() results because strings could resolve to literal
|
|
47
|
+
* strings but could also resolve to `${index(...)}`.
|
|
48
|
+
*/
|
|
49
|
+
class UniqueStringSet {
|
|
50
|
+
static from(fn) {
|
|
51
|
+
return cdktf_1.Token.asList(new UniqueStringSet(fn));
|
|
52
|
+
}
|
|
53
|
+
constructor(fn) {
|
|
54
|
+
this.fn = fn;
|
|
55
|
+
// TODO: Implement stack traces
|
|
56
|
+
// ref: https://github.com/hashicorp/terraform-cdk/blob/v0.20.7/packages/cdktf/lib/app.ts#L111
|
|
57
|
+
// ref: https://github.com/hashicorp/terraform-cdk/blob/v0.20.9/packages/cdktf/lib/tokens/private/stack-trace.ts#L9
|
|
58
|
+
// ref: https://github.com/aws/aws-cdk/blob/v2.143.0/packages/aws-cdk-lib/core/lib/stack-trace.ts#L22
|
|
59
|
+
this.creationStack = ["stack traces disabled"];
|
|
60
|
+
}
|
|
61
|
+
resolve(context) {
|
|
62
|
+
context.registerPostProcessor(this);
|
|
63
|
+
return this.fn();
|
|
64
|
+
}
|
|
65
|
+
postProcess(input, _context) {
|
|
66
|
+
if (!Array.isArray(input)) {
|
|
67
|
+
return input;
|
|
68
|
+
}
|
|
69
|
+
if (input.length === 0) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const uniq = {};
|
|
73
|
+
for (const el of input) {
|
|
74
|
+
uniq[JSON.stringify(el)] = el;
|
|
75
|
+
}
|
|
76
|
+
return Object.values(uniq);
|
|
77
|
+
}
|
|
78
|
+
toString() {
|
|
79
|
+
return cdktf_1.Token.asString(this);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.UniqueStringSet = UniqueStringSet;
|
|
83
|
+
function sum(xs) {
|
|
84
|
+
return xs.reduce((a, b) => a + b, 0);
|
|
85
|
+
}
|
|
86
|
+
exports.sum = sum;
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaWFtL3ByaXZhdGUvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FNZTtBQUdGLFFBQUEsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRXZDLFNBQWdCLGdCQUFnQixDQUFDLENBQWlCO0lBQ2hELE9BQU8sWUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNwQixPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZELENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBUEQsNENBT0M7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCO0lBQTdCO1FBQ1UsYUFBUSxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7SUFxQjFDLENBQUM7SUFuQkM7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBZTtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsbUJBQW1CO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQW1CLE1BQU0sQ0FBQyxVQUFVLHVCQUF1QixDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQXRCRCw0Q0FzQkM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLGVBQWU7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFrQjtRQUNuQyxPQUFPLGFBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBSUQsWUFBcUMsRUFBa0I7UUFBbEIsT0FBRSxHQUFGLEVBQUUsQ0FBZ0I7UUFDckQsK0JBQStCO1FBQy9CLDhGQUE4RjtRQUM5RixtSEFBbUg7UUFDbkgscUdBQXFHO1FBQ3JHLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxPQUFPLENBQUMsT0FBd0I7UUFDckMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBVSxFQUFFLFFBQXlCO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ3JDLEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sYUFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUF0Q0QsMENBc0NDO0FBRUQsU0FBZ0IsR0FBRyxDQUFDLEVBQVk7SUFDOUIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRkQsa0JBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJUG9zdFByb2Nlc3NvcixcbiAgSVJlc29sdmFibGUsXG4gIElSZXNvbHZlQ29udGV4dCxcbiAgTGF6eSxcbiAgVG9rZW4sXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgSVBvbGljeSB9IGZyb20gXCIuLi9wb2xpY3lcIjtcblxuZXhwb3J0IGNvbnN0IE1BWF9QT0xJQ1lfTkFNRV9MRU4gPSAxMjg7XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlZmluZWRJZkVtcHR5KGY6ICgpID0+IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gTGF6eS5saXN0VmFsdWUoe1xuICAgIHByb2R1Y2U6ICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5ID0gZigpO1xuICAgICAgcmV0dXJuIGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IDAgPyBhcnJheSA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdGhhdCBtYWludGFpbnMgdGhlIHNldCBvZiBhdHRhY2hlZCBwb2xpY2llcyBmb3IgYSBwcmluY2lwYWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdHRhY2hlZFBvbGljaWVzIHtcbiAgcHJpdmF0ZSBwb2xpY2llcyA9IG5ldyBBcnJheTxJUG9saWN5PigpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcG9saWN5IHRvIHRoZSBsaXN0IG9mIGF0dGFjaGVkIHBvbGljaWVzLlxuICAgKlxuICAgKiBJZiB0aGlzIHBvbGljeSBpcyBhbHJlYWR5LCBhdHRhY2hlZCwgcmV0dXJucyBmYWxzZS5cbiAgICogSWYgdGhlcmUgaXMgYW5vdGhlciBwb2xpY3kgYXR0YWNoZWQgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICAgKi9cbiAgcHVibGljIGF0dGFjaChwb2xpY3k6IElQb2xpY3kpIHtcbiAgICBpZiAodGhpcy5wb2xpY2llcy5maW5kKChwKSA9PiBwID09PSBwb2xpY3kpKSB7XG4gICAgICByZXR1cm47IC8vIGFscmVhZHkgYXR0YWNoZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb2xpY2llcy5maW5kKChwKSA9PiBwLnBvbGljeU5hbWUgPT09IHBvbGljeS5wb2xpY3lOYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBwb2xpY3kgbmFtZWQgXCIke3BvbGljeS5wb2xpY3lOYW1lfVwiIGlzIGFscmVhZHkgYXR0YWNoZWRgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvbGljaWVzLnB1c2gocG9saWN5KTtcbiAgfVxufVxuXG4vKipcbiAqIExhenkgc3RyaW5nIHNldCB0b2tlbiB0aGF0IGRlZHVwZXMgZW50cmllc1xuICpcbiAqIE5lZWRzIHRvIG9wZXJhdGUgcG9zdC1yZXNvbHZlLCBiZWNhdXNlIHRoZSBpbnB1dHMgY291bGQgYmVcbiAqIGBbICcke1Rva2VuW1RPS0VOLjldfScsICcke1Rva2VuW1RPS0VOLjEwXX0nLCAnJHtUb2tlbltUT0tFTi4yMF19JyBdYCwgd2hpY2hcbiAqIHN0aWxsIGFsbCByZXNvbHZlIHRvIHRoZSBzYW1lIHN0cmluZyB2YWx1ZS5cbiAqXG4gKiBOZWVkcyB0byBKU09OLnN0cmluZ2lmeSgpIHJlc3VsdHMgYmVjYXVzZSBzdHJpbmdzIGNvdWxkIHJlc29sdmUgdG8gbGl0ZXJhbFxuICogc3RyaW5ncyBidXQgY291bGQgYWxzbyByZXNvbHZlIHRvIGAke2luZGV4KC4uLil9YC5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuaXF1ZVN0cmluZ1NldCBpbXBsZW1lbnRzIElSZXNvbHZhYmxlLCBJUG9zdFByb2Nlc3NvciB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbShmbjogKCkgPT4gc3RyaW5nW10pIHtcbiAgICByZXR1cm4gVG9rZW4uYXNMaXN0KG5ldyBVbmlxdWVTdHJpbmdTZXQoZm4pKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGlvblN0YWNrOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZm46ICgpID0+IHN0cmluZ1tdKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHN0YWNrIHRyYWNlc1xuICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tY2RrL2Jsb2IvdjAuMjAuNy9wYWNrYWdlcy9jZGt0Zi9saWIvYXBwLnRzI0wxMTFcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjkvcGFja2FnZXMvY2RrdGYvbGliL3Rva2Vucy9wcml2YXRlL3N0YWNrLXRyYWNlLnRzI0w5XG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNDMuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jb3JlL2xpYi9zdGFjay10cmFjZS50cyNMMjJcbiAgICB0aGlzLmNyZWF0aW9uU3RhY2sgPSBbXCJzdGFjayB0cmFjZXMgZGlzYWJsZWRcIl07XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZShjb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpIHtcbiAgICBjb250ZXh0LnJlZ2lzdGVyUG9zdFByb2Nlc3Nvcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5mbigpO1xuICB9XG5cbiAgcHVibGljIHBvc3RQcm9jZXNzKGlucHV0OiBhbnksIF9jb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGZvciAoY29uc3QgZWwgb2YgaW5wdXQpIHtcbiAgICAgIHVuaXFbSlNPTi5zdHJpbmdpZnkoZWwpXSA9IGVsO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh1bmlxKTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtKHhzOiBudW1iZXJbXSkge1xuICByZXR1cm4geHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59XG4iXX0=
|