terraconstructs 0.0.25 → 0.1.1
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/.jsii +83939 -55116
- package/.mise.toml +2 -2
- package/.nvmrc +1 -1
- package/LICENSE +202 -674
- package/go.mod +1 -1
- package/go.sum +2 -2
- package/lib/asset-manager.d.ts +23 -0
- package/lib/asset-manager.js +3 -0
- package/lib/asset-staging.d.ts +178 -0
- package/lib/asset-staging.js +589 -0
- package/lib/assets.d.ts +359 -0
- package/lib/assets.js +55 -0
- package/lib/aws/arn.js +16 -15
- package/lib/aws/aws-asset-manager.d.ts +91 -0
- package/lib/aws/aws-asset-manager.js +244 -0
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +37 -0
- package/lib/aws/aws-stack.js +30 -9
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
- package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
- package/lib/aws/cloudwatch/actions/index.js +4 -4
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
- package/lib/aws/cloudwatch/actions/sns.js +23 -0
- package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
- package/lib/aws/cloudwatch/actions/ssm.js +104 -0
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.d.ts +478 -0
- package/lib/aws/compute/access-log.js +649 -0
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/api-definition.d.ts +106 -0
- package/lib/aws/compute/api-definition.js +200 -0
- package/lib/aws/compute/api-key.d.ts +184 -0
- package/lib/aws/compute/api-key.js +197 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
- package/lib/aws/compute/apigateway-util.d.ts +31 -0
- package/lib/aws/compute/apigateway-util.js +152 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/authorizer.d.ts +35 -0
- package/lib/aws/compute/authorizer.js +28 -0
- package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
- package/lib/aws/compute/authorizers/identity-source.js +61 -0
- package/lib/aws/compute/authorizers/index.d.ts +2 -0
- package/lib/aws/compute/authorizers/index.js +20 -0
- package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
- package/lib/aws/compute/authorizers/lambda.js +208 -0
- package/lib/aws/compute/base-path-mapping.d.ts +49 -0
- package/lib/aws/compute/base-path-mapping.js +52 -0
- package/lib/aws/compute/base-scalable-attribute.js +3 -3
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/code.d.ts +415 -0
- package/lib/aws/compute/code.js +424 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.d.ts +102 -0
- package/lib/aws/compute/cors.js +33 -0
- package/lib/aws/compute/deployment.d.ts +83 -0
- package/lib/aws/compute/deployment.js +158 -0
- package/lib/aws/compute/domain-name.d.ts +153 -0
- package/lib/aws/compute/domain-name.js +158 -0
- package/lib/aws/compute/event-invoke-config.d.ts +2 -2
- package/lib/aws/compute/event-invoke-config.js +4 -4
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.d.ts +2 -2
- package/lib/aws/compute/event-source-mapping.js +9 -7
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +3 -2
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.d.ts +2 -0
- package/lib/aws/compute/function-alias.js +14 -2
- package/lib/aws/compute/function-base.d.ts +23 -0
- package/lib/aws/compute/function-base.js +4 -4
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
- package/lib/aws/compute/function-nodejs/bundling.js +405 -0
- package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
- package/lib/aws/compute/function-nodejs/function.js +175 -0
- package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
- package/lib/aws/compute/function-nodejs/index.js +19 -0
- package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
- package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
- package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
- package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
- package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
- package/lib/aws/compute/function-nodejs/types.js +81 -0
- package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
- package/lib/aws/compute/function-nodejs/util.js +202 -0
- package/lib/aws/compute/function-url.d.ts +2 -2
- package/lib/aws/compute/function-url.js +4 -4
- package/lib/aws/compute/function.d.ts +43 -5
- package/lib/aws/compute/function.js +106 -18
- package/lib/aws/compute/gateway-response.d.ts +157 -0
- package/lib/aws/compute/gateway-response.js +156 -0
- package/lib/aws/compute/handler.d.ts +10 -0
- package/lib/aws/compute/handler.js +20 -0
- package/lib/aws/compute/index.d.ts +27 -0
- package/lib/aws/compute/index.js +29 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/integration.d.ts +311 -0
- package/lib/aws/compute/integration.js +165 -0
- package/lib/aws/compute/integrations/aws.d.ts +72 -0
- package/lib/aws/compute/integrations/aws.js +55 -0
- package/lib/aws/compute/integrations/http.d.ts +37 -0
- package/lib/aws/compute/integrations/http.js +35 -0
- package/lib/aws/compute/integrations/index.d.ts +6 -0
- package/lib/aws/compute/integrations/index.js +24 -0
- package/lib/aws/compute/integrations/lambda.d.ts +40 -0
- package/lib/aws/compute/integrations/lambda.js +73 -0
- package/lib/aws/compute/integrations/mock.d.ts +16 -0
- package/lib/aws/compute/integrations/mock.js +30 -0
- package/lib/aws/compute/integrations/request-context.d.ts +144 -0
- package/lib/aws/compute/integrations/request-context.js +3 -0
- package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
- package/lib/aws/compute/integrations/stepfunctions.js +268 -0
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/json-schema.d.ts +75 -0
- package/lib/aws/compute/json-schema.js +23 -0
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/lambda-api.d.ts +46 -0
- package/lib/aws/compute/lambda-api.js +64 -0
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/method.d.ts +219 -0
- package/lib/aws/compute/method.js +396 -0
- package/lib/aws/compute/methodresponse.d.ts +28 -0
- package/lib/aws/compute/methodresponse.js +3 -0
- package/lib/aws/compute/model.d.ts +143 -0
- package/lib/aws/compute/model.js +141 -0
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/requestvalidator.d.ts +50 -0
- package/lib/aws/compute/requestvalidator.js +59 -0
- package/lib/aws/compute/resource.d.ts +223 -0
- package/lib/aws/compute/resource.js +316 -0
- package/lib/aws/compute/restapi.d.ts +510 -0
- package/lib/aws/compute/restapi.js +626 -0
- package/lib/aws/compute/route.js +8 -8
- package/lib/aws/compute/runtime.d.ts +282 -0
- package/lib/aws/compute/runtime.js +337 -0
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +3 -3
- package/lib/aws/compute/security-group.js +1 -1
- package/lib/aws/compute/stage.d.ts +350 -0
- package/lib/aws/compute/stage.js +304 -0
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +3 -3
- package/lib/aws/compute/step-scaling-policy.js +1 -1
- package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
- package/lib/aws/compute/stepfunctions-api.js +39 -0
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.d.ts +194 -0
- package/lib/aws/compute/usage-plan.js +174 -0
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-link.d.ts +104 -0
- package/lib/aws/compute/vpc-link.js +137 -0
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +3 -3
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +5 -5
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.d.ts +1 -1
- package/lib/aws/notify/notification-rule.js +5 -5
- package/lib/aws/notify/policy.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +6 -5
- package/lib/aws/partition.d.ts +21 -0
- package/lib/aws/partition.js +42 -0
- package/lib/aws/storage/assets/image-asset.d.ts +379 -0
- package/lib/aws/storage/assets/image-asset.js +247 -0
- package/lib/aws/storage/assets/index.d.ts +2 -0
- package/lib/aws/storage/assets/index.js +21 -0
- package/lib/aws/storage/assets/s3.d.ts +125 -0
- package/lib/aws/storage/assets/s3.js +80 -0
- package/lib/aws/storage/auth-token.d.ts +25 -0
- package/lib/aws/storage/auth-token.js +54 -0
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +4 -4
- package/lib/aws/storage/bucket.d.ts +14 -6
- package/lib/aws/storage/bucket.js +48 -40
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
- package/lib/aws/storage/ecr-lifecycle.js +23 -0
- package/lib/aws/storage/ecr-repository.d.ts +446 -0
- package/lib/aws/storage/ecr-repository.js +685 -0
- package/lib/aws/storage/encryption.js +1 -1
- package/lib/aws/storage/index.d.ts +5 -0
- package/lib/aws/storage/index.js +10 -3
- package/lib/aws/storage/location.d.ts +17 -0
- package/lib/aws/storage/location.js +4 -0
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/table.js +3 -3
- package/lib/aws/storage/util.d.ts +8 -20
- package/lib/aws/storage/util.js +56 -34
- package/lib/aws/util.d.ts +1 -0
- package/lib/aws/util.js +6 -1
- package/lib/bundling.d.ts +434 -0
- package/lib/bundling.js +368 -0
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/copy.d.ts +2 -0
- package/lib/fs/copy.js +57 -0
- package/lib/fs/fingerprint.d.ts +21 -0
- package/lib/fs/fingerprint.js +165 -0
- package/lib/fs/ignore.d.ts +107 -0
- package/lib/fs/ignore.js +190 -0
- package/lib/fs/index.d.ts +47 -0
- package/lib/fs/index.js +88 -0
- package/lib/fs/options.d.ts +110 -0
- package/lib/fs/options.js +60 -0
- package/lib/fs/utils.d.ts +11 -0
- package/lib/fs/utils.js +34 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +7 -1
- package/lib/private/asset-staging.d.ts +83 -0
- package/lib/private/asset-staging.js +205 -0
- package/lib/private/cache.d.ts +17 -0
- package/lib/private/cache.js +35 -0
- package/lib/private/jsii-deprecated.d.ts +2 -0
- package/lib/private/jsii-deprecated.js +19 -0
- package/lib/private/unique-resource-name.js +3 -2
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +2 -2
- package/lib/time-zone.js +1 -1
- package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
- package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
- package/node_modules/@balena/dockerignore/README.md +261 -0
- package/node_modules/@balena/dockerignore/ignore.js +363 -0
- package/node_modules/@balena/dockerignore/index.d.ts +45 -0
- package/node_modules/@balena/dockerignore/package.json +49 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/ignore/LICENSE-MIT +21 -0
- package/node_modules/ignore/README.md +412 -0
- package/node_modules/ignore/index.d.ts +61 -0
- package/node_modules/ignore/index.js +636 -0
- package/node_modules/ignore/legacy.js +559 -0
- package/node_modules/ignore/package.json +74 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +230 -0
- package/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/minimatch/package.json +33 -0
- package/package.json +14 -5
- package/lib/aws/compute/function-nodejs.d.ts +0 -55
- package/lib/aws/compute/function-nodejs.js +0 -70
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AssetImageCode = exports.EcrImageCode = exports.TerraformVariablesCode = exports.AssetCode = exports.InlineCode = exports.S3CodeV2 = exports.S3Code = exports.Code = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const cdktf = require("cdktf");
|
|
8
|
+
const bundling_1 = require("../../bundling");
|
|
9
|
+
const aws_stack_1 = require("../aws-stack");
|
|
10
|
+
const iam = require("../iam");
|
|
11
|
+
// import { IAwsConstruct } from "../aws-construct";
|
|
12
|
+
const ecr_assets = require("../storage/assets/image-asset");
|
|
13
|
+
const s3_assets = require("../storage/assets/s3");
|
|
14
|
+
// TODO: Adopt UnscopedValidationError
|
|
15
|
+
// - https://github.com/aws/aws-cdk/pull/33382/
|
|
16
|
+
// - https://github.com/aws/aws-cdk/pull/33045
|
|
17
|
+
// import {
|
|
18
|
+
// UnscopedValidationError,
|
|
19
|
+
// ValidationError,
|
|
20
|
+
// } from "../../core/lib/errors";
|
|
21
|
+
/**
|
|
22
|
+
* Represents the Lambda Handler Code.
|
|
23
|
+
*/
|
|
24
|
+
class Code {
|
|
25
|
+
/**
|
|
26
|
+
* Lambda handler code as an S3 object.
|
|
27
|
+
* @param bucket The S3 bucket
|
|
28
|
+
* @param key The object key
|
|
29
|
+
* @param objectVersion Optional S3 object version
|
|
30
|
+
*/
|
|
31
|
+
static fromBucket(bucket, key, objectVersion) {
|
|
32
|
+
return new S3Code(bucket, key, objectVersion);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Lambda handler code as an S3 object.
|
|
36
|
+
* @param bucket The S3 bucket
|
|
37
|
+
* @param key The object key
|
|
38
|
+
* @param options Optional parameters for setting the code, current optional parameters to set here are
|
|
39
|
+
* 1. `objectVersion` to set S3 object version
|
|
40
|
+
* 2. `sourceKMSKey` to set KMS Key for encryption of code
|
|
41
|
+
*/
|
|
42
|
+
static fromBucketV2(bucket, key, options) {
|
|
43
|
+
return new S3CodeV2(bucket, key, options);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* DEPRECATED
|
|
47
|
+
* @deprecated use `fromBucket`
|
|
48
|
+
*/
|
|
49
|
+
static bucket(bucket, key, objectVersion) {
|
|
50
|
+
return this.fromBucket(bucket, key, objectVersion);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Inline code for Lambda handler
|
|
54
|
+
* @returns `LambdaInlineCode` with inline code.
|
|
55
|
+
* @param code The actual handler code (the resulting zip file cannot exceed 4MB)
|
|
56
|
+
*/
|
|
57
|
+
static fromInline(code) {
|
|
58
|
+
return new InlineCode(code);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* DEPRECATED
|
|
62
|
+
* @deprecated use `fromInline`
|
|
63
|
+
*/
|
|
64
|
+
static inline(code) {
|
|
65
|
+
return this.fromInline(code);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Loads the function code from a local disk path.
|
|
69
|
+
*
|
|
70
|
+
* @param path Either a directory with the Lambda code bundle or a .zip file
|
|
71
|
+
*/
|
|
72
|
+
static fromAsset(path, options) {
|
|
73
|
+
return new AssetCode(path, options);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Runs a command to build the code asset that will be used.
|
|
77
|
+
*
|
|
78
|
+
* @param output Where the output of the command will be directed, either a directory or a .zip file with the output Lambda code bundle
|
|
79
|
+
* * For example, if you use the command to run a build script (e.g., [ 'node', 'bundle_code.js' ]), and the build script generates a directory `/my/lambda/code`
|
|
80
|
+
* containing code that should be ran in a Lambda function, then output should be set to `/my/lambda/code`
|
|
81
|
+
* @param command The command which will be executed to generate the output, for example, [ 'node', 'bundle_code.js' ]
|
|
82
|
+
* @param options options for the custom command, and other asset options -- but bundling options are not allowed.
|
|
83
|
+
*/
|
|
84
|
+
static fromCustomCommand(output, command, options) {
|
|
85
|
+
if (command.length === 0) {
|
|
86
|
+
// throw new UnscopedValidationError(
|
|
87
|
+
throw new Error('command must contain at least one argument. For example, ["node", "buildFile.js"].');
|
|
88
|
+
}
|
|
89
|
+
const cmd = command[0];
|
|
90
|
+
const commandArguments = command.splice(1);
|
|
91
|
+
const proc = options?.commandOptions === undefined
|
|
92
|
+
? (0, child_process_1.spawnSync)(cmd, commandArguments) // use the default spawnSyncOptions
|
|
93
|
+
: (0, child_process_1.spawnSync)(cmd, commandArguments, options.commandOptions);
|
|
94
|
+
if (proc.error) {
|
|
95
|
+
// throw new UnscopedValidationError(
|
|
96
|
+
throw new Error(`Failed to execute custom command: ${proc.error}`);
|
|
97
|
+
}
|
|
98
|
+
if (proc.status !== 0) {
|
|
99
|
+
// throw new UnscopedValidationError(
|
|
100
|
+
throw new Error(`${command.join(" ")} exited with status: ${proc.status}\n\nstdout: ${proc.stdout?.toString().trim()}\n\nstderr: ${proc.stderr?.toString().trim()}`);
|
|
101
|
+
}
|
|
102
|
+
return new AssetCode(output, options);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Loads the function code from an asset created by a Docker build.
|
|
106
|
+
*
|
|
107
|
+
* By default, the asset is expected to be located at `/asset` in the
|
|
108
|
+
* image.
|
|
109
|
+
*
|
|
110
|
+
* @param path The path to the directory containing the Docker file
|
|
111
|
+
* @param options Docker build options
|
|
112
|
+
*/
|
|
113
|
+
static fromDockerBuild(path, options = {}) {
|
|
114
|
+
let imagePath = options.imagePath ?? "/asset/.";
|
|
115
|
+
// ensure imagePath ends with /. to copy the **content** at this path
|
|
116
|
+
if (imagePath.endsWith("/")) {
|
|
117
|
+
imagePath = `${imagePath}.`;
|
|
118
|
+
}
|
|
119
|
+
else if (!imagePath.endsWith("/.")) {
|
|
120
|
+
imagePath = `${imagePath}/.`;
|
|
121
|
+
}
|
|
122
|
+
const assetPath = bundling_1.DockerImage.fromBuild(path, options).cp(imagePath, options.outputPath);
|
|
123
|
+
return new AssetCode(assetPath);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* DEPRECATED
|
|
127
|
+
* @deprecated use `fromAsset`
|
|
128
|
+
*/
|
|
129
|
+
static asset(path) {
|
|
130
|
+
return this.fromAsset(path);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Creates a new Lambda source defined using Terraform variables.
|
|
134
|
+
*
|
|
135
|
+
* @returns a new instance of `TerraformVariablesCode`
|
|
136
|
+
* @param props optional construction properties of `TerraformVariablesCode`
|
|
137
|
+
*/
|
|
138
|
+
static fromTerraformVariables(props) {
|
|
139
|
+
return new TerraformVariablesCode(props);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* DEPRECATED
|
|
143
|
+
* @deprecated use `fromCfnParameters`
|
|
144
|
+
*/
|
|
145
|
+
static terraformVariables(props) {
|
|
146
|
+
return this.fromTerraformVariables(props);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Use an existing ECR image as the Lambda code.
|
|
150
|
+
* @param repository the ECR repository that the image is in
|
|
151
|
+
* @param props properties to further configure the selected image
|
|
152
|
+
*/
|
|
153
|
+
static fromEcrImage(repository, props) {
|
|
154
|
+
return new EcrImageCode(repository, props);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Create an ECR image from the specified asset and bind it as the Lambda code.
|
|
158
|
+
* @param directory the directory from which the asset must be created
|
|
159
|
+
* @param props properties to further configure the selected image
|
|
160
|
+
*/
|
|
161
|
+
static fromAssetImage(directory, props = {}) {
|
|
162
|
+
return new AssetImageCode(directory, props);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.Code = Code;
|
|
166
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
167
|
+
Code[_a] = { fqn: "terraconstructs.aws.compute.Code", version: "0.1.1" };
|
|
168
|
+
/**
|
|
169
|
+
* Lambda code from an S3 archive.
|
|
170
|
+
*/
|
|
171
|
+
class S3Code extends Code {
|
|
172
|
+
constructor(bucket, key, objectVersion) {
|
|
173
|
+
super();
|
|
174
|
+
this.key = key;
|
|
175
|
+
this.objectVersion = objectVersion;
|
|
176
|
+
this.isInline = false;
|
|
177
|
+
if (!bucket.bucketName) {
|
|
178
|
+
// throw new ValidationError(
|
|
179
|
+
throw new Error("bucketName is undefined for the provided bucket");
|
|
180
|
+
}
|
|
181
|
+
this.bucketName = bucket.bucketName;
|
|
182
|
+
}
|
|
183
|
+
bind(_scope) {
|
|
184
|
+
return {
|
|
185
|
+
s3Location: {
|
|
186
|
+
bucketName: this.bucketName,
|
|
187
|
+
objectKey: this.key,
|
|
188
|
+
objectVersion: this.objectVersion,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.S3Code = S3Code;
|
|
194
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
195
|
+
S3Code[_b] = { fqn: "terraconstructs.aws.compute.S3Code", version: "0.1.1" };
|
|
196
|
+
/**
|
|
197
|
+
* Lambda code from an S3 archive. With option to set KMSKey for encryption.
|
|
198
|
+
*/
|
|
199
|
+
class S3CodeV2 extends Code {
|
|
200
|
+
constructor(bucket, key, options) {
|
|
201
|
+
super();
|
|
202
|
+
this.key = key;
|
|
203
|
+
this.options = options;
|
|
204
|
+
this.isInline = false;
|
|
205
|
+
if (!bucket.bucketName) {
|
|
206
|
+
// throw new ValidationError(
|
|
207
|
+
throw new Error("bucketName is undefined for the provided bucket");
|
|
208
|
+
}
|
|
209
|
+
this.bucketName = bucket.bucketName;
|
|
210
|
+
}
|
|
211
|
+
bind(_scope) {
|
|
212
|
+
return {
|
|
213
|
+
s3Location: {
|
|
214
|
+
bucketName: this.bucketName,
|
|
215
|
+
objectKey: this.key,
|
|
216
|
+
objectVersion: this.options?.objectVersion,
|
|
217
|
+
},
|
|
218
|
+
sourceKMSKeyArn: this.options?.sourceKMSKey?.keyArn,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.S3CodeV2 = S3CodeV2;
|
|
223
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
224
|
+
S3CodeV2[_c] = { fqn: "terraconstructs.aws.compute.S3CodeV2", version: "0.1.1" };
|
|
225
|
+
/**
|
|
226
|
+
* Lambda code from an inline string.
|
|
227
|
+
*/
|
|
228
|
+
class InlineCode extends Code {
|
|
229
|
+
constructor(code) {
|
|
230
|
+
super();
|
|
231
|
+
this.code = code;
|
|
232
|
+
this.isInline = true;
|
|
233
|
+
if (code.length === 0) {
|
|
234
|
+
// throw new UnscopedValidationError(
|
|
235
|
+
throw new Error("Lambda inline code cannot be empty");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
bind(_scope) {
|
|
239
|
+
return {
|
|
240
|
+
inlineCode: this.code,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
exports.InlineCode = InlineCode;
|
|
245
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
246
|
+
InlineCode[_d] = { fqn: "terraconstructs.aws.compute.InlineCode", version: "0.1.1" };
|
|
247
|
+
/**
|
|
248
|
+
* Lambda code from a local directory.
|
|
249
|
+
*/
|
|
250
|
+
class AssetCode extends Code {
|
|
251
|
+
/**
|
|
252
|
+
* @param path The path to the asset file or directory.
|
|
253
|
+
*/
|
|
254
|
+
constructor(path, options = {}) {
|
|
255
|
+
super();
|
|
256
|
+
this.path = path;
|
|
257
|
+
this.options = options;
|
|
258
|
+
this.isInline = false;
|
|
259
|
+
}
|
|
260
|
+
bind(scope) {
|
|
261
|
+
// If the same AssetCode is used multiple times, retain only the first instantiation.
|
|
262
|
+
if (!this.asset) {
|
|
263
|
+
this.asset = new s3_assets.Asset(scope, "Code", {
|
|
264
|
+
path: this.path,
|
|
265
|
+
deployTime: true,
|
|
266
|
+
...this.options,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
else if (aws_stack_1.AwsStack.ofAwsConstruct(this.asset) !== aws_stack_1.AwsStack.ofAwsConstruct(scope)) {
|
|
270
|
+
// throw new ValidationError(
|
|
271
|
+
throw new Error(`Asset is already associated with another stack '${aws_stack_1.AwsStack.ofAwsConstruct(this.asset).gridUUID}'. ` +
|
|
272
|
+
"Create a new Code instance for every stack.");
|
|
273
|
+
}
|
|
274
|
+
if (!this.asset.isZipArchive) {
|
|
275
|
+
// throw new ValidationError(
|
|
276
|
+
throw new Error(`Asset must be a .zip file or a directory (${this.path})`);
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
s3Location: {
|
|
280
|
+
bucketName: this.asset.s3BucketName,
|
|
281
|
+
objectKey: this.asset.s3ObjectKey,
|
|
282
|
+
},
|
|
283
|
+
sourceKMSKeyArn: this.options.sourceKMSKey?.keyArn,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.AssetCode = AssetCode;
|
|
288
|
+
_e = JSII_RTTI_SYMBOL_1;
|
|
289
|
+
AssetCode[_e] = { fqn: "terraconstructs.aws.compute.AssetCode", version: "0.1.1" };
|
|
290
|
+
/**
|
|
291
|
+
* Lambda code defined using 2 Terraform variables.
|
|
292
|
+
* Useful when you don't have access to the code of your Lambda from your CDK code, so you can't use Assets,
|
|
293
|
+
* and you want to deploy the Lambda in a pipeline, during Terraform execution.
|
|
294
|
+
*/
|
|
295
|
+
class TerraformVariablesCode extends Code {
|
|
296
|
+
constructor(props = {}) {
|
|
297
|
+
super();
|
|
298
|
+
this.isInline = false;
|
|
299
|
+
this._bucketNameVar = props.bucketNameVar;
|
|
300
|
+
this._objectKeyVar = props.objectKeyVar;
|
|
301
|
+
this._sourceKMSKey = props.sourceKMSKey;
|
|
302
|
+
}
|
|
303
|
+
bind(scope) {
|
|
304
|
+
if (!this._bucketNameVar) {
|
|
305
|
+
this._bucketNameVar = new cdktf.TerraformVariable(scope, "LambdaSourceBucketNameParameter", {
|
|
306
|
+
type: "String",
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
if (!this._objectKeyVar) {
|
|
310
|
+
this._objectKeyVar = new cdktf.TerraformVariable(scope, "LambdaSourceObjectKeyParameter", {
|
|
311
|
+
type: "String",
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
return {
|
|
315
|
+
s3Location: {
|
|
316
|
+
bucketName: this._bucketNameVar.stringValue,
|
|
317
|
+
objectKey: this._objectKeyVar.stringValue,
|
|
318
|
+
},
|
|
319
|
+
sourceKMSKeyArn: this._sourceKMSKey?.keyArn,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Create a parameters map from this instance's Terraform variables.
|
|
324
|
+
*
|
|
325
|
+
* It returns a map with 2 keys that correspond to the names of the parameters defined in this Lambda code,
|
|
326
|
+
* and as values it contains the appropriate expressions pointing at the provided S3 location
|
|
327
|
+
* (most likely, obtained from a CodePipeline Artifact by calling the `artifact.s3Location` method).
|
|
328
|
+
* The result should be provided to the CloudFormation Action
|
|
329
|
+
* that is deploying the Stack that the Lambda with this code is part of,
|
|
330
|
+
* in the `parameterOverrides` property.
|
|
331
|
+
*
|
|
332
|
+
* @param location the location of the object in S3 that represents the Lambda code
|
|
333
|
+
*/
|
|
334
|
+
assign(location) {
|
|
335
|
+
const ret = {};
|
|
336
|
+
ret[this.bucketNameVar] = location.bucketName;
|
|
337
|
+
ret[this.objectKeyVar] = location.objectKey;
|
|
338
|
+
return ret;
|
|
339
|
+
}
|
|
340
|
+
get bucketNameVar() {
|
|
341
|
+
if (this._bucketNameVar) {
|
|
342
|
+
return this._bucketNameVar.fqn;
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
// throw new UnscopedValidationError(
|
|
346
|
+
throw new Error("Pass TerraformVariablesCode to a Lambda Function before accessing the bucketNameVar property");
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
get objectKeyVar() {
|
|
350
|
+
if (this._objectKeyVar) {
|
|
351
|
+
return this._objectKeyVar.fqn;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// throw new UnscopedValidationError(
|
|
355
|
+
throw new Error("Pass TerraformVariablesCode to a Lambda Function before accessing the objectKeyVar property");
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
exports.TerraformVariablesCode = TerraformVariablesCode;
|
|
360
|
+
_f = JSII_RTTI_SYMBOL_1;
|
|
361
|
+
TerraformVariablesCode[_f] = { fqn: "terraconstructs.aws.compute.TerraformVariablesCode", version: "0.1.1" };
|
|
362
|
+
/**
|
|
363
|
+
* Represents a Docker image in ECR that can be bound as Lambda Code.
|
|
364
|
+
*/
|
|
365
|
+
class EcrImageCode extends Code {
|
|
366
|
+
constructor(repository, props = {}) {
|
|
367
|
+
super();
|
|
368
|
+
this.repository = repository;
|
|
369
|
+
this.props = props;
|
|
370
|
+
this.isInline = false;
|
|
371
|
+
}
|
|
372
|
+
bind(_scope) {
|
|
373
|
+
this.repository.grantPull(new iam.ServicePrincipal("lambda.amazonaws.com"));
|
|
374
|
+
return {
|
|
375
|
+
image: {
|
|
376
|
+
imageUri: this.repository.repositoryUriForTagOrDigest(this.props?.tagOrDigest ?? this.props?.tag ?? "latest"),
|
|
377
|
+
cmd: this.props.cmd,
|
|
378
|
+
entrypoint: this.props.entrypoint,
|
|
379
|
+
workingDirectory: this.props.workingDirectory,
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
exports.EcrImageCode = EcrImageCode;
|
|
385
|
+
_g = JSII_RTTI_SYMBOL_1;
|
|
386
|
+
EcrImageCode[_g] = { fqn: "terraconstructs.aws.compute.EcrImageCode", version: "0.1.1" };
|
|
387
|
+
/**
|
|
388
|
+
* Represents an ECR image that will be constructed from the specified asset and can be bound as Lambda code.
|
|
389
|
+
*/
|
|
390
|
+
class AssetImageCode extends Code {
|
|
391
|
+
constructor(directory, props) {
|
|
392
|
+
super();
|
|
393
|
+
this.directory = directory;
|
|
394
|
+
this.props = props;
|
|
395
|
+
this.isInline = false;
|
|
396
|
+
}
|
|
397
|
+
bind(scope) {
|
|
398
|
+
// If the same AssetImageCode is used multiple times, retain only the first instantiation.
|
|
399
|
+
if (!this.asset) {
|
|
400
|
+
this.asset = new ecr_assets.DockerImageAsset(scope, "AssetImage", {
|
|
401
|
+
directory: this.directory,
|
|
402
|
+
...this.props,
|
|
403
|
+
});
|
|
404
|
+
this.asset.repository.grantPull(new iam.ServicePrincipal("lambda.amazonaws.com"));
|
|
405
|
+
}
|
|
406
|
+
else if (aws_stack_1.AwsStack.ofAwsConstruct(this.asset) !== aws_stack_1.AwsStack.ofAwsConstruct(scope)) {
|
|
407
|
+
// throw new ValidationError(
|
|
408
|
+
throw new Error(`Asset is already associated with another stack '${aws_stack_1.AwsStack.ofAwsConstruct(this.asset).gridUUID}'. ` +
|
|
409
|
+
"Create a new Code instance for every stack.");
|
|
410
|
+
}
|
|
411
|
+
return {
|
|
412
|
+
image: {
|
|
413
|
+
imageUri: this.asset.imageUri,
|
|
414
|
+
entrypoint: this.props.entrypoint,
|
|
415
|
+
cmd: this.props.cmd,
|
|
416
|
+
workingDirectory: this.props.workingDirectory,
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
exports.AssetImageCode = AssetImageCode;
|
|
422
|
+
_h = JSII_RTTI_SYMBOL_1;
|
|
423
|
+
AssetImageCode[_h] = { fqn: "terraconstructs.aws.compute.AssetImageCode", version: "0.1.1" };
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQTBDO0FBQzFDLCtCQUErQjtBQUUvQiw2Q0FBaUU7QUFDakUsNENBQXdDO0FBRXhDLDhCQUE4QjtBQUU5QixvREFBb0Q7QUFDcEQsNERBQTREO0FBQzVELGtEQUFrRDtBQUNsRCxzQ0FBc0M7QUFDdEMsK0NBQStDO0FBQy9DLDhDQUE4QztBQUM5QyxXQUFXO0FBQ1gsNkJBQTZCO0FBQzdCLHFCQUFxQjtBQUNyQixrQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxNQUFzQixJQUFJO0lBQ3hCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FDdEIsTUFBdUIsRUFDdkIsR0FBVyxFQUNYLGFBQXNCO1FBRXRCLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLE1BQXVCLEVBQ3ZCLEdBQVcsRUFDWCxPQUF1QjtRQUV2QixPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLE1BQXVCLEVBQ3ZCLEdBQVcsRUFDWCxhQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLElB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Q0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQ3RFLENBQUM7WUFDRCw2QkFBNkI7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixtREFBbUQsb0JBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsS0FBSztnQkFDbEcsNkNBQTZDLENBRWhELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUNqQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNuQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjthQUM5QztTQUNGLENBQUM7SUFDSixDQUFDOztBQXhDSCx3Q0F5REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2UsIERvY2tlckJ1aWxkT3B0aW9ucyB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBJS2V5IH0gZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBzdG9yYWdlIGZyb20gXCIuLi9zdG9yYWdlXCI7XG4vLyBpbXBvcnQgeyBJQXdzQ29uc3RydWN0IH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCAqIGFzIGVjcl9hc3NldHMgZnJvbSBcIi4uL3N0b3JhZ2UvYXNzZXRzL2ltYWdlLWFzc2V0XCI7XG5pbXBvcnQgKiBhcyBzM19hc3NldHMgZnJvbSBcIi4uL3N0b3JhZ2UvYXNzZXRzL3MzXCI7XG4vLyBUT0RPOiBBZG9wdCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvclxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzM4Mi9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMwNDVcbi8vIGltcG9ydCB7XG4vLyAgIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLFxuLy8gICBWYWxpZGF0aW9uRXJyb3IsXG4vLyB9IGZyb20gXCIuLi8uLi9jb3JlL2xpYi9lcnJvcnNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBMYW1iZGEgSGFuZGxlciBDb2RlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29kZSB7XG4gIC8qKlxuICAgKiBMYW1iZGEgaGFuZGxlciBjb2RlIGFzIGFuIFMzIG9iamVjdC5cbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0XG4gICAqIEBwYXJhbSBrZXkgVGhlIG9iamVjdCBrZXlcbiAgICogQHBhcmFtIG9iamVjdFZlcnNpb24gT3B0aW9uYWwgUzMgb2JqZWN0IHZlcnNpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldChcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvYmplY3RWZXJzaW9uPzogc3RyaW5nLFxuICApOiBTM0NvZGUge1xuICAgIHJldHVybiBuZXcgUzNDb2RlKGJ1Y2tldCwga2V5LCBvYmplY3RWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYW1iZGEgaGFuZGxlciBjb2RlIGFzIGFuIFMzIG9iamVjdC5cbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0XG4gICAqIEBwYXJhbSBrZXkgVGhlIG9iamVjdCBrZXlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2V0dGluZyB0aGUgY29kZSwgY3VycmVudCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHNldCBoZXJlIGFyZVxuICAgKiAxLiBgb2JqZWN0VmVyc2lvbmAgdG8gc2V0IFMzIG9iamVjdCB2ZXJzaW9uXG4gICAqIDIuIGBzb3VyY2VLTVNLZXlgIHRvIHNldCBLTVMgS2V5IGZvciBlbmNyeXB0aW9uIG9mIGNvZGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldFYyKFxuICAgIGJ1Y2tldDogc3RvcmFnZS5JQnVja2V0LFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBCdWNrZXRPcHRpb25zLFxuICApOiBTM0NvZGVWMiB7XG4gICAgcmV0dXJuIG5ldyBTM0NvZGVWMihidWNrZXQsIGtleSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZyb21CdWNrZXRgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1Y2tldChcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvYmplY3RWZXJzaW9uPzogc3RyaW5nLFxuICApOiBTM0NvZGUge1xuICAgIHJldHVybiB0aGlzLmZyb21CdWNrZXQoYnVja2V0LCBrZXksIG9iamVjdFZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIElubGluZSBjb2RlIGZvciBMYW1iZGEgaGFuZGxlclxuICAgKiBAcmV0dXJucyBgTGFtYmRhSW5saW5lQ29kZWAgd2l0aCBpbmxpbmUgY29kZS5cbiAgICogQHBhcmFtIGNvZGUgVGhlIGFjdHVhbCBoYW5kbGVyIGNvZGUgKHRoZSByZXN1bHRpbmcgemlwIGZpbGUgY2Fubm90IGV4Y2VlZCA0TUIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoY29kZTogc3RyaW5nKTogSW5saW5lQ29kZSB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb2RlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBmcm9tSW5saW5lYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmxpbmUoY29kZTogc3RyaW5nKTogSW5saW5lQ29kZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUlubGluZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZnVuY3Rpb24gY29kZSBmcm9tIGEgbG9jYWwgZGlzayBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBFaXRoZXIgYSBkaXJlY3Rvcnkgd2l0aCB0aGUgTGFtYmRhIGNvZGUgYnVuZGxlIG9yIGEgLnppcCBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMsXG4gICk6IEFzc2V0Q29kZSB7XG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUocGF0aCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGNvbW1hbmQgdG8gYnVpbGQgdGhlIGNvZGUgYXNzZXQgdGhhdCB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvdXRwdXQgV2hlcmUgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCB3aWxsIGJlIGRpcmVjdGVkLCBlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYSAuemlwIGZpbGUgd2l0aCB0aGUgb3V0cHV0IExhbWJkYSBjb2RlIGJ1bmRsZVxuICAgKiAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoZSBjb21tYW5kIHRvIHJ1biBhIGJ1aWxkIHNjcmlwdCAoZS5nLiwgWyAnbm9kZScsICdidW5kbGVfY29kZS5qcycgXSksIGFuZCB0aGUgYnVpbGQgc2NyaXB0IGdlbmVyYXRlcyBhIGRpcmVjdG9yeSBgL215L2xhbWJkYS9jb2RlYFxuICAgKiBjb250YWluaW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgcmFuIGluIGEgTGFtYmRhIGZ1bmN0aW9uLCB0aGVuIG91dHB1dCBzaG91bGQgYmUgc2V0IHRvIGAvbXkvbGFtYmRhL2NvZGVgXG4gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgdG8gZ2VuZXJhdGUgdGhlIG91dHB1dCwgZm9yIGV4YW1wbGUsIFsgJ25vZGUnLCAnYnVuZGxlX2NvZGUuanMnIF1cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgdGhlIGN1c3RvbSBjb21tYW5kLCBhbmQgb3RoZXIgYXNzZXQgb3B0aW9ucyAtLSBidXQgYnVuZGxpbmcgb3B0aW9ucyBhcmUgbm90IGFsbG93ZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DdXN0b21Db21tYW5kKFxuICAgIG91dHB1dDogc3RyaW5nLFxuICAgIGNvbW1hbmQ6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM/OiBDdXN0b21Db21tYW5kT3B0aW9ucyxcbiAgKTogQXNzZXRDb2RlIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2NvbW1hbmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIFtcIm5vZGVcIiwgXCJidWlsZEZpbGUuanNcIl0uJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY21kID0gY29tbWFuZFswXTtcbiAgICBjb25zdCBjb21tYW5kQXJndW1lbnRzID0gY29tbWFuZC5zcGxpY2UoMSk7XG5cbiAgICBjb25zdCBwcm9jID1cbiAgICAgIG9wdGlvbnM/LmNvbW1hbmRPcHRpb25zID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGF3blN5bmMoY21kLCBjb21tYW5kQXJndW1lbnRzKSAvLyB1c2UgdGhlIGRlZmF1bHQgc3Bhd25TeW5jT3B0aW9uc1xuICAgICAgICA6IHNwYXduU3luYyhjbWQsIGNvbW1hbmRBcmd1bWVudHMsIG9wdGlvbnMuY29tbWFuZE9wdGlvbnMpO1xuXG4gICAgaWYgKHByb2MuZXJyb3IpIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgY3VzdG9tIGNvbW1hbmQ6ICR7cHJvYy5lcnJvcn1gKTtcbiAgICB9XG4gICAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2NvbW1hbmQuam9pbihcIiBcIil9IGV4aXRlZCB3aXRoIHN0YXR1czogJHtwcm9jLnN0YXR1c31cXG5cXG5zdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUob3V0cHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZnVuY3Rpb24gY29kZSBmcm9tIGFuIGFzc2V0IGNyZWF0ZWQgYnkgYSBEb2NrZXIgYnVpbGQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBhc3NldCBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIGF0IGAvYXNzZXRgIGluIHRoZVxuICAgKiBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBEb2NrZXIgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBEb2NrZXIgYnVpbGQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRG9ja2VyQnVpbGQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IERvY2tlckJ1aWxkQXNzZXRPcHRpb25zID0ge30sXG4gICk6IEFzc2V0Q29kZSB7XG4gICAgbGV0IGltYWdlUGF0aCA9IG9wdGlvbnMuaW1hZ2VQYXRoID8/IFwiL2Fzc2V0Ly5cIjtcblxuICAgIC8vIGVuc3VyZSBpbWFnZVBhdGggZW5kcyB3aXRoIC8uIHRvIGNvcHkgdGhlICoqY29udGVudCoqIGF0IHRoaXMgcGF0aFxuICAgIGlmIChpbWFnZVBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBpbWFnZVBhdGggPSBgJHtpbWFnZVBhdGh9LmA7XG4gICAgfSBlbHNlIGlmICghaW1hZ2VQYXRoLmVuZHNXaXRoKFwiLy5cIikpIHtcbiAgICAgIGltYWdlUGF0aCA9IGAke2ltYWdlUGF0aH0vLmA7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRQYXRoID0gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGgsIG9wdGlvbnMpLmNwKFxuICAgICAgaW1hZ2VQYXRoLFxuICAgICAgb3B0aW9ucy5vdXRwdXRQYXRoLFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2V0Q29kZShhc3NldFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBmcm9tQXNzZXRgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzc2V0KHBhdGg6IHN0cmluZyk6IEFzc2V0Q29kZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUFzc2V0KHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTGFtYmRhIHNvdXJjZSBkZWZpbmVkIHVzaW5nIFRlcnJhZm9ybSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlYFxuICAgKiBAcGFyYW0gcHJvcHMgb3B0aW9uYWwgY29uc3RydWN0aW9uIHByb3BlcnRpZXMgb2YgYFRlcnJhZm9ybVZhcmlhYmxlc0NvZGVgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21UZXJyYWZvcm1WYXJpYWJsZXMoXG4gICAgcHJvcHM/OiBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMsXG4gICk6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUge1xuICAgIHJldHVybiBuZXcgVGVycmFmb3JtVmFyaWFibGVzQ29kZShwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZyb21DZm5QYXJhbWV0ZXJzYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0ZXJyYWZvcm1WYXJpYWJsZXMoXG4gICAgcHJvcHM/OiBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMsXG4gICk6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUge1xuICAgIHJldHVybiB0aGlzLmZyb21UZXJyYWZvcm1WYXJpYWJsZXMocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhbiBleGlzdGluZyBFQ1IgaW1hZ2UgYXMgdGhlIExhbWJkYSBjb2RlLlxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgRUNSIHJlcG9zaXRvcnkgdGhhdCB0aGUgaW1hZ2UgaXMgaW5cbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FY3JJbWFnZShcbiAgICByZXBvc2l0b3J5OiBzdG9yYWdlLklSZXBvc2l0b3J5LFxuICAgIHByb3BzPzogRWNySW1hZ2VDb2RlUHJvcHMsXG4gICkge1xuICAgIHJldHVybiBuZXcgRWNySW1hZ2VDb2RlKHJlcG9zaXRvcnksIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gRUNSIGltYWdlIGZyb20gdGhlIHNwZWNpZmllZCBhc3NldCBhbmQgYmluZCBpdCBhcyB0aGUgTGFtYmRhIGNvZGUuXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSBhc3NldCBtdXN0IGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldEltYWdlKFxuICAgIGRpcmVjdG9yeTogc3RyaW5nLFxuICAgIHByb3BzOiBBc3NldEltYWdlQ29kZVByb3BzID0ge30sXG4gICkge1xuICAgIHJldHVybiBuZXcgQXNzZXRJbWFnZUNvZGUoZGlyZWN0b3J5LCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgQ29kZSBpcyBpbmxpbmUgY29kZSBvciBub3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHRoaXMgdmFsdWUgaXMgaWdub3JlZCBzaW5jZSBpbmxpbmUgaXMgbm93IGRldGVybWluZWQgYmFzZWQgb24gdGhlXG4gICAqIHRoZSBgaW5saW5lQ29kZWAgZmllbGQgb2YgYENvZGVDb25maWdgIHJldHVybmVkIGZyb20gYGJpbmQoKWAuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNJbmxpbmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBsYW1iZGEgb3IgbGF5ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmluZFxuICAgKiB0byB0aGUgc3RhY2ssIGFkZCByZXNvdXJjZXMgYW5kIGhhdmUgZnVuLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGJpbmRpbmcgc2NvcGUuIERvbid0IGJlIHNtYXJ0IGFib3V0IHRyeWluZyB0byBkb3duLWNhc3Qgb3JcbiAgICogYXNzdW1lIGl0J3MgaW5pdGlhbGl6ZWQuIFlvdSBtYXkganVzdCB1c2UgaXQgYXMgYSBjb25zdHJ1Y3Qgc2NvcGUuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYmluZChzY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZztcblxuICAvLyBUT0RPOiBwZW5kaW5nIGN1c3RvbSBDTEkgdG8gbW9jayBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbnMgbG9jYWxseVxuICAvLyAvKipcbiAgLy8gICogQ2FsbGVkIGFmdGVyIHRoZSB0ZXJyYWZvcm0gcHJvdmlkZXIgZnVuY3Rpb24gcmVzb3VyY2UgaGFzIGJlZW4gY3JlYXRlZCB0byBhbGxvdyB0aGUgY29kZVxuICAvLyAgKiBjbGFzcyB0byBiaW5kIHRvIGl0LiBTcGVjaWZpY2FsbHkgaXQncyByZXF1aXJlZCB0byBhbGxvdyBhc3NldHMgdG8gYWRkXG4gIC8vICAqIG1ldGFkYXRhIGZvciB0b29saW5nIGxpa2UgU0FNIENMSSB0byBiZSBhYmxlIHRvIGZpbmQgdGhlaXIgb3JpZ2lucy5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBiaW5kVG9SZXNvdXJjZShcbiAgLy8gICBfcmVzb3VyY2U6IElBd3NDb25zdHJ1Y3QsXG4gIC8vICAgX29wdGlvbnM/OiBSZXNvdXJjZUJpbmRPcHRpb25zLFxuICAvLyApIHtcbiAgLy8gICByZXR1cm47XG4gIC8vIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYmluZGluZyBgQ29kZWAgaW50byBhIGBGdW5jdGlvbmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvZGUgaW4gUzMgKG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBpbmxpbmVDb2RlYCBhbmQgYGltYWdlYCkuXG4gICAqIEBkZWZhdWx0IC0gY29kZSBpcyBub3QgYW4gczMgbG9jYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzTG9jYXRpb24/OiBzdG9yYWdlLlMzTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIElubGluZSBjb2RlIChtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgczNMb2NhdGlvbmAgYW5kIGBpbWFnZWApLlxuICAgKiBAZGVmYXVsdCAtIGNvZGUgaXMgbm90IGlubGluZSBjb2RlXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVDb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgY29uZmlndXJhdGlvbiAobXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHMzTG9jYXRpb25gIGFuZCBgaW5saW5lQ29kZWApLlxuICAgKiBAZGVmYXVsdCAtIGNvZGUgaXMgbm90IGFuIEVDUiBjb250YWluZXIgaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogQ29kZUltYWdlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgaGFuZGxlciBjb2RlLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzKFNTRS1TMykga2V5IHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUtNU0tleUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBoYXNoIG9mIHRoZSBzb3VyY2UgY29kZSwgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvZGUgaGFzIGNoYW5nZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb2RlSGFzaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgdGhlIGJpbmQgd2hlbiBhbiBFQ1IgaW1hZ2UgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlSW1hZ2VDb25maWcge1xuICAvKipcbiAgICogVVJJIHRvIHRoZSBEb2NrZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVVyaTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBDTUQgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jY21kXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBDTUQgc3BlY2lmaWVkIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNtZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBFTlRSWVBPSU5UIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIEFuIEVOVFJZUE9JTlQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBjb250YWluZXIgdGhhdCB3aWxsIHJ1biBhcyBhbiBleGVjdXRhYmxlLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGluIHRoZSAnZXhlYyBmb3JtJywgdml6LiwgYFsgJ2V4ZWN1dGFibGUnLCAncGFyYW0xJywgJ3BhcmFtMicgXWAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNlbnRyeXBvaW50XG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBFTlRSWVBPSU5UIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgV09SS0RJUiBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBIFdPUktESVIgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb250YWluZXIgd2lsbCB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyN3b3JrZGlyXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBXT1JLRElSIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZnJvbSBhbiBTMyBhcmNoaXZlLlxuICovXG5leHBvcnQgY2xhc3MgUzNDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZSA9IGZhbHNlO1xuICBwcml2YXRlIGJ1Y2tldE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBwcml2YXRlIGtleTogc3RyaW5nLFxuICAgIHByaXZhdGUgb2JqZWN0VmVyc2lvbj86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXRcIixcbiAgICAgICAgLy8gYnVja2V0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1Y2tldE5hbWUgPSBidWNrZXQuYnVja2V0TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHMzTG9jYXRpb246IHtcbiAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgY29kZSBmcm9tIGFuIFMzIGFyY2hpdmUuIFdpdGggb3B0aW9uIHRvIHNldCBLTVNLZXkgZm9yIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTM0NvZGVWMiBleHRlbmRzIENvZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNJbmxpbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVja2V0OiBzdG9yYWdlLklCdWNrZXQsXG4gICAgcHJpdmF0ZSBrZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIG9wdGlvbnM/OiBCdWNrZXRPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXRcIixcbiAgICAgICAgLy8gYnVja2V0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1Y2tldE5hbWUgPSBidWNrZXQuYnVja2V0TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHMzTG9jYXRpb246IHtcbiAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9wdGlvbnM/Lm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgICAgc291cmNlS01TS2V5QXJuOiB0aGlzLm9wdGlvbnM/LnNvdXJjZUtNU0tleT8ua2V5QXJuLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgY29kZSBmcm9tIGFuIGlubGluZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmxpbmVDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2RlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGNvZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMYW1iZGEgaW5saW5lIGNvZGUgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZUNvZGU6IHRoaXMuY29kZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZnJvbSBhIGxvY2FsIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0Q29kZSBleHRlbmRzIENvZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNJbmxpbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhc3NldD86IHMzX2Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGFzc2V0IGZpbGUgb3IgZGlyZWN0b3J5LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDb2RlQ29uZmlnIHtcbiAgICAvLyBJZiB0aGUgc2FtZSBBc3NldENvZGUgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgcmV0YWluIG9ubHkgdGhlIGZpcnN0IGluc3RhbnRpYXRpb24uXG4gICAgaWYgKCF0aGlzLmFzc2V0KSB7XG4gICAgICB0aGlzLmFzc2V0ID0gbmV3IHMzX2Fzc2V0cy5Bc3NldChzY29wZSwgXCJDb2RlXCIsIHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBkZXBsb3lUaW1lOiB0cnVlLFxuICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy5hc3NldCkgIT09IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKVxuICAgICkge1xuICAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFzc2V0IGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgc3RhY2sgJyR7QXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy5hc3NldCkuZ3JpZFVVSUR9Jy4gYCArXG4gICAgICAgICAgXCJDcmVhdGUgYSBuZXcgQ29kZSBpbnN0YW5jZSBmb3IgZXZlcnkgc3RhY2suXCIsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXNzZXQuaXNaaXBBcmNoaXZlKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXNzZXQgbXVzdCBiZSBhIC56aXAgZmlsZSBvciBhIGRpcmVjdG9yeSAoJHt0aGlzLnBhdGh9KWAsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgczNMb2NhdGlvbjoge1xuICAgICAgICBidWNrZXROYW1lOiB0aGlzLmFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICAgICAgb2JqZWN0S2V5OiB0aGlzLmFzc2V0LnMzT2JqZWN0S2V5LFxuICAgICAgfSxcbiAgICAgIHNvdXJjZUtNU0tleUFybjogdGhpcy5vcHRpb25zLnNvdXJjZUtNU0tleT8ua2V5QXJuLFxuICAgIH07XG4gIH1cblxuICAvLyBwdWJsaWMgYmluZFRvUmVzb3VyY2UoXG4gIC8vICAgcmVzb3VyY2U6IElBd3NDb25zdHJ1Y3QsXG4gIC8vICAgb3B0aW9uczogUmVzb3VyY2VCaW5kT3B0aW9ucyA9IHt9LFxuICAvLyApIHtcbiAgLy8gICBpZiAoIXRoaXMuYXNzZXQpIHtcbiAgLy8gICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gIC8vICAgICAgIFwiYmluZFRvUmVzb3VyY2UoKSBtdXN0IGJlIGNhbGxlZCBhZnRlciBiaW5kKClcIixcbiAgLy8gICAgICAgLy8gcmVzb3VyY2UsXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHJlc291cmNlUHJvcGVydHkgPSBvcHRpb25zLnJlc291cmNlUHJvcGVydHkgfHwgXCJDb2RlXCI7XG4gIC8vICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDMyXG4gIC8vICAgdGhpcy5hc3NldC5hZGRSZXNvdXJjZU1ldGFkYXRhKHJlc291cmNlLCByZXNvdXJjZVByb3BlcnR5KTtcbiAgLy8gfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQmluZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFubm90YXRlIHdpdGggYXNzZXQgbWV0YWRhdGEuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDMyXG4gICAqIEBkZWZhdWx0IENvZGVcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlUHJvcGVydHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMge1xuICAvKipcbiAgICogVGhlIFRlcnJhZm9ybSB2YXJpYWJsZSB0aGF0IHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIFMzIEJ1Y2tldFxuICAgKiB3aGVyZSB0aGUgTGFtYmRhIGNvZGUgd2lsbCBiZSBsb2NhdGVkIGluLlxuICAgKiBNdXN0IGJlIG9mIHR5cGUgJ1N0cmluZycuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IHZhcmlhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZVZhcj86IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgVGVycmFmb3JtIHZhcmlhYmxlIHRoYXQgcmVwcmVzZW50cyB0aGUgcGF0aCBpbnNpZGUgdGhlIFMzIEJ1Y2tldFxuICAgKiB3aGVyZSB0aGUgTGFtYmRhIGNvZGUgd2lsbCBiZSBsb2NhdGVkIGF0LlxuICAgKiBNdXN0IGJlIG9mIHR5cGUgJ1N0cmluZycuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IHZhcmlhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb2JqZWN0S2V5VmFyPzogY2RrdGYuVGVycmFmb3JtVmFyaWFibGU7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgaGFuZGxlciBjb2RlLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzKFNTRS1TMykga2V5IHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUtNU0tleT86IElLZXk7XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZGVmaW5lZCB1c2luZyAyIFRlcnJhZm9ybSB2YXJpYWJsZXMuXG4gKiBVc2VmdWwgd2hlbiB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvZGUgb2YgeW91ciBMYW1iZGEgZnJvbSB5b3VyIENESyBjb2RlLCBzbyB5b3UgY2FuJ3QgdXNlIEFzc2V0cyxcbiAqIGFuZCB5b3Ugd2FudCB0byBkZXBsb3kgdGhlIExhbWJkYSBpbiBhIHBpcGVsaW5lLCBkdXJpbmcgVGVycmFmb3JtIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUgZXh0ZW5kcyBDb2RlIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzSW5saW5lID0gZmFsc2U7XG4gIHByaXZhdGUgX2J1Y2tldE5hbWVWYXI/OiBjZGt0Zi5UZXJyYWZvcm1WYXJpYWJsZTtcbiAgcHJpdmF0ZSBfb2JqZWN0S2V5VmFyPzogY2RrdGYuVGVycmFmb3JtVmFyaWFibGU7XG4gIHByaXZhdGUgX3NvdXJjZUtNU0tleT86IElLZXk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2J1Y2tldE5hbWVWYXIgPSBwcm9wcy5idWNrZXROYW1lVmFyO1xuICAgIHRoaXMuX29iamVjdEtleVZhciA9IHByb3BzLm9iamVjdEtleVZhcjtcbiAgICB0aGlzLl9zb3VyY2VLTVNLZXkgPSBwcm9wcy5zb3VyY2VLTVNLZXk7XG4gIH1cblxuICBwdWJsaWMgYmluZChzY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLl9idWNrZXROYW1lVmFyKSB7XG4gICAgICB0aGlzLl9idWNrZXROYW1lVmFyID0gbmV3IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJMYW1iZGFTb3VyY2VCdWNrZXROYW1lUGFyYW1ldGVyXCIsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29iamVjdEtleVZhcikge1xuICAgICAgdGhpcy5fb2JqZWN0S2V5VmFyID0gbmV3IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJMYW1iZGFTb3VyY2VPYmplY3RLZXlQYXJhbWV0ZXJcIixcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuX2J1Y2tldE5hbWVWYXIuc3RyaW5nVmFsdWUsXG4gICAgICAgIG9iamVjdEtleTogdGhpcy5fb2JqZWN0S2V5VmFyLnN0cmluZ1ZhbHVlLFxuICAgICAgfSxcbiAgICAgIHNvdXJjZUtNU0tleUFybjogdGhpcy5fc291cmNlS01TS2V5Py5rZXlBcm4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwYXJhbWV0ZXJzIG1hcCBmcm9tIHRoaXMgaW5zdGFuY2UncyBUZXJyYWZvcm0gdmFyaWFibGVzLlxuICAgKlxuICAgKiBJdCByZXR1cm5zIGEgbWFwIHdpdGggMiBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgbmFtZXMgb2YgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGlzIExhbWJkYSBjb2RlLFxuICAgKiBhbmQgYXMgdmFsdWVzIGl0IGNvbnRhaW5zIHRoZSBhcHByb3ByaWF0ZSBleHByZXNzaW9ucyBwb2ludGluZyBhdCB0aGUgcHJvdmlkZWQgUzMgbG9jYXRpb25cbiAgICogKG1vc3QgbGlrZWx5LCBvYnRhaW5lZCBmcm9tIGEgQ29kZVBpcGVsaW5lIEFydGlmYWN0IGJ5IGNhbGxpbmcgdGhlIGBhcnRpZmFjdC5zM0xvY2F0aW9uYCBtZXRob2QpLlxuICAgKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBwcm92aWRlZCB0byB0aGUgQ2xvdWRGb3JtYXRpb24gQWN0aW9uXG4gICAqIHRoYXQgaXMgZGVwbG95aW5nIHRoZSBTdGFjayB0aGF0IHRoZSBMYW1iZGEgd2l0aCB0aGlzIGNvZGUgaXMgcGFydCBvZixcbiAgICogaW4gdGhlIGBwYXJhbWV0ZXJPdmVycmlkZXNgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9jYXRpb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBvYmplY3QgaW4gUzMgdGhhdCByZXByZXNlbnRzIHRoZSBMYW1iZGEgY29kZVxuICAgKi9cbiAgcHVibGljIGFzc2lnbihsb2NhdGlvbjogc3RvcmFnZS5TM0xvY2F0aW9uKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IHJldDogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICByZXRbdGhpcy5idWNrZXROYW1lVmFyXSA9IGxvY2F0aW9uLmJ1Y2tldE5hbWU7XG4gICAgcmV0W3RoaXMub2JqZWN0S2V5VmFyXSA9IGxvY2F0aW9uLm9iamVjdEtleTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGdldCBidWNrZXROYW1lVmFyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2J1Y2tldE5hbWVWYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9idWNrZXROYW1lVmFyLmZxbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlBhc3MgVGVycmFmb3JtVmFyaWFibGVzQ29kZSB0byBhIExhbWJkYSBGdW5jdGlvbiBiZWZvcmUgYWNjZXNzaW5nIHRoZSBidWNrZXROYW1lVmFyIHByb3BlcnR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2JqZWN0S2V5VmFyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX29iamVjdEtleVZhcikge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEtleVZhci5mcW47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJQYXNzIFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUgdG8gYSBMYW1iZGEgRnVuY3Rpb24gYmVmb3JlIGFjY2Vzc2luZyB0aGUgb2JqZWN0S2V5VmFyIHByb3BlcnR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhIG5ldyBFY3JJbWFnZUNvZGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3JJbWFnZUNvZGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBDTUQgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jY21kXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBDTUQgc3BlY2lmaWVkIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNtZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBFTlRSWVBPSU5UIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIEFuIEVOVFJZUE9JTlQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBjb250YWluZXIgdGhhdCB3aWxsIHJ1biBhcyBhbiBleGVjdXRhYmxlLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGluIHRoZSAnZXhlYyBmb3JtJywgdml6LiwgYFsgJ2V4ZWN1dGFibGUnLCAncGFyYW0xJywgJ3BhcmFtMicgXWAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNlbnRyeXBvaW50XG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBFTlRSWVBPSU5UIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgV09SS0RJUiBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBIFdPUktESVIgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb250YWluZXIgd2lsbCB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyN3b3JrZGlyXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBXT1JLRElSIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0YWcgdG8gdXNlIHdoZW4gcHVsbGluZyB0aGUgaW1hZ2UgZnJvbSBFQ1IuXG4gICAqIEBkZWZhdWx0ICdsYXRlc3QnXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgdGFnT3JEaWdlc3RgXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0YWcgb3IgZGlnZXN0IHRvIHVzZSB3aGVuIHB1bGxpbmcgdGhlIGltYWdlIGZyb20gRUNSIChkaWdlc3RzIG11c3Qgc3RhcnQgd2l0aCBgc2hhMjU2OmApLlxuICAgKiBAZGVmYXVsdCAnbGF0ZXN0J1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnT3JEaWdlc3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIERvY2tlciBpbWFnZSBpbiBFQ1IgdGhhdCBjYW4gYmUgYm91bmQgYXMgTGFtYmRhIENvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBFY3JJbWFnZUNvZGUgZXh0ZW5kcyBDb2RlIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzSW5saW5lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5OiBzdG9yYWdlLklSZXBvc2l0b3J5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEVjckltYWdlQ29kZVByb3BzID0ge30sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgYmluZChfc2NvcGU6IENvbnN0cnVjdCk6IENvZGVDb25maWcge1xuICAgIHRoaXMucmVwb3NpdG9yeS5ncmFudFB1bGwobmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIikpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIGltYWdlVXJpOiB0aGlzLnJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaUZvclRhZ09yRGlnZXN0KFxuICAgICAgICAgIHRoaXMucHJvcHM/LnRhZ09yRGlnZXN0ID8/IHRoaXMucHJvcHM/LnRhZyA/PyBcImxhdGVzdFwiLFxuICAgICAgICApLFxuICAgICAgICBjbWQ6IHRoaXMucHJvcHMuY21kLFxuICAgICAgICBlbnRyeXBvaW50OiB0aGlzLnByb3BzLmVudHJ5cG9pbnQsXG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMucHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhIG5ldyBBc3NldEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRJbWFnZUNvZGVQcm9wc1xuICBleHRlbmRzIGVjcl9hc3NldHMuRG9ja2VySW1hZ2VBc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgQ01EIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIFRoaXMgbmVlZHMgdG8gYmUgaW4gdGhlICdleGVjIGZvcm0nLCB2aXouLCBgWyAnZXhlY3V0YWJsZScsICdwYXJhbTEnLCAncGFyYW0yJyBdYC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2NtZFxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgQ01EIHNwZWNpZmllZCBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSBjbWQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgRU5UUllQT0lOVCBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBbiBFTlRSWVBPSU5UIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGEgY29udGFpbmVyIHRoYXQgd2lsbCBydW4gYXMgYW4gZXhlY3V0YWJsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jZW50cnlwb2ludFxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgRU5UUllQT0lOVCBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSBlbnRyeXBvaW50Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgb3Igb3ZlcnJpZGUgdGhlIFdPUktESVIgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogQSBXT1JLRElSIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGUgY29udGFpbmVyIHdpbGwgdXNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jd29ya2RpclxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgV09SS0RJUiBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUNSIGltYWdlIHRoYXQgd2lsbCBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzcGVjaWZpZWQgYXNzZXQgYW5kIGNhbiBiZSBib3VuZCBhcyBMYW1iZGEgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0SW1hZ2VDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFzc2V0PzogZWNyX2Fzc2V0cy5Eb2NrZXJJbWFnZUFzc2V0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXNzZXRJbWFnZUNvZGVQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDb2RlQ29uZmlnIHtcbiAgICAvLyBJZiB0aGUgc2FtZSBBc3NldEltYWdlQ29kZSBpcyB1c2VkIG11bHRpcGxlIHRpbWVzLCByZXRhaW4gb25seSB0aGUgZmlyc3QgaW5zdGFudGlhdGlvbi5cbiAgICBpZiAoIXRoaXMuYXNzZXQpIHtcbiAgICAgIHRoaXMuYXNzZXQgPSBuZXcgZWNyX2Fzc2V0cy5Eb2NrZXJJbWFnZUFzc2V0KHNjb3BlLCBcIkFzc2V0SW1hZ2VcIiwge1xuICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFzc2V0LnJlcG9zaXRvcnkuZ3JhbnRQdWxsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMuYXNzZXQpICE9PSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSlcbiAgICApIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBc3NldCBpcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIHN0YWNrICcke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMuYXNzZXQpLmdyaWRVVUlEfScuIGAgK1xuICAgICAgICAgIFwiQ3JlYXRlIGEgbmV3IENvZGUgaW5zdGFuY2UgZm9yIGV2ZXJ5IHN0YWNrLlwiLFxuICAgICAgICAvLyBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIGltYWdlVXJpOiB0aGlzLmFzc2V0LmltYWdlVXJpLFxuICAgICAgICBlbnRyeXBvaW50OiB0aGlzLnByb3BzLmVudHJ5cG9pbnQsXG4gICAgICAgIGNtZDogdGhpcy5wcm9wcy5jbWQsXG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMucHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IHBlbmRpbmcgY3VzdG9tIENMSSB0byBtb2NrIExhbWJkYSBmdW5jdGlvbiBpbnZvY2F0aW9ucyBsb2NhbGx5XG4gIC8vIHB1YmxpYyBiaW5kVG9SZXNvdXJjZShcbiAgLy8gICByZXNvdXJjZTogSUF3c0NvbnN0cnVjdCxcbiAgLy8gICBvcHRpb25zOiBSZXNvdXJjZUJpbmRPcHRpb25zID0ge30sXG4gIC8vICkge1xuICAvLyAgIGlmICghdGhpcy5hc3NldCkge1xuICAvLyAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcImJpbmRUb1Jlc291cmNlKCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYmluZCgpXCIpOyAvLywgcmVzb3VyY2UpO1xuICAvLyAgIH1cblxuICAvLyAgIC8vIGNvbnN0IHJlc291cmNlUHJvcGVydHkgPSBfb3B0aW9ucy5yZXNvdXJjZVByb3BlcnR5IHx8IFwiQ29kZS5JbWFnZVVyaVwiO1xuXG4gIC8vICAgLy8gLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDU5M1xuICAvLyAgIC8vIHRoaXMuYXNzZXQuYWRkUmVzb3VyY2VNZXRhZGF0YShfcmVzb3VyY2UsIHJlc291cmNlUHJvcGVydHkpO1xuICAvLyB9XG59XG5cbi8qKlxuICogT3B0aW9ucyB3aGVuIGNyZWF0aW5nIGFuIGFzc2V0IGZyb20gYSBEb2NrZXIgYnVpbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQnVpbGRBc3NldE9wdGlvbnMgZXh0ZW5kcyBEb2NrZXJCdWlsZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdGggaW4gdGhlIERvY2tlciBpbWFnZSB3aGVyZSB0aGUgYXNzZXQgaXMgbG9jYXRlZCBhZnRlciB0aGUgYnVpbGRcbiAgICogb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAvYXNzZXRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggb24gdGhlIGxvY2FsIGZpbGVzeXN0ZW0gd2hlcmUgdGhlIGFzc2V0IHdpbGwgYmUgY29waWVkXG4gICAqIHVzaW5nIGBkb2NrZXIgY3BgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBgQXNzZXRDb2RlYCB3aXRoIGEgY3VzdG9tIGNvbW1hbmQsIHN1Y2ggYXMgcnVubmluZyBhIGJ1aWxkZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Db21tYW5kT3B0aW9ucyBleHRlbmRzIHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHNwYXduZWQgcHJvY2Vzcywgd2hpY2ggZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHNwYXduZWQgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNlZSBgY2hpbGRfcHJvY2Vzcy5TcGF3blN5bmNPcHRpb25zYCAoaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jaGlsZF9wcm9jZXNzLmh0bWwjY2hpbGRfcHJvY2Vzc3NwYXduc3luY2NvbW1hbmQtYXJncy1vcHRpb25zKS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRPcHRpb25zPzogeyBbb3B0aW9uczogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgY29kZSB1c2luZyBidWNrZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFMzIG9iamVjdCB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBvYmplY3RWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGhhbmRsZXIgY29kZS5cbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzIG1hbmFnZWQga2V5cyhTU0UtUzMpIGtleSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VLTVNLZXk/OiBJS2V5O1xufVxuIl19
|
|
@@ -300,7 +300,7 @@ class Condition {
|
|
|
300
300
|
}
|
|
301
301
|
exports.Condition = Condition;
|
|
302
302
|
_a = JSII_RTTI_SYMBOL_1;
|
|
303
|
-
Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.
|
|
303
|
+
Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.1.1" };
|
|
304
304
|
/**
|
|
305
305
|
* Comparison Operator types
|
|
306
306
|
*/
|
|
@@ -178,7 +178,7 @@ class Connections {
|
|
|
178
178
|
}
|
|
179
179
|
exports.Connections = Connections;
|
|
180
180
|
_a = JSII_RTTI_SYMBOL_1;
|
|
181
|
-
Connections[_a] = { fqn: "terraconstructs.aws.compute.Connections", version: "0.
|
|
181
|
+
Connections[_a] = { fqn: "terraconstructs.aws.compute.Connections", version: "0.1.1" };
|
|
182
182
|
class ReactiveList {
|
|
183
183
|
constructor() {
|
|
184
184
|
this.elements = new Array();
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Duration } from "../../duration";
|
|
2
|
+
export interface CorsOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Specifies the response status code returned from the OPTIONS method.
|
|
5
|
+
*
|
|
6
|
+
* @default 204
|
|
7
|
+
*/
|
|
8
|
+
readonly statusCode?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Specifies the list of origins that are allowed to make requests to this
|
|
11
|
+
* resource. If you wish to allow all origins, specify `Cors.ALL_ORIGINS` or
|
|
12
|
+
* `[ * ]`.
|
|
13
|
+
*
|
|
14
|
+
* Responses will include the `Access-Control-Allow-Origin` response header.
|
|
15
|
+
* If specific origins are specified (not `Cors.ALL_ORIGINS`), the `Vary: Origin`
|
|
16
|
+
* response header will also be included.
|
|
17
|
+
*
|
|
18
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
|
|
19
|
+
*/
|
|
20
|
+
readonly allowOrigins: string[];
|
|
21
|
+
/**
|
|
22
|
+
* The Access-Control-Allow-Headers response header is used in response to a
|
|
23
|
+
* preflight request which includes the Access-Control-Request-Headers to
|
|
24
|
+
* indicate which HTTP headers can be used during the actual request.
|
|
25
|
+
*
|
|
26
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
|
|
27
|
+
* @default Cors.DEFAULT_HEADERS
|
|
28
|
+
*/
|
|
29
|
+
readonly allowHeaders?: string[];
|
|
30
|
+
/**
|
|
31
|
+
* The Access-Control-Allow-Methods response header specifies the method or
|
|
32
|
+
* methods allowed when accessing the resource in response to a preflight request.
|
|
33
|
+
*
|
|
34
|
+
* If `ANY` is specified, it will be expanded to `Cors.ALL_METHODS`.
|
|
35
|
+
*
|
|
36
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
|
|
37
|
+
* @default Cors.ALL_METHODS
|
|
38
|
+
*/
|
|
39
|
+
readonly allowMethods?: string[];
|
|
40
|
+
/**
|
|
41
|
+
* The Access-Control-Allow-Credentials response header tells browsers whether
|
|
42
|
+
* to expose the response to frontend JavaScript code when the request's
|
|
43
|
+
* credentials mode (Request.credentials) is "include".
|
|
44
|
+
*
|
|
45
|
+
* When a request's credentials mode (Request.credentials) is "include",
|
|
46
|
+
* browsers will only expose the response to frontend JavaScript code if the
|
|
47
|
+
* Access-Control-Allow-Credentials value is true.
|
|
48
|
+
*
|
|
49
|
+
* Credentials are cookies, authorization headers or TLS client certificates.
|
|
50
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
|
|
51
|
+
* @default false
|
|
52
|
+
*/
|
|
53
|
+
readonly allowCredentials?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* The Access-Control-Max-Age response header indicates how long the results of
|
|
56
|
+
* a preflight request (that is the information contained in the
|
|
57
|
+
* Access-Control-Allow-Methods and Access-Control-Allow-Headers headers)
|
|
58
|
+
* can be cached.
|
|
59
|
+
*
|
|
60
|
+
* To disable caching altogether use `disableCache: true`.
|
|
61
|
+
*
|
|
62
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age
|
|
63
|
+
* @default - browser-specific (see reference)
|
|
64
|
+
*/
|
|
65
|
+
readonly maxAge?: Duration;
|
|
66
|
+
/**
|
|
67
|
+
* Sets Access-Control-Max-Age to -1, which means that caching is disabled.
|
|
68
|
+
* This option cannot be used with `maxAge`.
|
|
69
|
+
*
|
|
70
|
+
* @default - cache is enabled
|
|
71
|
+
*/
|
|
72
|
+
readonly disableCache?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The Access-Control-Expose-Headers response header indicates which headers
|
|
75
|
+
* can be exposed as part of the response by listing their names.
|
|
76
|
+
*
|
|
77
|
+
* If you want clients to be able to access other headers, you have to list
|
|
78
|
+
* them using the Access-Control-Expose-Headers header.
|
|
79
|
+
*
|
|
80
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers
|
|
81
|
+
*
|
|
82
|
+
* @default - only the 6 CORS-safelisted response headers are exposed:
|
|
83
|
+
* Cache-Control, Content-Language, Content-Type, Expires, Last-Modified,
|
|
84
|
+
* Pragma
|
|
85
|
+
*/
|
|
86
|
+
readonly exposeHeaders?: string[];
|
|
87
|
+
}
|
|
88
|
+
export declare class Cors {
|
|
89
|
+
/**
|
|
90
|
+
* All HTTP methods.
|
|
91
|
+
*/
|
|
92
|
+
static readonly ALL_METHODS: string[];
|
|
93
|
+
/**
|
|
94
|
+
* All origins.
|
|
95
|
+
*/
|
|
96
|
+
static readonly ALL_ORIGINS: string[];
|
|
97
|
+
/**
|
|
98
|
+
* The set of default headers allowed for CORS and useful for API Gateway.
|
|
99
|
+
*/
|
|
100
|
+
static readonly DEFAULT_HEADERS: string[];
|
|
101
|
+
private constructor();
|
|
102
|
+
}
|