terraconstructs 0.0.11 → 0.0.12
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 +104486 -34582
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.d.ts +1 -1
- package/lib/aws/aws-construct.js +28 -2
- package/lib/aws/aws-stack.d.ts +2 -4
- package/lib/aws/aws-stack.js +21 -8
- package/lib/aws/aws-tags.d.ts +58 -0
- package/lib/aws/aws-tags.js +77 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- 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.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +4 -4
- 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/private/env-tokens.js +5 -6
- package/lib/aws/cloudwatch/private/metric-util.js +4 -5
- package/lib/aws/cloudwatch/private/object.js +2 -3
- package/lib/aws/cloudwatch/private/rendering.js +3 -3
- package/lib/aws/cloudwatch/private/statistic.js +6 -7
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +4 -4
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.d.ts +1 -1
- package/lib/aws/cloudwatch/widget.js +4 -4
- package/lib/aws/compute/activity.js +3 -2
- package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
- package/lib/aws/compute/alb/application-listener-action.js +281 -0
- package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
- package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
- package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
- package/lib/aws/compute/alb/application-listener-rule.js +220 -0
- package/lib/aws/compute/alb/application-listener.d.ts +574 -0
- package/lib/aws/compute/alb/application-listener.js +538 -0
- package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
- package/lib/aws/compute/alb/application-load-balancer.js +780 -0
- package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
- package/lib/aws/compute/alb/application-target-group.js +427 -0
- package/lib/aws/compute/alb/conditions.d.ts +61 -0
- package/lib/aws/compute/alb/conditions.js +164 -0
- package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
- package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
- package/lib/aws/compute/alb/trust-store.d.ts +86 -0
- package/lib/aws/compute/alb/trust-store.js +79 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
- package/lib/aws/compute/bastion-host.d.ts +172 -0
- package/lib/aws/compute/bastion-host.js +114 -0
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/cidr-splits.d.ts +49 -0
- package/lib/aws/compute/cidr-splits.js +59 -0
- package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
- package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
- package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
- package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
- package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
- package/lib/aws/compute/client-vpn-endpoint.js +259 -0
- package/lib/aws/compute/client-vpn-route.d.ts +67 -0
- package/lib/aws/compute/client-vpn-route.js +57 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.d.ts +137 -0
- package/lib/aws/compute/connections.js +208 -0
- package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
- package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
- package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
- package/lib/aws/compute/ec2-util-v2.js +286 -0
- package/lib/aws/compute/ec2-util.d.ts +52 -0
- package/lib/aws/compute/ec2-util.js +138 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- 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 +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- 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.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +1 -1
- package/lib/aws/compute/function.js +5 -5
- package/lib/aws/compute/index-alpha.d.ts +5 -0
- package/lib/aws/compute/index-alpha.js +22 -0
- package/lib/aws/compute/index.d.ts +60 -0
- package/lib/aws/compute/index.js +70 -2
- package/lib/aws/compute/instance-types.d.ts +1354 -0
- package/lib/aws/compute/instance-types.js +1683 -0
- package/lib/aws/compute/instance.d.ts +436 -0
- package/lib/aws/compute/instance.js +262 -0
- package/lib/aws/compute/ip-addresses.d.ts +249 -0
- package/lib/aws/compute/ip-addresses.js +248 -0
- package/lib/aws/compute/ipam.d.ts +309 -0
- package/lib/aws/compute/ipam.js +306 -0
- package/lib/aws/compute/key-pair.d.ts +178 -0
- package/lib/aws/compute/key-pair.js +194 -0
- package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
- package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/launch-template.d.ts +540 -0
- package/lib/aws/compute/launch-template.js +468 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
- package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
- package/lib/aws/compute/lb-shared/base-listener.js +181 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
- package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
- package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
- package/lib/aws/compute/lb-shared/enums.js +301 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
- package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
- package/lib/aws/compute/lb-shared/imported.js +27 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
- package/lib/aws/compute/lb-shared/listener-action.js +4 -0
- package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
- package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
- package/lib/aws/compute/lb-shared/util.d.ts +113 -0
- package/lib/aws/compute/lb-shared/util.js +264 -0
- package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
- package/lib/aws/compute/lb-targets/alb-target.js +100 -0
- package/lib/aws/compute/lb-targets/index.d.ts +4 -0
- package/lib/aws/compute/lb-targets/index.js +22 -0
- package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
- package/lib/aws/compute/lb-targets/instance-target.js +67 -0
- package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
- package/lib/aws/compute/lb-targets/ip-target.js +79 -0
- package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
- package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
- package/lib/aws/compute/load-balancer.d.ts +336 -0
- package/lib/aws/compute/load-balancer.js +287 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
- package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
- package/lib/aws/compute/machine-image/common.d.ts +181 -0
- package/lib/aws/compute/machine-image/common.js +122 -0
- package/lib/aws/compute/machine-image/index.d.ts +5 -0
- package/lib/aws/compute/machine-image/index.js +22 -0
- package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
- package/lib/aws/compute/machine-image/machine-image.js +566 -0
- package/lib/aws/compute/machine-image/utils.d.ts +2 -0
- package/lib/aws/compute/machine-image/utils.js +17 -0
- package/lib/aws/compute/nat.d.ts +325 -0
- package/lib/aws/compute/nat.js +455 -0
- package/lib/aws/compute/network-acl-types.d.ts +152 -0
- package/lib/aws/compute/network-acl-types.js +156 -0
- package/lib/aws/compute/network-acl.d.ts +285 -0
- package/lib/aws/compute/network-acl.js +207 -0
- package/lib/aws/compute/network-util.d.ts +116 -0
- package/lib/aws/compute/network-util.js +241 -0
- package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
- package/lib/aws/compute/nlb/network-listener-action.js +146 -0
- package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
- package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
- package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
- package/lib/aws/compute/nlb/network-listener.js +217 -0
- package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
- package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
- package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
- package/lib/aws/compute/nlb/network-target-group.js +223 -0
- package/lib/aws/compute/peer.d.ts +64 -0
- package/lib/aws/compute/peer.js +235 -0
- package/lib/aws/compute/placement-group.d.ts +161 -0
- package/lib/aws/compute/placement-group.js +133 -0
- package/lib/aws/compute/port.d.ts +287 -0
- package/lib/aws/compute/port.js +390 -0
- package/lib/aws/compute/prefix-list.d.ts +131 -0
- package/lib/aws/compute/prefix-list.js +114 -0
- package/lib/aws/compute/private/context-stub.d.ts +7 -0
- package/lib/aws/compute/private/context-stub.js +43 -0
- package/lib/aws/compute/private/ebs-util.d.ts +14 -0
- package/lib/aws/compute/private/ebs-util.js +145 -0
- package/lib/aws/compute/private/intrinstics.js +2 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/private/util.js +2 -3
- package/lib/aws/compute/route.d.ts +547 -0
- package/lib/aws/compute/route.js +469 -0
- package/lib/aws/compute/security-group.d.ts +414 -0
- package/lib/aws/compute/security-group.js +538 -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.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +14 -12
- 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 +5 -5
- 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/stepfunctions-canned-metrics.generated.d.ts +83 -0
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
- package/lib/aws/compute/subnet-v2.d.ts +213 -0
- package/lib/aws/compute/subnet-v2.js +405 -0
- package/lib/aws/compute/subnet.d.ts +37 -0
- package/lib/aws/compute/subnet.js +181 -0
- 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/private/task-utils.js +3 -4
- package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
- 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 +2 -2
- package/lib/aws/compute/user-data.d.ts +270 -0
- package/lib/aws/compute/user-data.js +487 -0
- package/lib/aws/compute/util.d.ts +1 -1
- package/lib/aws/compute/util.js +4 -5
- package/lib/aws/compute/volume.d.ts +480 -0
- package/lib/aws/compute/volume.js +426 -0
- package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
- package/lib/aws/compute/vpc-endpoint-service.js +90 -0
- package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
- package/lib/aws/compute/vpc-endpoint.js +811 -0
- package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
- package/lib/aws/compute/vpc-flow-logs.js +693 -0
- package/lib/aws/compute/vpc-lookup.d.ts +73 -0
- package/lib/aws/compute/vpc-lookup.js +3 -0
- package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
- package/lib/aws/compute/vpc-v2-base.js +493 -0
- package/lib/aws/compute/vpc-v2.d.ts +385 -0
- package/lib/aws/compute/vpc-v2.js +408 -0
- package/lib/aws/compute/vpc.d.ts +1448 -0
- package/lib/aws/compute/vpc.js +1495 -0
- package/lib/aws/compute/vpn.d.ts +443 -0
- package/lib/aws/compute/vpn.js +397 -0
- package/lib/aws/compute/windows-versions.d.ts +418 -0
- package/lib/aws/compute/windows-versions.js +426 -0
- package/lib/aws/edge/certificate-base.d.ts +20 -0
- package/lib/aws/edge/certificate-base.js +28 -0
- package/lib/aws/edge/certificate.d.ts +23 -2
- package/lib/aws/edge/certificate.js +54 -4
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +2 -2
- package/lib/aws/edge/dns-record.js +16 -16
- package/lib/aws/edge/dns-zone.d.ts +20 -2
- package/lib/aws/edge/dns-zone.js +25 -10
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/index.d.ts +1 -0
- package/lib/aws/edge/index.js +2 -1
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +7 -5
- 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/index.d.ts +1 -0
- package/lib/aws/iam/index.js +2 -1
- package/lib/aws/iam/instance-profile.d.ts +155 -0
- package/lib/aws/iam/instance-profile.js +124 -0
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.js +9 -9
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +26 -26
- package/lib/aws/iam/private/assume-role-policy.js +2 -3
- package/lib/aws/iam/private/comparable-principal.js +2 -3
- package/lib/aws/iam/private/immutable-role.d.ts +2 -1
- package/lib/aws/iam/private/immutable-role.js +3 -3
- package/lib/aws/iam/private/imported-role.d.ts +1 -1
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/merge-statements.js +2 -3
- package/lib/aws/iam/private/util.js +4 -4
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/utils.js +2 -3
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +5 -5
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +7 -7
- package/lib/aws/notify/archive.js +3 -2
- package/lib/aws/notify/connection.js +5 -4
- package/lib/aws/notify/event-bus.js +5 -4
- package/lib/aws/notify/event-pattern.js +3 -3
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +4 -3
- package/lib/aws/notify/kinesis-stream.js +3 -2
- package/lib/aws/notify/on-event-options.js +2 -1
- package/lib/aws/notify/queue-config.generated.d.ts +18 -11
- package/lib/aws/notify/queue-config.generated.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 +3 -2
- package/lib/aws/notify/schedule.js +2 -2
- package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
- package/lib/aws/notify/target.js +2 -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/targets/util.d.ts +1 -1
- package/lib/aws/notify/targets/util.js +10 -11
- package/lib/aws/notify/util.js +4 -4
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.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.js +1 -1
- package/lib/aws/storage/bucket.d.ts +298 -65
- package/lib/aws/storage/bucket.js +548 -225
- package/lib/aws/storage/cors-config.generated.d.ts +3 -3
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/index.d.ts +1 -0
- package/lib/aws/storage/index.js +2 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +6 -6
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.d.ts +1 -1
- package/lib/aws/storage/origin-access-identity.js +5 -4
- package/lib/aws/storage/parameter-util.d.ts +12 -0
- package/lib/aws/storage/parameter-util.js +65 -0
- package/lib/aws/storage/parameter.d.ts +526 -0
- package/lib/aws/storage/parameter.js +606 -0
- package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
- package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
- package/lib/aws/storage/util.d.ts +25 -3
- package/lib/aws/storage/util.js +84 -17
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/aws/util.js +2 -3
- package/lib/construct-base.d.ts +10 -1
- package/lib/construct-base.js +9 -6
- package/lib/duration.js +1 -1
- package/lib/expiration.d.ts +48 -0
- package/lib/expiration.js +68 -0
- package/lib/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +7 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/private/md5.d.ts +4 -0
- package/lib/private/md5.js +14 -0
- package/lib/private/unique-resource-name.js +3 -4
- package/lib/size.js +2 -2
- package/lib/stack-base.d.ts +4 -23
- package/lib/stack-base.js +9 -30
- package/lib/terra-func.d.ts +103 -0
- package/lib/terra-func.js +170 -0
- package/lib/token.js +5 -5
- package/package.json +15 -8
- package/bun.lockb +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PrefixList = exports.AddressFamily = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/prefix-list.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
/**
|
|
11
|
+
* The IP address type.
|
|
12
|
+
*/
|
|
13
|
+
var AddressFamily;
|
|
14
|
+
(function (AddressFamily) {
|
|
15
|
+
AddressFamily["IP_V4"] = "IPv4";
|
|
16
|
+
AddressFamily["IP_V6"] = "IPv6";
|
|
17
|
+
})(AddressFamily || (exports.AddressFamily = AddressFamily = {}));
|
|
18
|
+
/**
|
|
19
|
+
* The base class for a prefix list
|
|
20
|
+
*/
|
|
21
|
+
class PrefixListBase extends aws_construct_1.AwsConstructBase {
|
|
22
|
+
get prefixListOutputs() {
|
|
23
|
+
return {
|
|
24
|
+
prefixListId: this.prefixListId,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
get outputs() {
|
|
28
|
+
return this.prefixListOutputs;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A managed prefix list.
|
|
33
|
+
* @resource AWS::EC2::PrefixList
|
|
34
|
+
*/
|
|
35
|
+
class PrefixList extends PrefixListBase {
|
|
36
|
+
/**
|
|
37
|
+
* Look up prefix list by id.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
static fromPrefixListId(scope, id, prefixListId) {
|
|
41
|
+
class Import extends aws_construct_1.AwsConstructBase {
|
|
42
|
+
constructor() {
|
|
43
|
+
super(...arguments);
|
|
44
|
+
this.prefixListId = prefixListId;
|
|
45
|
+
}
|
|
46
|
+
get prefixListOutputs() {
|
|
47
|
+
return {
|
|
48
|
+
prefixListId: this.prefixListId,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
get outputs() {
|
|
52
|
+
return this.prefixListOutputs;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return new Import(scope, id);
|
|
56
|
+
}
|
|
57
|
+
constructor(scope, id, props) {
|
|
58
|
+
super(scope, id, props);
|
|
59
|
+
const prefixListName = props?.prefixListName ??
|
|
60
|
+
cdktf_1.Lazy.stringValue({
|
|
61
|
+
produce: () => this.stack.uniqueResourceName(this, {
|
|
62
|
+
maxLength: 255,
|
|
63
|
+
allowedSpecialCharacters: ".-_",
|
|
64
|
+
}),
|
|
65
|
+
});
|
|
66
|
+
if (prefixListName) {
|
|
67
|
+
if (prefixListName.startsWith("com.amazonaws")) {
|
|
68
|
+
throw new Error("The name cannot start with 'com.amazonaws.'");
|
|
69
|
+
}
|
|
70
|
+
if (prefixListName.length > 255) {
|
|
71
|
+
throw new Error("Lengths exceeding 255 characters cannot be set.");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.prefixListName = prefixListName;
|
|
75
|
+
let defaultMaxEntries = 1;
|
|
76
|
+
if (props?.entries && props.entries.length > 0) {
|
|
77
|
+
const entries = props.entries;
|
|
78
|
+
// Regular expressions for validating IPv6 addresses
|
|
79
|
+
if (props?.addressFamily === AddressFamily.IP_V6) {
|
|
80
|
+
const ipv6Regex = /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/i;
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
if (!ipv6Regex.test(entry.cidr)) {
|
|
83
|
+
throw new Error(`Invalid IPv6 address range: ${entry.cidr}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Regular expressions for validating IPv4 addresses
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const ipv4Regex = /^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$/i;
|
|
90
|
+
for (const entry of entries) {
|
|
91
|
+
if (!ipv4Regex.test(entry.cidr)) {
|
|
92
|
+
throw new Error(`Invalid IPv4 address range: ${entry.cidr}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
defaultMaxEntries = props.entries.length;
|
|
97
|
+
}
|
|
98
|
+
this.resource = new provider_aws_1.ec2ManagedPrefixList.Ec2ManagedPrefixList(this, "Resource", {
|
|
99
|
+
addressFamily: props?.addressFamily || AddressFamily.IP_V4,
|
|
100
|
+
maxEntries: props?.maxEntries || defaultMaxEntries,
|
|
101
|
+
name: this.prefixListName,
|
|
102
|
+
entry: props?.entries || [],
|
|
103
|
+
});
|
|
104
|
+
this.prefixListId = this.resource.id;
|
|
105
|
+
this.prefixListArn = this.resource.arn;
|
|
106
|
+
this.ownerId = this.resource.ownerId;
|
|
107
|
+
this.version = this.resource.version;
|
|
108
|
+
this.addressFamily = this.resource.addressFamily;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.PrefixList = PrefixList;
|
|
112
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
113
|
+
PrefixList[_a] = { fqn: "terraconstructs.aws.compute.PrefixList", version: "0.0.12" };
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4LWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcHJlZml4LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrRkFBK0Y7QUFFL0Ysc0RBQTJEO0FBQzNELGlDQUE2QjtBQUU3QixvREFJMEI7QUE0QjFCOztHQUVHO0FBQ0gsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLCtCQUFjLENBQUE7SUFDZCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFIVyxhQUFhLDZCQUFiLGFBQWEsUUFHeEI7QUEyQ0Q7O0dBRUc7QUFDSCxNQUFlLGNBQWUsU0FBUSxnQ0FBZ0I7SUFDcEQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTztZQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBT0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxjQUFjO0lBQzVDOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDNUIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFlBQW9CO1FBRXBCLE1BQU0sTUFBTyxTQUFRLGdDQUFnQjtZQUFyQzs7Z0JBU2tCLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1lBQzlDLENBQUM7WUFUQyxJQUFXLGlCQUFpQjtnQkFDMUIsT0FBTztvQkFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQ2hDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBVyxPQUFPO2dCQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNoQyxDQUFDO1NBRUY7UUFDRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBMENELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVB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TyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDbkQsQ0FBQzs7QUFqSUgsZ0NBa0lDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvcHJlZml4LWxpc3QudHNcblxuaW1wb3J0IHsgZWMyTWFuYWdlZFByZWZpeExpc3QgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdE91dHB1dHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcmVmaXggbGlzdFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwcmVmaXhMaXN0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHByZWZpeCBsaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByZWZpeExpc3QgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIHN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgcHJlZml4TGlzdE91dHB1dHM6IFByZWZpeExpc3RPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcmVmaXggbGlzdFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwcmVmaXhMaXN0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyB0eXBlLlxuICovXG5leHBvcnQgZW51bSBBZGRyZXNzRmFtaWx5IHtcbiAgSVBfVjQgPSBcIklQdjRcIixcbiAgSVBfVjYgPSBcIklQdjZcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIHByZWZpeCBsaXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgZm9yIHRoZSBwcmVmaXggbGlzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0b21hdGljYWxseS1jYWxjdWxhdGVkXG4gICAqL1xuICByZWFkb25seSBtYXhFbnRyaWVzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgcHJlZml4IGxpc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZml4TGlzdFByb3BzIGV4dGVuZHMgUHJlZml4TGlzdE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgcHJlZml4IGxpc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFkZHJlc3NGYW1pbHkuSVBfVjRcbiAgICovXG4gIHJlYWRvbmx5IGFkZHJlc3NGYW1pbHk/OiBBZGRyZXNzRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJlZml4IGxpc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSBhbiBleHBsaWNpdCBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4TGlzdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGVudHJpZXMgZm9yIHRoZSBwcmVmaXggbGlzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM/OiBlYzJNYW5hZ2VkUHJlZml4TGlzdC5FYzJNYW5hZ2VkUHJlZml4TGlzdEVudHJ5W107XG59XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIGEgcHJlZml4IGxpc3RcbiAqL1xuYWJzdHJhY3QgY2xhc3MgUHJlZml4TGlzdEJhc2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVByZWZpeExpc3Qge1xuICBwdWJsaWMgZ2V0IHByZWZpeExpc3RPdXRwdXRzKCk6IFByZWZpeExpc3RPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJlZml4TGlzdElkOiB0aGlzLnByZWZpeExpc3RJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wcmVmaXhMaXN0T3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwcmVmaXggbGlzdFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcHJlZml4TGlzdElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYW5hZ2VkIHByZWZpeCBsaXN0LlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpQcmVmaXhMaXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVmaXhMaXN0IGV4dGVuZHMgUHJlZml4TGlzdEJhc2Uge1xuICAvKipcbiAgICogTG9vayB1cCBwcmVmaXggbGlzdCBieSBpZC5cbiAgICpcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVByZWZpeExpc3RJZChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJlZml4TGlzdElkOiBzdHJpbmcsXG4gICk6IElQcmVmaXhMaXN0IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVByZWZpeExpc3Qge1xuICAgICAgcHVibGljIGdldCBwcmVmaXhMaXN0T3V0cHV0cygpOiBQcmVmaXhMaXN0T3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJlZml4TGlzdElkOiB0aGlzLnByZWZpeExpc3RJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlZml4TGlzdE91dHB1dHM7XG4gICAgICB9XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4TGlzdElkID0gcHJlZml4TGlzdElkO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHByZWZpeCBsaXN0XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhMaXN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByZWZpeCBsaXN0XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhMaXN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBwcmVmaXggbGlzdFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4TGlzdEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3duZXIgSUQgb2YgdGhlIHByZWZpeCBsaXN0XG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3duZXJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgcHJlZml4IGxpc3RcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgcHJlZml4IGxpc3RcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZGRyZXNzRmFtaWx5OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBlYzJNYW5hZ2VkUHJlZml4TGlzdC5FYzJNYW5hZ2VkUHJlZml4TGlzdDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFByZWZpeExpc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHByZWZpeExpc3ROYW1lID1cbiAgICAgIHByb3BzPy5wcmVmaXhMaXN0TmFtZSA/P1xuICAgICAgTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgbWF4TGVuZ3RoOiAyNTUsXG4gICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiLi1fXCIsXG4gICAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgIGlmIChwcmVmaXhMaXN0TmFtZSkge1xuICAgICAgaWYgKHByZWZpeExpc3ROYW1lLnN0YXJ0c1dpdGgoXCJjb20uYW1hem9uYXdzXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBuYW1lIGNhbm5vdCBzdGFydCB3aXRoICdjb20uYW1hem9uYXdzLidcIik7XG4gICAgICB9XG4gICAgICBpZiAocHJlZml4TGlzdE5hbWUubGVuZ3RoID4gMjU1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxlbmd0aHMgZXhjZWVkaW5nIDI1NSBjaGFyYWN0ZXJzIGNhbm5vdCBiZSBzZXQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJlZml4TGlzdE5hbWUgPSBwcmVmaXhMaXN0TmFtZTtcblxuICAgIGxldCBkZWZhdWx0TWF4RW50cmllcyA9IDE7XG4gICAgaWYgKHByb3BzPy5lbnRyaWVzICYmIHByb3BzLmVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IHByb3BzLmVudHJpZXM7XG4gICAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zIGZvciB2YWxpZGF0aW5nIElQdjYgYWRkcmVzc2VzXG4gICAgICBpZiAocHJvcHM/LmFkZHJlc3NGYW1pbHkgPT09IEFkZHJlc3NGYW1pbHkuSVBfVjYpIHtcbiAgICAgICAgY29uc3QgaXB2NlJlZ2V4ID1cbiAgICAgICAgICAvXnMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSguKDI1WzAtNV18MlswLTRdZHwxZGR8WzEtOV0/ZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSguKDI1WzAtNV18MlswLTRdZHwxZGR8WzEtOV0/ZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSguKDI1WzAtNV18MlswLTRdZHwxZGR8WzEtOV0/ZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XWR8MWRkfFsxLTldP2QpKC4oMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdZHwxZGR8WzEtOV0/ZCkoLigyNVswLTVdfDJbMC00XWR8MWRkfFsxLTldP2QpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSguKDI1WzAtNV18MlswLTRdZHwxZGR8WzEtOV0/ZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XWR8MWRkfFsxLTldP2QpKC4oMjVbMC01XXwyWzAtNF1kfDFkZHxbMS05XT9kKSl7M30pKXw6KSkpKCUuKyk/cyooXFwvKFswLTldfFsxLTldWzAtOV18MVswLTFdWzAtOV18MTJbMC04XSkpPyQvaTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgaWYgKCFpcHY2UmVnZXgudGVzdChlbnRyeS5jaWRyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElQdjYgYWRkcmVzcyByYW5nZTogJHtlbnRyeS5jaWRyfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zIGZvciB2YWxpZGF0aW5nIElQdjQgYWRkcmVzc2VzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpcHY0UmVnZXggPVxuICAgICAgICAgIC9eKFswLTldezEsM31cXC4pezN9WzAtOV17MSwzfShcXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pKT8kL2k7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmICghaXB2NFJlZ2V4LnRlc3QoZW50cnkuY2lkcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJUHY0IGFkZHJlc3MgcmFuZ2U6ICR7ZW50cnkuY2lkcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVmYXVsdE1heEVudHJpZXMgPSBwcm9wcy5lbnRyaWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGVjMk1hbmFnZWRQcmVmaXhMaXN0LkVjMk1hbmFnZWRQcmVmaXhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzc0ZhbWlseTogcHJvcHM/LmFkZHJlc3NGYW1pbHkgfHwgQWRkcmVzc0ZhbWlseS5JUF9WNCxcbiAgICAgICAgbWF4RW50cmllczogcHJvcHM/Lm1heEVudHJpZXMgfHwgZGVmYXVsdE1heEVudHJpZXMsXG4gICAgICAgIG5hbWU6IHRoaXMucHJlZml4TGlzdE5hbWUsXG4gICAgICAgIGVudHJ5OiBwcm9wcz8uZW50cmllcyB8fCBbXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMucHJlZml4TGlzdElkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnByZWZpeExpc3RBcm4gPSB0aGlzLnJlc291cmNlLmFybjtcbiAgICB0aGlzLm93bmVySWQgPSB0aGlzLnJlc291cmNlLm93bmVySWQ7XG4gICAgdGhpcy52ZXJzaW9uID0gdGhpcy5yZXNvdXJjZS52ZXJzaW9uO1xuICAgIHRoaXMuYWRkcmVzc0ZhbWlseSA9IHRoaXMucmVzb3VyY2UuYWRkcmVzc0ZhbWlseTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Create singleton TerraformLocal expression which determines if a security group allows all outbound traffic
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function allowAllOutboundLocal(scope: Construct, id: string, securityGroupId: string): boolean | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allowAllOutboundLocal = allowAllOutboundLocal;
|
|
4
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
5
|
+
const cdktf_1 = require("cdktf");
|
|
6
|
+
const aws_stack_1 = require("../../aws-stack");
|
|
7
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk/lib/context-providers/security-groups.ts
|
|
8
|
+
/**
|
|
9
|
+
* Create singleton TerraformLocal expression which determines if a security group allows all outbound traffic
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function allowAllOutboundLocal(scope, id, securityGroupId) {
|
|
14
|
+
if (cdktf_1.Token.isUnresolved(id)) {
|
|
15
|
+
throw new Error("All arguments to look up a security group must be concrete (no Tokens)");
|
|
16
|
+
}
|
|
17
|
+
const stack = aws_stack_1.AwsStack.ofAwsConstruct(scope);
|
|
18
|
+
const conditionName = `${id}AllowAllOutbound`;
|
|
19
|
+
let allowAllOutboundCondition = stack.node.tryFindChild(conditionName);
|
|
20
|
+
if (allowAllOutboundCondition) {
|
|
21
|
+
return allowAllOutboundCondition.expression;
|
|
22
|
+
}
|
|
23
|
+
const securityGroupRulesLookup = new provider_aws_1.dataAwsVpcSecurityGroupRules.DataAwsVpcSecurityGroupRules(stack, `${conditionName}Rules`, {
|
|
24
|
+
filter: [
|
|
25
|
+
{
|
|
26
|
+
name: "group-id",
|
|
27
|
+
values: [securityGroupId],
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
const securityGroupRuleIterator = cdktf_1.TerraformIterator.fromList(securityGroupRulesLookup.ids);
|
|
32
|
+
const securityGroupRules = new provider_aws_1.dataAwsVpcSecurityGroupRule.DataAwsVpcSecurityGroupRule(scope, `${conditionName}Rule`, {
|
|
33
|
+
forEach: securityGroupRuleIterator,
|
|
34
|
+
securityGroupRuleId: securityGroupRuleIterator.getString("id"),
|
|
35
|
+
});
|
|
36
|
+
const securityGroupRulesIterator = cdktf_1.TerraformIterator.fromDataSources(securityGroupRules);
|
|
37
|
+
// isAllProtocols and some CidrIpv4 = "0.0.0.0/0"
|
|
38
|
+
const AllTrafficCidrV4 = securityGroupRulesIterator.forExpressionForList("val.arn if val.ip_protocol = -1 && val.is_egress && cidr_ipv4 = '0.0.0.0/0'");
|
|
39
|
+
// isAllProtocols and some CidrIpv6 = "::/0"
|
|
40
|
+
const AllTrafficCidrV6 = securityGroupRulesIterator.forExpressionForList("val.arn if val.ip_protocol = -1 && val.is_egress && cidr_ipv6 = '::/0'");
|
|
41
|
+
return new cdktf_1.TerraformLocal(stack, conditionName, `\${length(${AllTrafficCidrV4})}+\${length(${AllTrafficCidrV6})} > 0`).expression;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1zdHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ByaXZhdGUvY29udGV4dC1zdHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esc0RBNERDO0FBMUVELHNEQUc2QjtBQUM3QixpQ0FBaUU7QUFFakUsK0NBQTJDO0FBRTNDLHlHQUF5RztBQUN6Rzs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixlQUF1QjtJQUV2QixJQUFJLGFBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQztJQUM5QyxJQUFJLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUNyRCxhQUFhLENBQ0ksQ0FBQztJQUNwQixJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDOUIsT0FBTyx5QkFBeUIsQ0FBQyxVQUFVLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sd0JBQXdCLEdBQzVCLElBQUksMkNBQTRCLENBQUMsNEJBQTRCLENBQzNELEtBQUssRUFDTCxHQUFHLGFBQWEsT0FBTyxFQUN2QjtRQUNFLE1BQU0sRUFBRTtZQUNOO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDMUI7U0FDRjtLQUNGLENBQ0YsQ0FBQztJQUNKLE1BQU0seUJBQXlCLEdBQUcseUJBQWlCLENBQUMsUUFBUSxDQUMxRCx3QkFBd0IsQ0FBQyxHQUFHLENBQzdCLENBQUM7SUFDRixNQUFNLGtCQUFrQixHQUN0QixJQUFJLDBDQUEyQixDQUFDLDJCQUEyQixDQUN6RCxLQUFLLEVBQ0wsR0FBRyxhQUFhLE1BQU0sRUFDdEI7UUFDRSxPQUFPLEVBQUUseUJBQXlCO1FBQ2xDLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDL0QsQ0FDRixDQUFDO0lBRUosTUFBTSwwQkFBMEIsR0FDOUIseUJBQWlCLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsaURBQWlEO0lBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUMsb0JBQW9CLENBQ3RFLDZFQUE2RSxDQUM5RSxDQUFDO0lBQ0YsNENBQTRDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUMsb0JBQW9CLENBQ3RFLHdFQUF3RSxDQUN6RSxDQUFDO0lBQ0YsT0FBTyxJQUFJLHNCQUFjLENBQ3ZCLEtBQUssRUFDTCxhQUFhLEVBQ2IsYUFBYSxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixRQUFRLENBQ3RFLENBQUMsVUFBVSxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRhdGFBd3NWcGNTZWN1cml0eUdyb3VwUnVsZXMsXG4gIGRhdGFBd3NWcGNTZWN1cml0eUdyb3VwUnVsZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRva2VuLCBUZXJyYWZvcm1Mb2NhbCwgVGVycmFmb3JtSXRlcmF0b3IgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay9saWIvY29udGV4dC1wcm92aWRlcnMvc2VjdXJpdHktZ3JvdXBzLnRzXG4vKipcbiAqIENyZWF0ZSBzaW5nbGV0b24gVGVycmFmb3JtTG9jYWwgZXhwcmVzc2lvbiB3aGljaCBkZXRlcm1pbmVzIGlmIGEgc2VjdXJpdHkgZ3JvdXAgYWxsb3dzIGFsbCBvdXRib3VuZCB0cmFmZmljXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0FsbE91dGJvdW5kTG9jYWwoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoaWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBbGwgYXJndW1lbnRzIHRvIGxvb2sgdXAgYSBzZWN1cml0eSBncm91cCBtdXN0IGJlIGNvbmNyZXRlIChubyBUb2tlbnMpXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKTtcbiAgY29uc3QgY29uZGl0aW9uTmFtZSA9IGAke2lkfUFsbG93QWxsT3V0Ym91bmRgO1xuICBsZXQgYWxsb3dBbGxPdXRib3VuZENvbmRpdGlvbiA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKFxuICAgIGNvbmRpdGlvbk5hbWUsXG4gICkgYXMgVGVycmFmb3JtTG9jYWw7XG4gIGlmIChhbGxvd0FsbE91dGJvdW5kQ29uZGl0aW9uKSB7XG4gICAgcmV0dXJuIGFsbG93QWxsT3V0Ym91bmRDb25kaXRpb24uZXhwcmVzc2lvbjtcbiAgfVxuXG4gIGNvbnN0IHNlY3VyaXR5R3JvdXBSdWxlc0xvb2t1cCA9XG4gICAgbmV3IGRhdGFBd3NWcGNTZWN1cml0eUdyb3VwUnVsZXMuRGF0YUF3c1ZwY1NlY3VyaXR5R3JvdXBSdWxlcyhcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7Y29uZGl0aW9uTmFtZX1SdWxlc2AsXG4gICAgICB7XG4gICAgICAgIGZpbHRlcjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZ3JvdXAtaWRcIixcbiAgICAgICAgICAgIHZhbHVlczogW3NlY3VyaXR5R3JvdXBJZF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgY29uc3Qgc2VjdXJpdHlHcm91cFJ1bGVJdGVyYXRvciA9IFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21MaXN0KFxuICAgIHNlY3VyaXR5R3JvdXBSdWxlc0xvb2t1cC5pZHMsXG4gICk7XG4gIGNvbnN0IHNlY3VyaXR5R3JvdXBSdWxlcyA9XG4gICAgbmV3IGRhdGFBd3NWcGNTZWN1cml0eUdyb3VwUnVsZS5EYXRhQXdzVnBjU2VjdXJpdHlHcm91cFJ1bGUoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2NvbmRpdGlvbk5hbWV9UnVsZWAsXG4gICAgICB7XG4gICAgICAgIGZvckVhY2g6IHNlY3VyaXR5R3JvdXBSdWxlSXRlcmF0b3IsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBSdWxlSWQ6IHNlY3VyaXR5R3JvdXBSdWxlSXRlcmF0b3IuZ2V0U3RyaW5nKFwiaWRcIiksXG4gICAgICB9LFxuICAgICk7XG5cbiAgY29uc3Qgc2VjdXJpdHlHcm91cFJ1bGVzSXRlcmF0b3IgPVxuICAgIFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21EYXRhU291cmNlcyhzZWN1cml0eUdyb3VwUnVsZXMpO1xuICAvLyBpc0FsbFByb3RvY29scyBhbmQgc29tZSBDaWRySXB2NCA9IFwiMC4wLjAuMC8wXCJcbiAgY29uc3QgQWxsVHJhZmZpY0NpZHJWNCA9IHNlY3VyaXR5R3JvdXBSdWxlc0l0ZXJhdG9yLmZvckV4cHJlc3Npb25Gb3JMaXN0KFxuICAgIFwidmFsLmFybiBpZiB2YWwuaXBfcHJvdG9jb2wgPSAtMSAmJiB2YWwuaXNfZWdyZXNzICYmIGNpZHJfaXB2NCA9ICcwLjAuMC4wLzAnXCIsXG4gICk7XG4gIC8vIGlzQWxsUHJvdG9jb2xzIGFuZCBzb21lIENpZHJJcHY2ID0gXCI6Oi8wXCJcbiAgY29uc3QgQWxsVHJhZmZpY0NpZHJWNiA9IHNlY3VyaXR5R3JvdXBSdWxlc0l0ZXJhdG9yLmZvckV4cHJlc3Npb25Gb3JMaXN0KFxuICAgIFwidmFsLmFybiBpZiB2YWwuaXBfcHJvdG9jb2wgPSAtMSAmJiB2YWwuaXNfZWdyZXNzICYmIGNpZHJfaXB2NiA9ICc6Oi8wJ1wiLFxuICApO1xuICByZXR1cm4gbmV3IFRlcnJhZm9ybUxvY2FsKFxuICAgIHN0YWNrLFxuICAgIGNvbmRpdGlvbk5hbWUsXG4gICAgYFxcJHtsZW5ndGgoJHtBbGxUcmFmZmljQ2lkclY0fSl9K1xcJHtsZW5ndGgoJHtBbGxUcmFmZmljQ2lkclY2fSl9ID4gMGAsXG4gICkuZXhwcmVzc2lvbjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { instance, launchTemplate } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { AmazonLinuxVirt } from "../machine-image/common";
|
|
4
|
+
import { BlockDevice } from "../volume";
|
|
5
|
+
export declare function instanceEbsBlockDeviceMappings(construct: Construct, blockDevices: BlockDevice[], tags?: Record<string, string>): instance.InstanceEbsBlockDevice[] | undefined;
|
|
6
|
+
export declare function launchTemplateBlockDeviceMappings(construct: Construct, blockDevices: BlockDevice[]): launchTemplate.LaunchTemplateBlockDeviceMappings[] | undefined;
|
|
7
|
+
export declare function instanceEphemeralBlockDeviceMappings(blockDevices: BlockDevice[]): instance.InstanceEphemeralBlockDevice[] | undefined;
|
|
8
|
+
export declare function instanceRootBlockDeviceMapping(construct: Construct, blockDevices: BlockDevice[], tags?: Record<string, string>): instance.InstanceRootBlockDevice | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Determines if the given device name is the reserved name for root volume.
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names
|
|
13
|
+
*/
|
|
14
|
+
export declare function isRootBlockDevice(blockDevice: BlockDevice, virtType?: AmazonLinuxVirt): boolean;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/private/ebs-util.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.instanceEbsBlockDeviceMappings = instanceEbsBlockDeviceMappings;
|
|
5
|
+
exports.launchTemplateBlockDeviceMappings = launchTemplateBlockDeviceMappings;
|
|
6
|
+
exports.instanceEphemeralBlockDeviceMappings = instanceEphemeralBlockDeviceMappings;
|
|
7
|
+
exports.instanceRootBlockDeviceMapping = instanceRootBlockDeviceMapping;
|
|
8
|
+
exports.isRootBlockDevice = isRootBlockDevice;
|
|
9
|
+
const cdktf_1 = require("cdktf");
|
|
10
|
+
const common_1 = require("../machine-image/common");
|
|
11
|
+
const volume_1 = require("../volume");
|
|
12
|
+
function instanceEbsBlockDeviceMappings(construct, blockDevices, tags) {
|
|
13
|
+
const result = [];
|
|
14
|
+
blockDevices
|
|
15
|
+
.filter((x) => !isEphemeral(x) && !isRootBlockDevice(x))
|
|
16
|
+
.forEach((blockDevice) => {
|
|
17
|
+
const { deviceName, volume } = blockDevice;
|
|
18
|
+
const common = blockDeviceCommon(construct, volume);
|
|
19
|
+
result.push({
|
|
20
|
+
deviceName,
|
|
21
|
+
...common,
|
|
22
|
+
tags,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return result.length === 0 ? undefined : result;
|
|
26
|
+
}
|
|
27
|
+
function launchTemplateBlockDeviceMappings(construct, blockDevices) {
|
|
28
|
+
const result = [];
|
|
29
|
+
for (const blockDevice of blockDevices) {
|
|
30
|
+
if (!isRootBlockDevice(blockDevice)) {
|
|
31
|
+
const { deviceName, volume, mappingEnabled } = blockDevice;
|
|
32
|
+
const common = blockDeviceCommon(construct, volume);
|
|
33
|
+
// convert EbsBlockVolume common properties for LaunchTemplateBlockDeviceMappings
|
|
34
|
+
const deleteOnTermination = common?.deleteOnTermination !== undefined
|
|
35
|
+
? common.deleteOnTermination.toString()
|
|
36
|
+
: undefined;
|
|
37
|
+
const encrypted = common?.encrypted !== undefined
|
|
38
|
+
? common.encrypted.toString()
|
|
39
|
+
: undefined;
|
|
40
|
+
result.push({
|
|
41
|
+
deviceName,
|
|
42
|
+
noDevice: mappingEnabled === false ? "" : undefined,
|
|
43
|
+
virtualName: volume.virtualName,
|
|
44
|
+
...(volume.virtualName
|
|
45
|
+
? {}
|
|
46
|
+
: {
|
|
47
|
+
ebs: {
|
|
48
|
+
...common,
|
|
49
|
+
encrypted,
|
|
50
|
+
deleteOnTermination,
|
|
51
|
+
},
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result.length === 0 ? undefined : result;
|
|
57
|
+
}
|
|
58
|
+
function instanceEphemeralBlockDeviceMappings(blockDevices) {
|
|
59
|
+
const ephemeralBlockDevices = blockDevices
|
|
60
|
+
.filter(isEphemeral)
|
|
61
|
+
.map((blockDevice) => {
|
|
62
|
+
const { deviceName, volume, mappingEnabled } = blockDevice;
|
|
63
|
+
const noDevice = mappingEnabled === false;
|
|
64
|
+
const virtualName = noDevice ? volume.virtualName : undefined;
|
|
65
|
+
return { deviceName, virtualName, noDevice };
|
|
66
|
+
});
|
|
67
|
+
return ephemeralBlockDevices.length === 0 ? undefined : ephemeralBlockDevices;
|
|
68
|
+
}
|
|
69
|
+
function instanceRootBlockDeviceMapping(construct, blockDevices, tags) {
|
|
70
|
+
for (const blockDevice of blockDevices) {
|
|
71
|
+
if (isRootBlockDevice(blockDevice)) {
|
|
72
|
+
return {
|
|
73
|
+
...blockDeviceCommon(construct, blockDevice.volume),
|
|
74
|
+
tags,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
function blockDeviceCommon(construct, volume) {
|
|
81
|
+
const { ebsDevice: ebs } = volume;
|
|
82
|
+
if (ebs) {
|
|
83
|
+
const { iops, throughput, volumeType, kmsKey, ...rest } = ebs;
|
|
84
|
+
if (throughput) {
|
|
85
|
+
if (volumeType !== volume_1.EbsDeviceVolumeType.GP3) {
|
|
86
|
+
throw new Error(`'throughput' requires 'volumeType': ${volume_1.EbsDeviceVolumeType.GP3}, got: ${volumeType}.`);
|
|
87
|
+
}
|
|
88
|
+
if (!Number.isInteger(throughput)) {
|
|
89
|
+
throw new Error(`'throughput' must be an integer, got: ${throughput}.`);
|
|
90
|
+
}
|
|
91
|
+
if (throughput < 125 || throughput > 1000) {
|
|
92
|
+
throw new Error(`'throughput' must be between 125 and 1000, got ${throughput}.`);
|
|
93
|
+
}
|
|
94
|
+
const maximumThroughputRatio = 0.25;
|
|
95
|
+
if (iops) {
|
|
96
|
+
const iopsRatio = throughput / iops;
|
|
97
|
+
if (iopsRatio > maximumThroughputRatio) {
|
|
98
|
+
throw new Error(`Throughput (MiBps) to iops ratio of ${iopsRatio} is too high; maximum is ${maximumThroughputRatio} MiBps per iops`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!iops) {
|
|
103
|
+
if (volumeType === volume_1.EbsDeviceVolumeType.IO1 ||
|
|
104
|
+
volumeType === volume_1.EbsDeviceVolumeType.IO2) {
|
|
105
|
+
throw new Error("iops property is required with volumeType: EbsDeviceVolumeType.IO1 and EbsDeviceVolumeType.IO2");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (volumeType !== volume_1.EbsDeviceVolumeType.IO1 &&
|
|
109
|
+
volumeType !== volume_1.EbsDeviceVolumeType.IO2 &&
|
|
110
|
+
volumeType !== volume_1.EbsDeviceVolumeType.GP3) {
|
|
111
|
+
// "@aws-cdk/aws-ec2:iopsIgnored",
|
|
112
|
+
cdktf_1.Annotations.of(construct).addWarning("iops will be ignored without volumeType: IO1, IO2, or GP3");
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Because the Ebs properties of the L2 Constructs do not match the Ebs properties
|
|
116
|
+
* of the TF *BlockDevice structs, we have to do some transformation
|
|
117
|
+
*/
|
|
118
|
+
return {
|
|
119
|
+
...rest,
|
|
120
|
+
iops,
|
|
121
|
+
throughput,
|
|
122
|
+
volumeType,
|
|
123
|
+
kmsKeyId: kmsKey?.keyArn,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Determines if the given device name is the reserved name for root volume.
|
|
130
|
+
*
|
|
131
|
+
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names
|
|
132
|
+
*/
|
|
133
|
+
function isRootBlockDevice(blockDevice, virtType = common_1.AmazonLinuxVirt.HVM) {
|
|
134
|
+
switch (virtType) {
|
|
135
|
+
case common_1.AmazonLinuxVirt.HVM:
|
|
136
|
+
return (blockDevice.deviceName === "/dev/sda1" ||
|
|
137
|
+
blockDevice.deviceName === "/dev/xvda");
|
|
138
|
+
case common_1.AmazonLinuxVirt.PV:
|
|
139
|
+
return blockDevice.deviceName === "/dev/sda1";
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function isEphemeral(blockDevice) {
|
|
143
|
+
return blockDevice.volume.isEphemeral();
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWJzLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcHJpdmF0ZS9lYnMtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0dBQW9HOztBQVdwRyx3RUFrQkM7QUFFRCw4RUFtQ0M7QUFFRCxvRkFZQztBQUVELHdFQWNDO0FBNEVELDhDQWFDO0FBdExELGlDQUdlO0FBRWYsb0RBQTBEO0FBQzFELHNDQUFnRjtBQUVoRixTQUFnQiw4QkFBOEIsQ0FDNUMsU0FBb0IsRUFDcEIsWUFBMkIsRUFDM0IsSUFBNkI7SUFFN0IsTUFBTSxNQUFNLEdBQXNDLEVBQUUsQ0FBQztJQUNyRCxZQUFZO1NBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZELE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsVUFBVTtZQUNWLEdBQUcsTUFBTTtZQUNULElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFnQixpQ0FBaUMsQ0FDL0MsU0FBb0IsRUFDcEIsWUFBMkI7SUFFM0IsTUFBTSxNQUFNLEdBQXVELEVBQUUsQ0FBQztJQUN0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLElB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Q0FBQztZQUNELGtDQUFrQztZQUNsQyxtQkFBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQ2xDLDJEQUEyRCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUVEOzs7V0FHRztRQUVILE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxJQUFJO1lBQ0osVUFBVTtZQUNWLFVBQVU7WUFDVixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixXQUF3QixFQUN4QixXQUE0Qix3QkFBZSxDQUFDLEdBQUc7SUFFL0MsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLHdCQUFlLENBQUMsR0FBRztZQUN0QixPQUFPLENBQ0wsV0FBVyxDQUFDLFVBQVUsS0FBSyxXQUFXO2dCQUN0QyxXQUFXLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FDdkMsQ0FBQztRQUNKLEtBQUssd0JBQWUsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sV0FBVyxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxXQUF3QjtJQUczQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL3ByaXZhdGUvZWJzLXV0aWwudHNcblxuaW1wb3J0IHsgaW5zdGFuY2UsIGxhdW5jaFRlbXBsYXRlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICAvL0lSZXNvbHZhYmxlXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFtYXpvbkxpbnV4VmlydCB9IGZyb20gXCIuLi9tYWNoaW5lLWltYWdlL2NvbW1vblwiO1xuaW1wb3J0IHsgQmxvY2tEZXZpY2UsIEJsb2NrRGV2aWNlVm9sdW1lLCBFYnNEZXZpY2VWb2x1bWVUeXBlIH0gZnJvbSBcIi4uL3ZvbHVtZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFuY2VFYnNCbG9ja0RldmljZU1hcHBpbmdzKFxuICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgYmxvY2tEZXZpY2VzOiBCbG9ja0RldmljZVtdLFxuICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IGluc3RhbmNlLkluc3RhbmNlRWJzQmxvY2tEZXZpY2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlc3VsdDogaW5zdGFuY2UuSW5zdGFuY2VFYnNCbG9ja0RldmljZVtdID0gW107XG4gIGJsb2NrRGV2aWNlc1xuICAgIC5maWx0ZXIoKHgpID0+ICFpc0VwaGVtZXJhbCh4KSAmJiAhaXNSb290QmxvY2tEZXZpY2UoeCkpXG4gICAgLmZvckVhY2goKGJsb2NrRGV2aWNlKSA9PiB7XG4gICAgICBjb25zdCB7IGRldmljZU5hbWUsIHZvbHVtZSB9ID0gYmxvY2tEZXZpY2U7XG4gICAgICBjb25zdCBjb21tb24gPSBibG9ja0RldmljZUNvbW1vbihjb25zdHJ1Y3QsIHZvbHVtZSk7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRldmljZU5hbWUsXG4gICAgICAgIC4uLmNvbW1vbixcbiAgICAgICAgdGFncyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdW5jaFRlbXBsYXRlQmxvY2tEZXZpY2VNYXBwaW5ncyhcbiAgY29uc3RydWN0OiBDb25zdHJ1Y3QsXG4gIGJsb2NrRGV2aWNlczogQmxvY2tEZXZpY2VbXSxcbik6IGxhdW5jaFRlbXBsYXRlLkxhdW5jaFRlbXBsYXRlQmxvY2tEZXZpY2VNYXBwaW5nc1tdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzdWx0OiBsYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZUJsb2NrRGV2aWNlTWFwcGluZ3NbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGJsb2NrRGV2aWNlIG9mIGJsb2NrRGV2aWNlcykge1xuICAgIGlmICghaXNSb290QmxvY2tEZXZpY2UoYmxvY2tEZXZpY2UpKSB7XG4gICAgICBjb25zdCB7IGRldmljZU5hbWUsIHZvbHVtZSwgbWFwcGluZ0VuYWJsZWQgfSA9IGJsb2NrRGV2aWNlO1xuICAgICAgY29uc3QgY29tbW9uID0gYmxvY2tEZXZpY2VDb21tb24oY29uc3RydWN0LCB2b2x1bWUpO1xuICAgICAgLy8gY29udmVydCBFYnNCbG9ja1ZvbHVtZSBjb21tb24gcHJvcGVydGllcyBmb3IgTGF1bmNoVGVtcGxhdGVCbG9ja0RldmljZU1hcHBpbmdzXG4gICAgICBjb25zdCBkZWxldGVPblRlcm1pbmF0aW9uID1cbiAgICAgICAgY29tbW9uPy5kZWxldGVPblRlcm1pbmF0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGNvbW1vbi5kZWxldGVPblRlcm1pbmF0aW9uLnRvU3RyaW5nKClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZCA9XG4gICAgICAgIGNvbW1vbj8uZW5jcnlwdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGNvbW1vbi5lbmNyeXB0ZWQudG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkZXZpY2VOYW1lLFxuICAgICAgICBub0RldmljZTogbWFwcGluZ0VuYWJsZWQgPT09IGZhbHNlID8gXCJcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgdmlydHVhbE5hbWU6IHZvbHVtZS52aXJ0dWFsTmFtZSxcbiAgICAgICAgLi4uKHZvbHVtZS52aXJ0dWFsTmFtZVxuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgZWJzOiB7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICAgICAgICAgIGVuY3J5cHRlZCxcbiAgICAgICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW5jZUVwaGVtZXJhbEJsb2NrRGV2aWNlTWFwcGluZ3MoXG4gIGJsb2NrRGV2aWNlczogQmxvY2tEZXZpY2VbXSxcbik6IGluc3RhbmNlLkluc3RhbmNlRXBoZW1lcmFsQmxvY2tEZXZpY2VbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVwaGVtZXJhbEJsb2NrRGV2aWNlcyA9IGJsb2NrRGV2aWNlc1xuICAgIC5maWx0ZXIoaXNFcGhlbWVyYWwpXG4gICAgLm1hcCgoYmxvY2tEZXZpY2UpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV2aWNlTmFtZSwgdm9sdW1lLCBtYXBwaW5nRW5hYmxlZCB9ID0gYmxvY2tEZXZpY2U7XG4gICAgICBjb25zdCBub0RldmljZSA9IG1hcHBpbmdFbmFibGVkID09PSBmYWxzZTtcbiAgICAgIGNvbnN0IHZpcnR1YWxOYW1lID0gbm9EZXZpY2UgPyB2b2x1bWUudmlydHVhbE5hbWUgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4geyBkZXZpY2VOYW1lLCB2aXJ0dWFsTmFtZSwgbm9EZXZpY2UgfTtcbiAgICB9KTtcbiAgcmV0dXJuIGVwaGVtZXJhbEJsb2NrRGV2aWNlcy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBlcGhlbWVyYWxCbG9ja0RldmljZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW5jZVJvb3RCbG9ja0RldmljZU1hcHBpbmcoXG4gIGNvbnN0cnVjdDogQ29uc3RydWN0LFxuICBibG9ja0RldmljZXM6IEJsb2NrRGV2aWNlW10sXG4gIHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogaW5zdGFuY2UuSW5zdGFuY2VSb290QmxvY2tEZXZpY2UgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGJsb2NrRGV2aWNlIG9mIGJsb2NrRGV2aWNlcykge1xuICAgIGlmIChpc1Jvb3RCbG9ja0RldmljZShibG9ja0RldmljZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJsb2NrRGV2aWNlQ29tbW9uKGNvbnN0cnVjdCwgYmxvY2tEZXZpY2Uudm9sdW1lKSxcbiAgICAgICAgdGFncyxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJsb2NrRGV2aWNlQ29tbW9uKGNvbnN0cnVjdDogQ29uc3RydWN0LCB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lKSB7XG4gIGNvbnN0IHsgZWJzRGV2aWNlOiBlYnMgfSA9IHZvbHVtZTtcbiAgaWYgKGVicykge1xuICAgIGNvbnN0IHsgaW9wcywgdGhyb3VnaHB1dCwgdm9sdW1lVHlwZSwga21zS2V5LCAuLi5yZXN0IH0gPSBlYnM7XG5cbiAgICBpZiAodGhyb3VnaHB1dCkge1xuICAgICAgaWYgKHZvbHVtZVR5cGUgIT09IEVic0RldmljZVZvbHVtZVR5cGUuR1AzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJ3Rocm91Z2hwdXQnIHJlcXVpcmVzICd2b2x1bWVUeXBlJzogJHtFYnNEZXZpY2VWb2x1bWVUeXBlLkdQM30sIGdvdDogJHt2b2x1bWVUeXBlfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodGhyb3VnaHB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAndGhyb3VnaHB1dCcgbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3Q6ICR7dGhyb3VnaHB1dH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aHJvdWdocHV0IDwgMTI1IHx8IHRocm91Z2hwdXQgPiAxMDAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJ3Rocm91Z2hwdXQnIG11c3QgYmUgYmV0d2VlbiAxMjUgYW5kIDEwMDAsIGdvdCAke3Rocm91Z2hwdXR9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heGltdW1UaHJvdWdocHV0UmF0aW8gPSAwLjI1O1xuICAgICAgaWYgKGlvcHMpIHtcbiAgICAgICAgY29uc3QgaW9wc1JhdGlvID0gdGhyb3VnaHB1dCAvIGlvcHM7XG4gICAgICAgIGlmIChpb3BzUmF0aW8gPiBtYXhpbXVtVGhyb3VnaHB1dFJhdGlvKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRocm91Z2hwdXQgKE1pQnBzKSB0byBpb3BzIHJhdGlvIG9mICR7aW9wc1JhdGlvfSBpcyB0b28gaGlnaDsgbWF4aW11bSBpcyAke21heGltdW1UaHJvdWdocHV0UmF0aW99IE1pQnBzIHBlciBpb3BzYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHZvbHVtZVR5cGUgPT09IEVic0RldmljZVZvbHVtZVR5cGUuSU8xIHx8XG4gICAgICAgIHZvbHVtZVR5cGUgPT09IEVic0RldmljZVZvbHVtZVR5cGUuSU8yXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiaW9wcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aXRoIHZvbHVtZVR5cGU6IEVic0RldmljZVZvbHVtZVR5cGUuSU8xIGFuZCBFYnNEZXZpY2VWb2x1bWVUeXBlLklPMlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB2b2x1bWVUeXBlICE9PSBFYnNEZXZpY2VWb2x1bWVUeXBlLklPMSAmJlxuICAgICAgdm9sdW1lVHlwZSAhPT0gRWJzRGV2aWNlVm9sdW1lVHlwZS5JTzIgJiZcbiAgICAgIHZvbHVtZVR5cGUgIT09IEVic0RldmljZVZvbHVtZVR5cGUuR1AzXG4gICAgKSB7XG4gICAgICAvLyBcIkBhd3MtY2RrL2F3cy1lYzI6aW9wc0lnbm9yZWRcIixcbiAgICAgIEFubm90YXRpb25zLm9mKGNvbnN0cnVjdCkuYWRkV2FybmluZyhcbiAgICAgICAgXCJpb3BzIHdpbGwgYmUgaWdub3JlZCB3aXRob3V0IHZvbHVtZVR5cGU6IElPMSwgSU8yLCBvciBHUDNcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSB0aGUgRWJzIHByb3BlcnRpZXMgb2YgdGhlIEwyIENvbnN0cnVjdHMgZG8gbm90IG1hdGNoIHRoZSBFYnMgcHJvcGVydGllc1xuICAgICAqIG9mIHRoZSBURiAqQmxvY2tEZXZpY2Ugc3RydWN0cywgd2UgaGF2ZSB0byBkbyBzb21lIHRyYW5zZm9ybWF0aW9uXG4gICAgICovXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdCxcbiAgICAgIGlvcHMsXG4gICAgICB0aHJvdWdocHV0LFxuICAgICAgdm9sdW1lVHlwZSxcbiAgICAgIGttc0tleUlkOiBrbXNLZXk/LmtleUFybixcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZGV2aWNlIG5hbWUgaXMgdGhlIHJlc2VydmVkIG5hbWUgZm9yIHJvb3Qgdm9sdW1lLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2RldmljZV9uYW1pbmcuaHRtbCNhdmFpbGFibGUtZWMyLWRldmljZS1uYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSb290QmxvY2tEZXZpY2UoXG4gIGJsb2NrRGV2aWNlOiBCbG9ja0RldmljZSxcbiAgdmlydFR5cGU6IEFtYXpvbkxpbnV4VmlydCA9IEFtYXpvbkxpbnV4VmlydC5IVk0sXG4pOiBib29sZWFuIHtcbiAgc3dpdGNoICh2aXJ0VHlwZSkge1xuICAgIGNhc2UgQW1hem9uTGludXhWaXJ0LkhWTTpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGJsb2NrRGV2aWNlLmRldmljZU5hbWUgPT09IFwiL2Rldi9zZGExXCIgfHxcbiAgICAgICAgYmxvY2tEZXZpY2UuZGV2aWNlTmFtZSA9PT0gXCIvZGV2L3h2ZGFcIlxuICAgICAgKTtcbiAgICBjYXNlIEFtYXpvbkxpbnV4VmlydC5QVjpcbiAgICAgIHJldHVybiBibG9ja0RldmljZS5kZXZpY2VOYW1lID09PSBcIi9kZXYvc2RhMVwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXBoZW1lcmFsKGJsb2NrRGV2aWNlOiBCbG9ja0RldmljZSk6IGJsb2NrRGV2aWNlIGlzIEJsb2NrRGV2aWNlICYge1xuICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lICYgeyB2aXJ0dWFsTmFtZTogc3RyaW5nIH07XG59IHtcbiAgcmV0dXJuIGJsb2NrRGV2aWNlLnZvbHVtZS5pc0VwaGVtZXJhbCgpO1xufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// https://github.com/aws/aws-cdk/blob/v2.160.0/packages/aws-cdk-lib/aws-stepfunctions/lib/private/intrinstics.ts
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.IntrinsicParser = void 0;
|
|
4
5
|
/**
|
|
@@ -217,4 +218,4 @@ exports.IntrinsicParser = IntrinsicParser;
|
|
|
217
218
|
function isAlphaNum(x) {
|
|
218
219
|
return x.match(/^[a-zA-Z0-9]$/);
|
|
219
220
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cmluc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcHJpdmF0ZS9pbnRyaW5zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QkE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsZUFBZTtJQUcxQixZQUE2QixVQUFrQjtRQUFsQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBRnZDLE1BQUMsR0FBVyxDQUFDLENBQUM7SUFFNEIsQ0FBQztJQUU1QyxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRVYsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUN4QixHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVWLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRVYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksVUFB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QUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFZLEdBQUc7UUFDYixPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDMUMsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNYLENBQUM7SUFFTyxPQUFPO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFlO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLE9BQU8sYUFBYSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ25HLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuT0QsMENBbU9DO0FBRUQsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE2MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zL2xpYi9wcml2YXRlL2ludHJpbnN0aWNzLnRzXG5leHBvcnQgdHlwZSBJbnRyaW5zaWNFeHByZXNzaW9uID1cbiAgfCBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvblxuICB8IFBhdGhFeHByZXNzaW9uXG4gIHwgRm5DYWxsRXhwcmVzc2lvbjtcbmV4cG9ydCB0eXBlIFRvcExldmVsSW50cmluc2ljID0gUGF0aEV4cHJlc3Npb24gfCBGbkNhbGxFeHByZXNzaW9uO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogXCJzdHJpbmctbGl0ZXJhbFwiO1xuICByZWFkb25seSBsaXRlcmFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aEV4cHJlc3Npb24ge1xuICByZWFkb25seSB0eXBlOiBcInBhdGhcIjtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZuQ2FsbEV4cHJlc3Npb24ge1xuICByZWFkb25seSB0eXBlOiBcImZuY2FsbFwiO1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJndW1lbnRzOiBJbnRyaW5zaWNFeHByZXNzaW9uW107XG59XG5cbi8qKlxuICogTEwoMSkgcGFyc2VyIGZvciBTdGVwRnVuY3Rpb25zIGludHJpbnNpY3NcbiAqXG4gKiBUaGUgcGFyc2VyIGltcGxlbWVudHMgYSBzdGF0ZSBtYWNoaW5lIG92ZXIgYSBjdXJzb3IgaW50byBhbiBleHByZXNzaW9uXG4gKiBzdHJpbmcuIFRoZSBjdXNvciBnZXRzIG1vdmVkLCB0aGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJzb3IgZ2V0cyBpbnNwZWN0ZWRcbiAqIGFuZCBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyIHdlIGFjY3VtdWxhdGUgc29tZSB2YWx1ZSBhbmQgcG90ZW50aWFsbHkgbW92ZVxuICogdG8gYSBkaWZmZXJlbnQgc3RhdGUuXG4gKlxuICogTGl0ZXJhbCBzdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhdCB0aGUgdG9wIGxldmVsLCBidXQgYXJlIGFsbG93ZWQgaW5zaWRlXG4gKiBmdW5jdGlvbiBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludHJpbnNpY1BhcnNlciB7XG4gIHByaXZhdGUgaTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZykge31cblxuICBwdWJsaWMgcGFyc2VUb3BMZXZlbEludHJpbnNpYygpOiBUb3BMZXZlbEludHJpbnNpYyB7XG4gICAgdGhpcy53cygpO1xuXG4gICAgbGV0IHJldDtcbiAgICBpZiAodGhpcy5jaGFyKCkgPT09IFwiJFwiKSB7XG4gICAgICByZXQgPSB0aGlzLnBhcnNlUGF0aCgpO1xuICAgIH0gZWxzZSBpZiAoaXNBbHBoYU51bSh0aGlzLmNoYXIoKSkpIHtcbiAgICAgIHJldCA9IHRoaXMucGFyc2VGbkNhbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYWlzZUVycm9yKFwiZXhwZWN0ZWQgJyQnIG9yIGEgZnVuY3Rpb24gY2FsbFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLndzKCk7XG5cbiAgICBpZiAoIXRoaXMuZW9mKSB7XG4gICAgICB0aGlzLnJhaXNlRXJyb3IoXCJ1bmV4cGVjdGVkIHRyYWlsaW5nIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbnRyaW5zaWMoKTogSW50cmluc2ljRXhwcmVzc2lvbiB7XG4gICAgdGhpcy53cygpO1xuXG4gICAgaWYgKHRoaXMuY2hhcigpID09PSBcIiRcIikge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzQWxwaGFOdW0odGhpcy5jaGFyKCkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZuQ2FsbCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXIoKSA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpO1xuICAgIH1cblxuICAgIHRoaXMucmFpc2VFcnJvcihcImV4cGVjdGVkICQsIGZ1bmN0aW9uIG9yIHNpbmdsZS1xdW90ZWQgc3RyaW5nXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsaWZpZWQgcGF0aCBwYXJzaW5nXG4gICAqXG4gICAqIEpTT04gcGF0aCBjYW4gYWN0dWFsbHkgYmUgcXVpdGUgY29tcGxpY2F0ZWQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHZhbGlkYXRlXG4gICAqIGl0IHByZWNpc2VseS4gV2UganVzdCBuZWVkIHRvIGtub3cgaG93IGZhciBpdCBleHRlbmRzLlxuICAgKlxuICAgKiBUaGVyZWZvcmUsIHdlIG9ubHkgY2FyZSBhYm91dDpcbiAgICpcbiAgICogLSBTdGFydHMgd2l0aCBhICRcbiAgICogLSBBY2NlcHQgLiwgJCBhbmQgYWxwaGFudW1zXG4gICAqIC0gQWNjZXB0IHNpbmdsZS1xdW90ZWQgc3RyaW5ncyAoJy4uLicpXG4gICAqIC0gQWNjZXB0IGFueXRoaW5nIGJldHdlZW4gbWF0Y2hlZCBzcXVhcmUgYnJhY2tldHMgKFsuLi5dKVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVBhdGgoKTogUGF0aEV4cHJlc3Npb24ge1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmICh0aGlzLmNoYXIoKSAhPT0gXCIkXCIpIHtcbiAgICAgIHRoaXMucmFpc2VFcnJvcihcImV4cGVjdGVkICckJ1wiKTtcbiAgICB9XG4gICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZSgpKTtcblxuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgd2hpbGUgKCFkb25lICYmICF0aGlzLmVvZikge1xuICAgICAgc3dpdGNoICh0aGlzLmNoYXIoKSkge1xuICAgICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgIHBhdGhTdHJpbmcucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgY29uc3QgeyBxdW90ZWQgfSA9IHRoaXMuY29uc3VtZVF1b3RlZFN0cmluZygpO1xuICAgICAgICAgIHBhdGhTdHJpbmcucHVzaChxdW90ZWQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZUJyYWNrZXRlZEV4cHJlc3Npb24oXCJdXCIpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc0FscGhhTnVtKHRoaXMuY2hhcigpKSkge1xuICAgICAgICAgICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vdCBhbHBoYW51bSwgZW5kIG9mIHBhdGggZXhwcmVzc2lvblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHR5cGU6IFwicGF0aFwiLCBwYXRoOiBwYXRoU3RyaW5nLmpvaW4oXCJcIikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIGZuY2FsbFxuICAgKlxuICAgKiBDdXJzb3Igc2hvdWxkIGJlIG9uIGNhbGwgaWRlbnRpZmllci4gQWZ0ZXJ3YXJkcywgY3Vyc29yIHdpbGwgYmUgb24gY2xvc2luZ1xuICAgKiBxdW90ZS5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VGbkNhbGwoKTogRm5DYWxsRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgbmFtZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgd2hpbGUgKHRoaXMuY2hhcigpICE9PSBcIihcIikge1xuICAgICAgbmFtZS5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLm5leHQoKTsgLy8gQ29uc3VtZSB0aGUgJygnXG4gICAgdGhpcy53cygpO1xuXG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIHdoaWxlICh0aGlzLmNoYXIoKSAhPT0gXCIpXCIpIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLnBhcnNlSW50cmluc2ljKCkpO1xuICAgICAgdGhpcy53cygpO1xuXG4gICAgICBpZiAodGhpcy5jaGFyKCkgPT09IFwiLFwiKSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyKCkgPT09IFwiKVwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yYWlzZUVycm9yKFwiZXhwZWN0ZWQgLCBvciApXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5leHQoKTsgLy8gQ29uc3VtZSAnKSdcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZuY2FsbFwiLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZnVuY3Rpb25OYW1lOiBuYW1lLmpvaW4oXCJcIiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEN1cnNvciBpcyBleHBlY3RlZCB0byBiZSBvbiB0aGUgZmlyc3Qgb3BlbmluZyBxdW90ZS4gQWZ0ZXJ3YXJkcyxcbiAgICogY3Vyc29yIHdpbGwgYmUgYWZ0ZXIgdGhlIGNsb3NpbmcgcXVvdGUuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlU3RyaW5nTGl0ZXJhbCgpOiBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgeyB1bnF1b3RlZCB9ID0gdGhpcy5jb25zdW1lUXVvdGVkU3RyaW5nKCk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmctbGl0ZXJhbFwiLCBsaXRlcmFsOiB1bnF1b3RlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgYnJhY2tldGVkIGV4cHJlc3Npb25cbiAgICpcbiAgICogQ3Vyc29yIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRoZSBvcGVuaW5nIGJyYWNlLiBBZnRlcndhcmRzLFxuICAgKiB0aGUgY3Vyc29yIHdpbGwgYmUgYWZ0ZXIgdGhlIGNsb3NpbmcgYnJhY2UuXG4gICAqL1xuICBwcml2YXRlIGNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKGNsb3NpbmdCcmFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIHJldC5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICB3aGlsZSAodGhpcy5jaGFyKCkgIT09IGNsb3NpbmdCcmFjZSkge1xuICAgICAgaWYgKHRoaXMuY2hhcigpID09PSBcIltcIikge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKFwiXVwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcigpID09PSBcIntcIikge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKFwifVwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldC5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICByZXR1cm4gcmV0LmpvaW4oXCJcIik7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBDdXJzb3IgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdGhlIGZpcnN0IG9wZW5pbmcgcXVvdGUuIEFmdGVyd2FyZHMsXG4gICAqIGN1cnNvciB3aWxsIGJlIGFmdGVyIHRoZSBjbG9zaW5nIHF1b3RlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUXVvdGVkU3RyaW5nKCk6IHsgcmVhZG9ubHkgcXVvdGVkOiBzdHJpbmc7IHVucXVvdGVkOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgcXVvdGVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCB1bnF1b3RlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgd2hpbGUgKHRoaXMuY2hhcigpICE9PSBcIidcIikge1xuICAgICAgaWYgKHRoaXMuY2hhcigpID09PSBcIlxcXFxcIikge1xuICAgICAgICAvLyBBZHZhbmNlIGFuZCBhZGQgbmV4dCBjaGFyYWN0ZXIgbGl0ZXJhbGx5LCB3aGF0ZXZlciBpdCBpc1xuICAgICAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICB9XG4gICAgICBxdW90ZWQucHVzaCh0aGlzLmNoYXIoKSk7XG4gICAgICB1bnF1b3RlZC5wdXNoKHRoaXMuY2hhcigpKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgcmV0dXJuIHsgcXVvdGVkOiBxdW90ZWQuam9pbihcIlwiKSwgdW5xdW90ZWQ6IHVucXVvdGVkLmpvaW4oXCJcIikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lIHdoaXRlc3BhY2UgaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBwcml2YXRlIHdzKCkge1xuICAgIHdoaWxlICghdGhpcy5lb2YgJiYgW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiXS5pbmNsdWRlcyh0aGlzLmNoYXIoKSkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGVvZigpIHtcbiAgICByZXR1cm4gdGhpcy5pID49IHRoaXMuZXhwcmVzc2lvbi5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGNoYXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgIHRoaXMucmFpc2VFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZ1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uW3RoaXMuaV07XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgdGhpcy5pKys7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUoKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5jaGFyKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcmFpc2VFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgSlNPTlBhdGggZXhwcmVzc2lvbjogJHttZXNzYWdlfSBhdCBpbmRleCAke3RoaXMuaX0gaW4gJHtKU09OLnN0cmluZ2lmeSh0aGlzLmV4cHJlc3Npb24pfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FscGhhTnVtKHg6IHN0cmluZykge1xuICByZXR1cm4geC5tYXRjaCgvXlthLXpBLVowLTldJC8pO1xufVxuIl19
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cmluc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcHJpdmF0ZS9pbnRyaW5zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUhBQWlIOzs7QUF3QmpIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLGVBQWU7SUFHMUIsWUFBNkIsVUFBa0I7UUFBbEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUZ2QyxNQUFDLEdBQVcsQ0FBQyxDQUFDO0lBRTRCLENBQUM7SUFFNUMsc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVWLElBQUksR0FBRyxDQUFDO1FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDeEIsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFVixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFCLENBQUM7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QyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBWSxHQUFHO1FBQ2IsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBZTtRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxPQUFPLGFBQWEsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUNuRyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbk9ELDBDQW1PQztBQUVELFNBQVMsVUFBVSxDQUFDLENBQVM7SUFDM0IsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNjAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy9saWIvcHJpdmF0ZS9pbnRyaW5zdGljcy50c1xuXG5leHBvcnQgdHlwZSBJbnRyaW5zaWNFeHByZXNzaW9uID1cbiAgfCBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvblxuICB8IFBhdGhFeHByZXNzaW9uXG4gIHwgRm5DYWxsRXhwcmVzc2lvbjtcbmV4cG9ydCB0eXBlIFRvcExldmVsSW50cmluc2ljID0gUGF0aEV4cHJlc3Npb24gfCBGbkNhbGxFeHByZXNzaW9uO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0xpdGVyYWxFeHByZXNzaW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogXCJzdHJpbmctbGl0ZXJhbFwiO1xuICByZWFkb25seSBsaXRlcmFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aEV4cHJlc3Npb24ge1xuICByZWFkb25seSB0eXBlOiBcInBhdGhcIjtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZuQ2FsbEV4cHJlc3Npb24ge1xuICByZWFkb25seSB0eXBlOiBcImZuY2FsbFwiO1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJndW1lbnRzOiBJbnRyaW5zaWNFeHByZXNzaW9uW107XG59XG5cbi8qKlxuICogTEwoMSkgcGFyc2VyIGZvciBTdGVwRnVuY3Rpb25zIGludHJpbnNpY3NcbiAqXG4gKiBUaGUgcGFyc2VyIGltcGxlbWVudHMgYSBzdGF0ZSBtYWNoaW5lIG92ZXIgYSBjdXJzb3IgaW50byBhbiBleHByZXNzaW9uXG4gKiBzdHJpbmcuIFRoZSBjdXNvciBnZXRzIG1vdmVkLCB0aGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJzb3IgZ2V0cyBpbnNwZWN0ZWRcbiAqIGFuZCBiYXNlZCBvbiB0aGUgY2hhcmFjdGVyIHdlIGFjY3VtdWxhdGUgc29tZSB2YWx1ZSBhbmQgcG90ZW50aWFsbHkgbW92ZVxuICogdG8gYSBkaWZmZXJlbnQgc3RhdGUuXG4gKlxuICogTGl0ZXJhbCBzdHJpbmdzIGFyZSBub3QgYWxsb3dlZCBhdCB0aGUgdG9wIGxldmVsLCBidXQgYXJlIGFsbG93ZWQgaW5zaWRlXG4gKiBmdW5jdGlvbiBjYWxscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEludHJpbnNpY1BhcnNlciB7XG4gIHByaXZhdGUgaTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZykge31cblxuICBwdWJsaWMgcGFyc2VUb3BMZXZlbEludHJpbnNpYygpOiBUb3BMZXZlbEludHJpbnNpYyB7XG4gICAgdGhpcy53cygpO1xuXG4gICAgbGV0IHJldDtcbiAgICBpZiAodGhpcy5jaGFyKCkgPT09IFwiJFwiKSB7XG4gICAgICByZXQgPSB0aGlzLnBhcnNlUGF0aCgpO1xuICAgIH0gZWxzZSBpZiAoaXNBbHBoYU51bSh0aGlzLmNoYXIoKSkpIHtcbiAgICAgIHJldCA9IHRoaXMucGFyc2VGbkNhbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYWlzZUVycm9yKFwiZXhwZWN0ZWQgJyQnIG9yIGEgZnVuY3Rpb24gY2FsbFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLndzKCk7XG5cbiAgICBpZiAoIXRoaXMuZW9mKSB7XG4gICAgICB0aGlzLnJhaXNlRXJyb3IoXCJ1bmV4cGVjdGVkIHRyYWlsaW5nIGNoYXJhY3RlcnNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbnRyaW5zaWMoKTogSW50cmluc2ljRXhwcmVzc2lvbiB7XG4gICAgdGhpcy53cygpO1xuXG4gICAgaWYgKHRoaXMuY2hhcigpID09PSBcIiRcIikge1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzQWxwaGFOdW0odGhpcy5jaGFyKCkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZuQ2FsbCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXIoKSA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCgpO1xuICAgIH1cblxuICAgIHRoaXMucmFpc2VFcnJvcihcImV4cGVjdGVkICQsIGZ1bmN0aW9uIG9yIHNpbmdsZS1xdW90ZWQgc3RyaW5nXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsaWZpZWQgcGF0aCBwYXJzaW5nXG4gICAqXG4gICAqIEpTT04gcGF0aCBjYW4gYWN0dWFsbHkgYmUgcXVpdGUgY29tcGxpY2F0ZWQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHZhbGlkYXRlXG4gICAqIGl0IHByZWNpc2VseS4gV2UganVzdCBuZWVkIHRvIGtub3cgaG93IGZhciBpdCBleHRlbmRzLlxuICAgKlxuICAgKiBUaGVyZWZvcmUsIHdlIG9ubHkgY2FyZSBhYm91dDpcbiAgICpcbiAgICogLSBTdGFydHMgd2l0aCBhICRcbiAgICogLSBBY2NlcHQgLiwgJCBhbmQgYWxwaGFudW1zXG4gICAqIC0gQWNjZXB0IHNpbmdsZS1xdW90ZWQgc3RyaW5ncyAoJy4uLicpXG4gICAqIC0gQWNjZXB0IGFueXRoaW5nIGJldHdlZW4gbWF0Y2hlZCBzcXVhcmUgYnJhY2tldHMgKFsuLi5dKVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVBhdGgoKTogUGF0aEV4cHJlc3Npb24ge1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmICh0aGlzLmNoYXIoKSAhPT0gXCIkXCIpIHtcbiAgICAgIHRoaXMucmFpc2VFcnJvcihcImV4cGVjdGVkICckJ1wiKTtcbiAgICB9XG4gICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZSgpKTtcblxuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgd2hpbGUgKCFkb25lICYmICF0aGlzLmVvZikge1xuICAgICAgc3dpdGNoICh0aGlzLmNoYXIoKSkge1xuICAgICAgICBjYXNlIFwiLlwiOlxuICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgIHBhdGhTdHJpbmcucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgY29uc3QgeyBxdW90ZWQgfSA9IHRoaXMuY29uc3VtZVF1b3RlZFN0cmluZygpO1xuICAgICAgICAgIHBhdGhTdHJpbmcucHVzaChxdW90ZWQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZUJyYWNrZXRlZEV4cHJlc3Npb24oXCJdXCIpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc0FscGhhTnVtKHRoaXMuY2hhcigpKSkge1xuICAgICAgICAgICAgcGF0aFN0cmluZy5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vdCBhbHBoYW51bSwgZW5kIG9mIHBhdGggZXhwcmVzc2lvblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHR5cGU6IFwicGF0aFwiLCBwYXRoOiBwYXRoU3RyaW5nLmpvaW4oXCJcIikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIGZuY2FsbFxuICAgKlxuICAgKiBDdXJzb3Igc2hvdWxkIGJlIG9uIGNhbGwgaWRlbnRpZmllci4gQWZ0ZXJ3YXJkcywgY3Vyc29yIHdpbGwgYmUgb24gY2xvc2luZ1xuICAgKiBxdW90ZS5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VGbkNhbGwoKTogRm5DYWxsRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgbmFtZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgd2hpbGUgKHRoaXMuY2hhcigpICE9PSBcIihcIikge1xuICAgICAgbmFtZS5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLm5leHQoKTsgLy8gQ29uc3VtZSB0aGUgJygnXG4gICAgdGhpcy53cygpO1xuXG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIHdoaWxlICh0aGlzLmNoYXIoKSAhPT0gXCIpXCIpIHtcbiAgICAgIGFyZ3MucHVzaCh0aGlzLnBhcnNlSW50cmluc2ljKCkpO1xuICAgICAgdGhpcy53cygpO1xuXG4gICAgICBpZiAodGhpcy5jaGFyKCkgPT09IFwiLFwiKSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyKCkgPT09IFwiKVwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yYWlzZUVycm9yKFwiZXhwZWN0ZWQgLCBvciApXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm5leHQoKTsgLy8gQ29uc3VtZSAnKSdcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImZuY2FsbFwiLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZnVuY3Rpb25OYW1lOiBuYW1lLmpvaW4oXCJcIiksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEN1cnNvciBpcyBleHBlY3RlZCB0byBiZSBvbiB0aGUgZmlyc3Qgb3BlbmluZyBxdW90ZS4gQWZ0ZXJ3YXJkcyxcbiAgICogY3Vyc29yIHdpbGwgYmUgYWZ0ZXIgdGhlIGNsb3NpbmcgcXVvdGUuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlU3RyaW5nTGl0ZXJhbCgpOiBTdHJpbmdMaXRlcmFsRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgeyB1bnF1b3RlZCB9ID0gdGhpcy5jb25zdW1lUXVvdGVkU3RyaW5nKCk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmctbGl0ZXJhbFwiLCBsaXRlcmFsOiB1bnF1b3RlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgYnJhY2tldGVkIGV4cHJlc3Npb25cbiAgICpcbiAgICogQ3Vyc29yIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRoZSBvcGVuaW5nIGJyYWNlLiBBZnRlcndhcmRzLFxuICAgKiB0aGUgY3Vyc29yIHdpbGwgYmUgYWZ0ZXIgdGhlIGNsb3NpbmcgYnJhY2UuXG4gICAqL1xuICBwcml2YXRlIGNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKGNsb3NpbmdCcmFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIHJldC5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICB3aGlsZSAodGhpcy5jaGFyKCkgIT09IGNsb3NpbmdCcmFjZSkge1xuICAgICAgaWYgKHRoaXMuY2hhcigpID09PSBcIltcIikge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKFwiXVwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcigpID09PSBcIntcIikge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWVCcmFja2V0ZWRFeHByZXNzaW9uKFwifVwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldC5wdXNoKHRoaXMuY29uc3VtZSgpKTtcbiAgICByZXR1cm4gcmV0LmpvaW4oXCJcIik7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBDdXJzb3IgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdGhlIGZpcnN0IG9wZW5pbmcgcXVvdGUuIEFmdGVyd2FyZHMsXG4gICAqIGN1cnNvciB3aWxsIGJlIGFmdGVyIHRoZSBjbG9zaW5nIHF1b3RlLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUXVvdGVkU3RyaW5nKCk6IHsgcmVhZG9ubHkgcXVvdGVkOiBzdHJpbmc7IHVucXVvdGVkOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgcXVvdGVkID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCB1bnF1b3RlZCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgd2hpbGUgKHRoaXMuY2hhcigpICE9PSBcIidcIikge1xuICAgICAgaWYgKHRoaXMuY2hhcigpID09PSBcIlxcXFxcIikge1xuICAgICAgICAvLyBBZHZhbmNlIGFuZCBhZGQgbmV4dCBjaGFyYWN0ZXIgbGl0ZXJhbGx5LCB3aGF0ZXZlciBpdCBpc1xuICAgICAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgICB9XG4gICAgICBxdW90ZWQucHVzaCh0aGlzLmNoYXIoKSk7XG4gICAgICB1bnF1b3RlZC5wdXNoKHRoaXMuY2hhcigpKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgICBxdW90ZWQucHVzaCh0aGlzLmNvbnN1bWUoKSk7XG4gICAgcmV0dXJuIHsgcXVvdGVkOiBxdW90ZWQuam9pbihcIlwiKSwgdW5xdW90ZWQ6IHVucXVvdGVkLmpvaW4oXCJcIikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdW1lIHdoaXRlc3BhY2UgaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBwcml2YXRlIHdzKCkge1xuICAgIHdoaWxlICghdGhpcy5lb2YgJiYgW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiXS5pbmNsdWRlcyh0aGlzLmNoYXIoKSkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGVvZigpIHtcbiAgICByZXR1cm4gdGhpcy5pID49IHRoaXMuZXhwcmVzc2lvbi5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGNoYXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgIHRoaXMucmFpc2VFcnJvcihcInVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZ1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uW3RoaXMuaV07XG4gIH1cblxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgdGhpcy5pKys7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWUoKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5jaGFyKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcmFpc2VFcnJvcihtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgSlNPTlBhdGggZXhwcmVzc2lvbjogJHttZXNzYWdlfSBhdCBpbmRleCAke3RoaXMuaX0gaW4gJHtKU09OLnN0cmluZ2lmeSh0aGlzLmV4cHJlc3Npb24pfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FscGhhTnVtKHg6IHN0cmluZykge1xuICByZXR1cm4geC5tYXRjaCgvXlthLXpBLVowLTldJC8pO1xufVxuIl19
|