terraconstructs 0.0.10 → 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 +8 -6
- 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,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NetworkUtils contains helpers to work with network constructs (subnets/ranges)
|
|
3
|
+
*/
|
|
4
|
+
export declare class NetworkUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Validates an IPv4 address string.
|
|
7
|
+
*
|
|
8
|
+
* @param ipAddress The IPv4 address string to be validated.
|
|
9
|
+
* @returns True if the string is a valid IPv4 address, false otherwise.
|
|
10
|
+
* Validates an IPv4 string
|
|
11
|
+
*
|
|
12
|
+
* returns true of the string contains 4 numbers between 0-255 delimited by
|
|
13
|
+
* a `.` character
|
|
14
|
+
*/
|
|
15
|
+
static validIp(ipAddress: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Converts a string representation of an IPv4 address to its corresponding numerical value.
|
|
18
|
+
*
|
|
19
|
+
* Uses the formula:
|
|
20
|
+
* (first octet * 256³) + (second octet * 256²) + (third octet * 256) +
|
|
21
|
+
* (fourth octet)
|
|
22
|
+
*
|
|
23
|
+
* @param ipAddress the IP address (e.g. 174.66.173.168)
|
|
24
|
+
* @returns the integer value of the IP address (e.g 2923605416)
|
|
25
|
+
*/
|
|
26
|
+
static ipToNum(ipAddress: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Takes number and converts it to IPv4 address string
|
|
29
|
+
*
|
|
30
|
+
* Takes a number (e.g 2923605416) and converts it to an IPv4 address string
|
|
31
|
+
* currently only supports IPv4
|
|
32
|
+
*
|
|
33
|
+
* @param ipNum integer value of the IP address (e.g 2923605416)
|
|
34
|
+
* @returns IPv4 address (e.g. 174.66.173.168)
|
|
35
|
+
*/
|
|
36
|
+
static numToIp(ipNum: number): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Exported class from VPC to support subnet filtering
|
|
40
|
+
* and CIDR validation
|
|
41
|
+
*/
|
|
42
|
+
export declare class CidrBlock {
|
|
43
|
+
/**
|
|
44
|
+
* Calculates the netmask for a given CIDR mask
|
|
45
|
+
*
|
|
46
|
+
* The netmask is a 32-bit binary value used to separate the network portion from the host portion of an IPv4 address.
|
|
47
|
+
* It is calculated based on the CIDR prefix length (the number of bits used to represent the network portion).
|
|
48
|
+
*
|
|
49
|
+
* For example:
|
|
50
|
+
* CidrBlock.calculateNetmask(24) returns '255.255.255.0'
|
|
51
|
+
*
|
|
52
|
+
* @param mask The CIDR prefix length (between 0 and 32) for which to calculate the netmask.
|
|
53
|
+
// Calculate the netmask by performing a bitwise NOT on the result of (2^32 - 2^(32 - mask))
|
|
54
|
+
* @returns The netmask string in IPv4 address format.
|
|
55
|
+
*/
|
|
56
|
+
static calculateNetmask(mask: number): string;
|
|
57
|
+
/**
|
|
58
|
+
* Calculates the number IP addresses in a CIDR Mask
|
|
59
|
+
*
|
|
60
|
+
* For example:
|
|
61
|
+
* CidrBlock.calculateNetsize(16) returns 65536
|
|
62
|
+
*
|
|
63
|
+
* @param mask The CIDR prefix length (between 0 and 32) for which to calculate the network size.
|
|
64
|
+
* CidrBlock.calculateNetsize(24) returns 256
|
|
65
|
+
*/
|
|
66
|
+
static calculateNetsize(mask: number): number;
|
|
67
|
+
/**
|
|
68
|
+
* IP address in the CIDR block.
|
|
69
|
+
*/
|
|
70
|
+
readonly cidr: string;
|
|
71
|
+
readonly mask: number;
|
|
72
|
+
readonly networkSize: number;
|
|
73
|
+
private readonly networkAddress;
|
|
74
|
+
constructor(cidr: string);
|
|
75
|
+
constructor(ipAddress: number, mask: number);
|
|
76
|
+
maxIp(): string;
|
|
77
|
+
minIp(): string;
|
|
78
|
+
minAddress(): number;
|
|
79
|
+
maxAddress(): number;
|
|
80
|
+
nextBlock(): CidrBlock;
|
|
81
|
+
containsCidr(other: CidrBlock): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Checks if two IPv4 address ranges overlap.
|
|
84
|
+
*
|
|
85
|
+
* @param range1 The first IP address range represented as an array [start, end].
|
|
86
|
+
* @param range2 The second IP address range represented as an array [start, end].
|
|
87
|
+
* @returns True if the two IP address ranges overlap, false otherwise.
|
|
88
|
+
*
|
|
89
|
+
* Note: This method assumes that the start and end addresses are valid IPv4 addresses.
|
|
90
|
+
*/
|
|
91
|
+
rangesOverlap(range1: [string, string], range2: [string, string]): boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Class with helper functions to support
|
|
95
|
+
* Subnet Ipv6 Address Validation
|
|
96
|
+
*
|
|
97
|
+
* This class provides methods for working with IPv6 CIDR blocks, including calculating the minimum and maximum
|
|
98
|
+
* IP addresses in a CIDR block, and checking if two CIDR blocks overlap.
|
|
99
|
+
*/
|
|
100
|
+
export declare class CidrBlockIpv6 {
|
|
101
|
+
/**
|
|
102
|
+
* Ipv6 CIDR range
|
|
103
|
+
*/
|
|
104
|
+
cidr: string;
|
|
105
|
+
/**
|
|
106
|
+
* The CIDR prefix length (number of bits used for the network portion of the address).
|
|
107
|
+
*/
|
|
108
|
+
cidrPrefix: number;
|
|
109
|
+
private ipParts;
|
|
110
|
+
private networkBits;
|
|
111
|
+
private networkPart;
|
|
112
|
+
constructor(cidr: string);
|
|
113
|
+
private parseBigIntParts;
|
|
114
|
+
/**
|
|
115
|
+
* @returns Minimum IPv6 address for a provided CIDR
|
|
116
|
+
*/
|
|
117
|
+
minIp(): string;
|
|
118
|
+
/**
|
|
119
|
+
* @returns Maximum IPv6 address for a provided CIDR
|
|
120
|
+
*/
|
|
121
|
+
maxIp(): string;
|
|
122
|
+
private formatIPv6Part;
|
|
123
|
+
/**
|
|
124
|
+
*
|
|
125
|
+
* @param range1 Ipv6 CIDR range to compare
|
|
126
|
+
* @param range2 Ipv6 CIDR range to compare
|
|
127
|
+
* @returns true if two ranges overlap, false otherwise
|
|
128
|
+
*/
|
|
129
|
+
rangesOverlap(range1: string, range2: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
*
|
|
132
|
+
* @param cidr
|
|
133
|
+
* @returns Range in the from of big int number [start, end]
|
|
134
|
+
*/
|
|
135
|
+
private getIPv6Range;
|
|
136
|
+
/**
|
|
137
|
+
* @param ipv6Address
|
|
138
|
+
* @returns Converts given ipv6 address range to big int number
|
|
139
|
+
*/
|
|
140
|
+
private ipv6ToNumber;
|
|
141
|
+
}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/util.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CidrBlockIpv6 = exports.CidrBlock = exports.NetworkUtils = void 0;
|
|
5
|
+
/*eslint no-bitwise: ["error", { "allow": ["~", "|", "<<", "&"] }] */
|
|
6
|
+
// TODO: Fix duplicates from https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/util.ts
|
|
7
|
+
// classes overlap and seem identical: CidrBlock, NetworkUtils in ./util.ts
|
|
8
|
+
/**
|
|
9
|
+
* NetworkUtils contains helpers to work with network constructs (subnets/ranges)
|
|
10
|
+
*/
|
|
11
|
+
class NetworkUtils {
|
|
12
|
+
/**
|
|
13
|
+
* Validates an IPv4 address string.
|
|
14
|
+
*
|
|
15
|
+
* @param ipAddress The IPv4 address string to be validated.
|
|
16
|
+
* @returns True if the string is a valid IPv4 address, false otherwise.
|
|
17
|
+
* Validates an IPv4 string
|
|
18
|
+
*
|
|
19
|
+
* returns true of the string contains 4 numbers between 0-255 delimited by
|
|
20
|
+
* a `.` character
|
|
21
|
+
*/
|
|
22
|
+
static validIp(ipAddress) {
|
|
23
|
+
const octets = ipAddress.split(".");
|
|
24
|
+
if (octets.length !== 4) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return octets
|
|
28
|
+
.map((octet) => parseInt(octet, 10))
|
|
29
|
+
.every((octet) => octet >= 0 && octet <= 255);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Converts a string representation of an IPv4 address to its corresponding numerical value.
|
|
33
|
+
*
|
|
34
|
+
* Uses the formula:
|
|
35
|
+
* (first octet * 256³) + (second octet * 256²) + (third octet * 256) +
|
|
36
|
+
* (fourth octet)
|
|
37
|
+
*
|
|
38
|
+
* @param ipAddress the IP address (e.g. 174.66.173.168)
|
|
39
|
+
* @returns the integer value of the IP address (e.g 2923605416)
|
|
40
|
+
*/
|
|
41
|
+
static ipToNum(ipAddress) {
|
|
42
|
+
if (!this.validIp(ipAddress)) {
|
|
43
|
+
throw new Error(`${ipAddress} is not valid`);
|
|
44
|
+
}
|
|
45
|
+
return ipAddress
|
|
46
|
+
.split(".")
|
|
47
|
+
.reduce((p, c, i) => p + parseInt(c, 10) * 256 ** (3 - i), 0);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Takes number and converts it to IPv4 address string
|
|
51
|
+
*
|
|
52
|
+
* Takes a number (e.g 2923605416) and converts it to an IPv4 address string
|
|
53
|
+
* currently only supports IPv4
|
|
54
|
+
*
|
|
55
|
+
* @param ipNum integer value of the IP address (e.g 2923605416)
|
|
56
|
+
* @returns IPv4 address (e.g. 174.66.173.168)
|
|
57
|
+
*/
|
|
58
|
+
static numToIp(ipNum) {
|
|
59
|
+
// this all because bitwise math is signed
|
|
60
|
+
let remaining = ipNum;
|
|
61
|
+
const address = new Array();
|
|
62
|
+
for (let i = 0; i < 4; i++) {
|
|
63
|
+
if (remaining !== 0) {
|
|
64
|
+
address.push(Math.floor(remaining / 256 ** (3 - i)));
|
|
65
|
+
remaining = remaining % 256 ** (3 - i);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
address.push(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const ipAddress = address.join(".");
|
|
72
|
+
if (!this.validIp(ipAddress)) {
|
|
73
|
+
throw new Error(`${ipAddress} is not a valid IP Address`);
|
|
74
|
+
}
|
|
75
|
+
return ipAddress;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.NetworkUtils = NetworkUtils;
|
|
79
|
+
/**
|
|
80
|
+
* Exported class from VPC to support subnet filtering
|
|
81
|
+
* and CIDR validation
|
|
82
|
+
*/
|
|
83
|
+
class CidrBlock {
|
|
84
|
+
/**
|
|
85
|
+
* Calculates the netmask for a given CIDR mask
|
|
86
|
+
*
|
|
87
|
+
* The netmask is a 32-bit binary value used to separate the network portion from the host portion of an IPv4 address.
|
|
88
|
+
* It is calculated based on the CIDR prefix length (the number of bits used to represent the network portion).
|
|
89
|
+
*
|
|
90
|
+
* For example:
|
|
91
|
+
* CidrBlock.calculateNetmask(24) returns '255.255.255.0'
|
|
92
|
+
*
|
|
93
|
+
* @param mask The CIDR prefix length (between 0 and 32) for which to calculate the netmask.
|
|
94
|
+
// Calculate the netmask by performing a bitwise NOT on the result of (2^32 - 2^(32 - mask))
|
|
95
|
+
* @returns The netmask string in IPv4 address format.
|
|
96
|
+
*/
|
|
97
|
+
static calculateNetmask(mask) {
|
|
98
|
+
return NetworkUtils.numToIp(2 ** 32 - 2 ** (32 - mask));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Calculates the number IP addresses in a CIDR Mask
|
|
102
|
+
*
|
|
103
|
+
* For example:
|
|
104
|
+
* CidrBlock.calculateNetsize(16) returns 65536
|
|
105
|
+
*
|
|
106
|
+
* @param mask The CIDR prefix length (between 0 and 32) for which to calculate the network size.
|
|
107
|
+
* CidrBlock.calculateNetsize(24) returns 256
|
|
108
|
+
*/
|
|
109
|
+
static calculateNetsize(mask) {
|
|
110
|
+
return 2 ** (32 - mask);
|
|
111
|
+
}
|
|
112
|
+
constructor(ipAddressOrCidr, mask) {
|
|
113
|
+
if (typeof ipAddressOrCidr === "string") {
|
|
114
|
+
this.mask = parseInt(ipAddressOrCidr.split("/")[1], 10);
|
|
115
|
+
this.networkAddress =
|
|
116
|
+
NetworkUtils.ipToNum(ipAddressOrCidr.split("/")[0]) +
|
|
117
|
+
CidrBlock.calculateNetsize(this.mask) -
|
|
118
|
+
1;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
if (typeof mask === "number") {
|
|
122
|
+
this.mask = mask;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// this should be impossible
|
|
126
|
+
this.mask = 16;
|
|
127
|
+
}
|
|
128
|
+
this.networkAddress =
|
|
129
|
+
ipAddressOrCidr + CidrBlock.calculateNetsize(this.mask) - 1;
|
|
130
|
+
this.networkSize = 2 ** (32 - this.mask);
|
|
131
|
+
}
|
|
132
|
+
this.networkSize = 2 ** (32 - this.mask);
|
|
133
|
+
this.cidr = `${this.minIp()}/${this.mask}`;
|
|
134
|
+
}
|
|
135
|
+
/*
|
|
136
|
+
* The maximum IP in the CIDR Block e.g. '10.0.8.255'
|
|
137
|
+
*/
|
|
138
|
+
maxIp() {
|
|
139
|
+
// min + (2^(32-mask)) - 1 [zero needs to count]
|
|
140
|
+
return NetworkUtils.numToIp(this.maxAddress());
|
|
141
|
+
}
|
|
142
|
+
/*
|
|
143
|
+
* Checks if this CIDR block fully contains the provided CIDR block.
|
|
144
|
+
*
|
|
145
|
+
* @param other The CIDR block to check for containment.
|
|
146
|
+
* @returns True if this CIDR block fully contains the provided CIDR block, false otherwise.
|
|
147
|
+
*
|
|
148
|
+
* The minimum IP in the CIDR Block e.g. '10.0.0.0'
|
|
149
|
+
*/
|
|
150
|
+
minIp() {
|
|
151
|
+
return NetworkUtils.numToIp(this.minAddress());
|
|
152
|
+
}
|
|
153
|
+
/*
|
|
154
|
+
* Returns the number representation for the minimum IPv4 address
|
|
155
|
+
*/
|
|
156
|
+
minAddress() {
|
|
157
|
+
const div = this.networkAddress % this.networkSize;
|
|
158
|
+
return this.networkAddress - div;
|
|
159
|
+
}
|
|
160
|
+
/*
|
|
161
|
+
* Returns the number representation for the maximum IPv4 address
|
|
162
|
+
*/
|
|
163
|
+
maxAddress() {
|
|
164
|
+
/**
|
|
165
|
+
* The maximum IP address in the CIDR block is calculated as the minimum address + (2^(32-mask)) - 1.
|
|
166
|
+
* This is because the minimum address represents the network address, and the maximum address is the broadcast address.
|
|
167
|
+
*/
|
|
168
|
+
// min + (2^(32-mask)) - 1 [zero needs to count]
|
|
169
|
+
return this.minAddress() + this.networkSize - 1;
|
|
170
|
+
}
|
|
171
|
+
/*
|
|
172
|
+
* Returns the next consecutive CIDR block of the same mask size following this CIDR block.
|
|
173
|
+
*
|
|
174
|
+
* For example, if this CIDR block is '10.0.0.0/24', the next block would be '10.0.1.0/24'.
|
|
175
|
+
*
|
|
176
|
+
* Returns the next CIDR Block of the same mask size
|
|
177
|
+
*/
|
|
178
|
+
nextBlock() {
|
|
179
|
+
return new CidrBlock(this.maxAddress() + 1, this.mask);
|
|
180
|
+
}
|
|
181
|
+
/*
|
|
182
|
+
* Returns true if this CidrBlock fully contains the provided CidrBlock
|
|
183
|
+
*/
|
|
184
|
+
containsCidr(other) {
|
|
185
|
+
return (this.maxAddress() >= other.maxAddress() &&
|
|
186
|
+
this.minAddress() <= other.minAddress());
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Checks if two IPv4 address ranges overlap.
|
|
190
|
+
*
|
|
191
|
+
* @param range1 The first IP address range represented as an array [start, end].
|
|
192
|
+
* @param range2 The second IP address range represented as an array [start, end].
|
|
193
|
+
* @returns True if the two IP address ranges overlap, false otherwise.
|
|
194
|
+
*
|
|
195
|
+
* Note: This method assumes that the start and end addresses are valid IPv4 addresses.
|
|
196
|
+
*/
|
|
197
|
+
rangesOverlap(range1, range2) {
|
|
198
|
+
const [start1, end1] = range1.map((ip) => NetworkUtils.ipToNum(ip));
|
|
199
|
+
const [start2, end2] = range2.map((ip) => NetworkUtils.ipToNum(ip));
|
|
200
|
+
// Check if ranges overlap
|
|
201
|
+
return start1 <= end2 && start2 <= end1;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.CidrBlock = CidrBlock;
|
|
205
|
+
/**
|
|
206
|
+
* Class with helper functions to support
|
|
207
|
+
* Subnet Ipv6 Address Validation
|
|
208
|
+
*
|
|
209
|
+
* This class provides methods for working with IPv6 CIDR blocks, including calculating the minimum and maximum
|
|
210
|
+
* IP addresses in a CIDR block, and checking if two CIDR blocks overlap.
|
|
211
|
+
*/
|
|
212
|
+
class CidrBlockIpv6 {
|
|
213
|
+
constructor(cidr) {
|
|
214
|
+
this.formatIPv6Part = (part) => part.toString(16).padStart(4, "0");
|
|
215
|
+
this.cidr = cidr;
|
|
216
|
+
const [ipAddress, prefix] = cidr.split("/");
|
|
217
|
+
this.cidrPrefix = parseInt(prefix, 10);
|
|
218
|
+
this.ipParts = this.parseBigIntParts(ipAddress);
|
|
219
|
+
this.networkBits = this.cidrPrefix;
|
|
220
|
+
this.networkPart = this.ipParts.slice(0, Math.ceil(this.networkBits / 16));
|
|
221
|
+
}
|
|
222
|
+
parseBigIntParts(ipAddress) {
|
|
223
|
+
return ipAddress
|
|
224
|
+
.split(":")
|
|
225
|
+
.map((part) => BigInt(`0x${part.padStart(4, "0")}` || "0"));
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* @returns Minimum IPv6 address for a provided CIDR
|
|
229
|
+
*/
|
|
230
|
+
minIp() {
|
|
231
|
+
const startIP = [...this.networkPart];
|
|
232
|
+
for (let i = this.networkPart.length; i < 8; i++) {
|
|
233
|
+
startIP.push(BigInt(0));
|
|
234
|
+
}
|
|
235
|
+
return startIP.map(this.formatIPv6Part).join(":");
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* @returns Maximum IPv6 address for a provided CIDR
|
|
239
|
+
*/
|
|
240
|
+
maxIp() {
|
|
241
|
+
const endIP = [...this.networkPart];
|
|
242
|
+
const hostPart = Array(8 - this.networkPart.length).fill(BigInt(0xffff));
|
|
243
|
+
endIP.push(...hostPart);
|
|
244
|
+
return endIP.map(this.formatIPv6Part).join(":");
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
*
|
|
248
|
+
* @param range1 Ipv6 CIDR range to compare
|
|
249
|
+
* @param range2 Ipv6 CIDR range to compare
|
|
250
|
+
* @returns true if two ranges overlap, false otherwise
|
|
251
|
+
*/
|
|
252
|
+
rangesOverlap(range1, range2) {
|
|
253
|
+
const [start1, end1] = this.getIPv6Range(range1);
|
|
254
|
+
const [start2, end2] = this.getIPv6Range(range2);
|
|
255
|
+
return start1 <= end2 && start2 <= end1;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
*
|
|
259
|
+
* @param cidr
|
|
260
|
+
* @returns Range in the from of big int number [start, end]
|
|
261
|
+
*/
|
|
262
|
+
getIPv6Range(cidr) {
|
|
263
|
+
const [ipv6Address, prefixLength] = cidr.split("/");
|
|
264
|
+
const ipv6Number = this.ipv6ToNumber(ipv6Address);
|
|
265
|
+
const mask = (BigInt(1) << BigInt(128 - Number(prefixLength))) - BigInt(1);
|
|
266
|
+
const networkPrefix = ipv6Number & ~mask;
|
|
267
|
+
const start = networkPrefix;
|
|
268
|
+
const end = networkPrefix | mask;
|
|
269
|
+
return [start, end];
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* @param ipv6Address
|
|
273
|
+
* @returns Converts given ipv6 address range to big int number
|
|
274
|
+
*/
|
|
275
|
+
ipv6ToNumber(ipv6Address) {
|
|
276
|
+
const blocks = this.parseBigIntParts(ipv6Address);
|
|
277
|
+
let ipv6Number = BigInt(0);
|
|
278
|
+
for (const block of blocks) {
|
|
279
|
+
/* tslint:disable:no-bitwise */
|
|
280
|
+
ipv6Number = (ipv6Number << BigInt(16)) + block;
|
|
281
|
+
}
|
|
282
|
+
return ipv6Number;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.CidrBlockIpv6 = CidrBlockIpv6;
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLXV0aWwtdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZWMyLXV0aWwtdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDJGQUEyRjs7O0FBRTNGLHFFQUFxRTtBQUVyRSxxSEFBcUg7QUFDckgsMkVBQTJFO0FBRTNFOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBQ3ZCOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBaUI7UUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxNQUFNO2FBQ1YsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLEtBQUssQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBaUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxTQUFTO2FBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FDTCxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FDbEMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJ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LEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQiwrQkFBK0I7WUFDL0IsVUFBVSxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBOUZELHNDQThGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL0Bhd3MtY2RrL2F3cy1lYzItYWxwaGEvbGliL3V0aWwudHNcblxuLyplc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcIn5cIiwgXCJ8XCIsIFwiPDxcIiwgXCImXCJdIH1dICovXG5cbi8vIFRPRE86IEZpeCBkdXBsaWNhdGVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvdXRpbC50c1xuLy8gY2xhc3NlcyBvdmVybGFwIGFuZCBzZWVtIGlkZW50aWNhbDogQ2lkckJsb2NrLCBOZXR3b3JrVXRpbHMgaW4gLi91dGlsLnRzXG5cbi8qKlxuICogTmV0d29ya1V0aWxzIGNvbnRhaW5zIGhlbHBlcnMgdG8gd29yayB3aXRoIG5ldHdvcmsgY29uc3RydWN0cyAoc3VibmV0cy9yYW5nZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpcEFkZHJlc3MgVGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogVmFsaWRhdGVzIGFuIElQdjQgc3RyaW5nXG4gICAqXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc3RyaW5nIGNvbnRhaW5zIDQgbnVtYmVycyBiZXR3ZWVuIDAtMjU1IGRlbGltaXRlZCBieVxuICAgKiBhIGAuYCBjaGFyYWN0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRJcChpcEFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdChcIi5cIik7XG4gICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9jdGV0c1xuICAgICAgLm1hcCgob2N0ZXQ6IHN0cmluZykgPT4gcGFyc2VJbnQob2N0ZXQsIDEwKSlcbiAgICAgIC5ldmVyeSgob2N0ZXQ6IG51bWJlcikgPT4gb2N0ZXQgPj0gMCAmJiBvY3RldCA8PSAyNTUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIElQdjQgYWRkcmVzcyB0byBpdHMgY29ycmVzcG9uZGluZyBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFVzZXMgdGhlIGZvcm11bGE6XG4gICAqIChmaXJzdCBvY3RldCAqIDI1NsKzKSArIChzZWNvbmQgb2N0ZXQgKiAyNTbCsikgKyAodGhpcmQgb2N0ZXQgKiAyNTYpICtcbiAgICogKGZvdXJ0aCBvY3RldClcbiAgICpcbiAgICogQHBhcmFtICBpcEFkZHJlc3MgdGhlIElQIGFkZHJlc3MgKGUuZy4gMTc0LjY2LjE3My4xNjgpXG4gICAqIEByZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBJUCBhZGRyZXNzIChlLmcgMjkyMzYwNTQxNilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXBUb051bShpcEFkZHJlc3M6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnZhbGlkSXAoaXBBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2lwQWRkcmVzc30gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwQWRkcmVzc1xuICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHA6IG51bWJlciwgYzogc3RyaW5nLCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgcCArIHBhcnNlSW50KGMsIDEwKSAqIDI1NiAqKiAoMyAtIGkpLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBudW1iZXIgYW5kIGNvbnZlcnRzIGl0IHRvIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICpcbiAgICogVGFrZXMgYSBudW1iZXIgKGUuZyAyOTIzNjA1NDE2KSBhbmQgY29udmVydHMgaXQgdG8gYW4gSVB2NCBhZGRyZXNzIHN0cmluZ1xuICAgKiBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBJUHY0XG4gICAqXG4gICAqIEBwYXJhbSBpcE51bSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBJUCBhZGRyZXNzIChlLmcgMjkyMzYwNTQxNilcbiAgICogQHJldHVybnMgSVB2NCBhZGRyZXNzIChlLmcuIDE3NC42Ni4xNzMuMTY4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBudW1Ub0lwKGlwTnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIHRoaXMgYWxsIGJlY2F1c2UgYml0d2lzZSBtYXRoIGlzIHNpZ25lZFxuICAgIGxldCByZW1haW5pbmcgPSBpcE51bTtcbiAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgaWYgKHJlbWFpbmluZyAhPT0gMCkge1xuICAgICAgICBhZGRyZXNzLnB1c2goTWF0aC5mbG9vcihyZW1haW5pbmcgLyAyNTYgKiogKDMgLSBpKSkpO1xuICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgJSAyNTYgKiogKDMgLSBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZHJlc3MucHVzaCgwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaXBBZGRyZXNzOiBzdHJpbmcgPSBhZGRyZXNzLmpvaW4oXCIuXCIpO1xuICAgIGlmICghdGhpcy52YWxpZElwKGlwQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtpcEFkZHJlc3N9IGlzIG5vdCBhIHZhbGlkIElQIEFkZHJlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGlwQWRkcmVzcztcbiAgfVxufVxuXG4vKipcbiAqIEV4cG9ydGVkIGNsYXNzIGZyb20gVlBDIHRvIHN1cHBvcnQgc3VibmV0IGZpbHRlcmluZ1xuICogYW5kIENJRFIgdmFsaWRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2lkckJsb2NrIHtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG5ldG1hc2sgZm9yIGEgZ2l2ZW4gQ0lEUiBtYXNrXG4gICAqXG4gICAqIFRoZSBuZXRtYXNrIGlzIGEgMzItYml0IGJpbmFyeSB2YWx1ZSB1c2VkIHRvIHNlcGFyYXRlIHRoZSBuZXR3b3JrIHBvcnRpb24gZnJvbSB0aGUgaG9zdCBwb3J0aW9uIG9mIGFuIElQdjQgYWRkcmVzcy5cbiAgICogSXQgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgQ0lEUiBwcmVmaXggbGVuZ3RoICh0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIG5ldHdvcmsgcG9ydGlvbikuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0bWFzaygyNCkgcmV0dXJucyAnMjU1LjI1NS4yNTUuMCdcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0bWFzay5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldG1hc2sgYnkgcGVyZm9ybWluZyBhIGJpdHdpc2UgTk9UIG9uIHRoZSByZXN1bHQgb2YgKDJeMzIgLSAyXigzMiAtIG1hc2spKVxuICAgKiBAcmV0dXJucyBUaGUgbmV0bWFzayBzdHJpbmcgaW4gSVB2NCBhZGRyZXNzIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0bWFzayhtYXNrOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCgyICoqIDMyIC0gMiAqKiAoMzIgLSBtYXNrKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIElQIGFkZHJlc3NlcyBpbiBhIENJRFIgTWFza1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUoMTYpIHJldHVybnMgNjU1MzZcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0d29yayBzaXplLlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSgyNCkgcmV0dXJucyAyNTZcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0c2l6ZShtYXNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAyICoqICgzMiAtIG1hc2spO1xuICB9XG5cbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2suXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gIC8qXG4gICAqIFRoZSBDSURSIG1hc2sgZS5nLiBmb3IgQ0lEUiAnMTAuMC4wLjAvMjEnIHJldHVybnMgMjFcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXNrOiBudW1iZXI7XG5cbiAgLypcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhlIENJRFJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrU2l6ZTogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSBuZXR3b3JrIGFkZHJlc3MgcHJvdmlkZWQgaW4gQ0lEUiBjcmVhdGlvbiBvZmZzZXQgYnkgdGhlIE5ldHNpemUgLTFcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0FkZHJlc3M6IG51bWJlcjtcblxuICAvKlxuICAgKiBQYXJzZXMgZWl0aGVyIENJRFIgbm90YXRpb24gU3RyaW5nIG9yIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgSVBcbiAgICogc3BhY2VcbiAgICpcbiAgICogY2lkciBleHBlY3RzIGEgc3RyaW5nICcxMC4wLjAuMC8xNidcbiAgICogaXBBZGRyZXNzIGV4cGVjdHMgYSBudW1iZXJcbiAgICogbWFzayBleHBlY3RzIGEgbnVtYmVyXG4gICAqXG4gICAqIElmIHRoZSBnaXZlbiBgY2lkcmAgb3IgYGlwQWRkcmVzc2AgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLFxuICAgKiB0aGVuIHRoZSBuZXh0IGF2YWlsYWJsZSBibG9jayB3aWxsIGJlIHJldHVybmVkLiBGb3IgZXhhbXBsZSwgaWZcbiAgICogYDEwLjAuMy4xLzI4YCBpcyBnaXZlbiB0aGUgcmV0dXJuZWQgYmxvY2sgd2lsbCByZXByZXNlbnQgYDEwLjAuMy4xNi8yOGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpO1xuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3M6IG51bWJlciwgbWFzazogbnVtYmVyKTtcbiAgY29uc3RydWN0b3IoaXBBZGRyZXNzT3JDaWRyOiBzdHJpbmcgfCBudW1iZXIsIG1hc2s/OiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGlwQWRkcmVzc09yQ2lkciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5tYXNrID0gcGFyc2VJbnQoaXBBZGRyZXNzT3JDaWRyLnNwbGl0KFwiL1wiKVsxXSwgMTApO1xuICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9XG4gICAgICAgIE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwQWRkcmVzc09yQ2lkci5zcGxpdChcIi9cIilbMF0pICtcbiAgICAgICAgQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUodGhpcy5tYXNrKSAtXG4gICAgICAgIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgbWFzayA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICB0aGlzLm1hc2sgPSAxNjtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPVxuICAgICAgICBpcEFkZHJlc3NPckNpZHIgKyBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgfVxuICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgdGhpcy5jaWRyID0gYCR7dGhpcy5taW5JcCgpfS8ke3RoaXMubWFza31gO1xuICB9XG5cbiAgLypcbiAgICogVGhlIG1heGltdW0gSVAgaW4gdGhlIENJRFIgQmxvY2sgZS5nLiAnMTAuMC44LjI1NSdcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1heEFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBDaGVja3MgaWYgdGhpcyBDSURSIGJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDSURSIGJsb2NrLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGhlIENJRFIgYmxvY2sgdG8gY2hlY2sgZm9yIGNvbnRhaW5tZW50LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgQ0lEUiBibG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9jaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgbWluaW11bSBJUCBpbiB0aGUgQ0lEUiBCbG9jayBlLmcuICcxMC4wLjAuMCdcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1pbkFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtaW5pbXVtIElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIG1pbkFkZHJlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLm5ldHdvcmtBZGRyZXNzICUgdGhpcy5uZXR3b3JrU2l6ZTtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrQWRkcmVzcyAtIGRpdjtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1heGltdW0gSVB2NCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgbWF4QWRkcmVzcygpOiBudW1iZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2sgaXMgY2FsY3VsYXRlZCBhcyB0aGUgbWluaW11bSBhZGRyZXNzICsgKDJeKDMyLW1hc2spKSAtIDEuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIHRoZSBtaW5pbXVtIGFkZHJlc3MgcmVwcmVzZW50cyB0aGUgbmV0d29yayBhZGRyZXNzLCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuXG4gICAgICovXG4gICAgLy8gbWluICsgKDJeKDMyLW1hc2spKSAtIDEgW3plcm8gbmVlZHMgdG8gY291bnRdXG4gICAgcmV0dXJuIHRoaXMubWluQWRkcmVzcygpICsgdGhpcy5uZXR3b3JrU2l6ZSAtIDE7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbnNlY3V0aXZlIENJRFIgYmxvY2sgb2YgdGhlIHNhbWUgbWFzayBzaXplIGZvbGxvd2luZyB0aGlzIENJRFIgYmxvY2suXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIENJRFIgYmxvY2sgaXMgJzEwLjAuMC4wLzI0JywgdGhlIG5leHQgYmxvY2sgd291bGQgYmUgJzEwLjAuMS4wLzI0Jy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmV4dCBDSURSIEJsb2NrIG9mIHRoZSBzYW1lIG1hc2sgc2l6ZVxuICAgKi9cbiAgcHVibGljIG5leHRCbG9jaygpOiBDaWRyQmxvY2sge1xuICAgIHJldHVybiBuZXcgQ2lkckJsb2NrKHRoaXMubWF4QWRkcmVzcygpICsgMSwgdGhpcy5tYXNrKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENpZHJCbG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ2lkckJsb2NrXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnNDaWRyKG90aGVyOiBDaWRyQmxvY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tYXhBZGRyZXNzKCkgPj0gb3RoZXIubWF4QWRkcmVzcygpICYmXG4gICAgICB0aGlzLm1pbkFkZHJlc3MoKSA8PSBvdGhlci5taW5BZGRyZXNzKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0d28gSVB2NCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIFRoZSBmaXJzdCBJUCBhZGRyZXNzIHJhbmdlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IFtzdGFydCwgZW5kXS5cbiAgICogQHBhcmFtIHJhbmdlMiBUaGUgc2Vjb25kIElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0d28gSVAgYWRkcmVzcyByYW5nZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB2YWxpZCBJUHY0IGFkZHJlc3Nlcy5cbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKFxuICAgIHJhbmdlMTogW3N0cmluZywgc3RyaW5nXSxcbiAgICByYW5nZTI6IFtzdHJpbmcsIHN0cmluZ10sXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtzdGFydDEsIGVuZDFdID0gcmFuZ2UxLm1hcCgoaXApID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgY29uc3QgW3N0YXJ0MiwgZW5kMl0gPSByYW5nZTIubWFwKChpcCkgPT4gTmV0d29ya1V0aWxzLmlwVG9OdW0oaXApKTtcbiAgICAvLyBDaGVjayBpZiByYW5nZXMgb3ZlcmxhcFxuICAgIHJldHVybiBzdGFydDEgPD0gZW5kMiAmJiBzdGFydDIgPD0gZW5kMTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIHdpdGggaGVscGVyIGZ1bmN0aW9ucyB0byBzdXBwb3J0XG4gKiBTdWJuZXQgSXB2NiBBZGRyZXNzIFZhbGlkYXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBJUHY2IENJRFIgYmxvY2tzLCBpbmNsdWRpbmcgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW1cbiAqIElQIGFkZHJlc3NlcyBpbiBhIENJRFIgYmxvY2ssIGFuZCBjaGVja2luZyBpZiB0d28gQ0lEUiBibG9ja3Mgb3ZlcmxhcC5cbiAqL1xuZXhwb3J0IGNsYXNzIENpZHJCbG9ja0lwdjYge1xuICAvKipcbiAgICogSXB2NiBDSURSIHJhbmdlXG4gICAqL1xuICBwdWJsaWMgY2lkcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIENJRFIgcHJlZml4IGxlbmd0aCAobnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgdGhlIG5ldHdvcmsgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcykuXG4gICAqL1xuICBwdWJsaWMgY2lkclByZWZpeDogbnVtYmVyO1xuICBwcml2YXRlIGlwUGFydHM6IGJpZ2ludFtdO1xuICBwcml2YXRlIG5ldHdvcmtCaXRzOiBudW1iZXI7XG4gIHByaXZhdGUgbmV0d29ya1BhcnQ6IGJpZ2ludFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNpZHI6IHN0cmluZykge1xuICAgIHRoaXMuY2lkciA9IGNpZHI7XG4gICAgY29uc3QgW2lwQWRkcmVzcywgcHJlZml4XSA9IGNpZHIuc3BsaXQoXCIvXCIpO1xuICAgIHRoaXMuY2lkclByZWZpeCA9IHBhcnNlSW50KHByZWZpeCwgMTApO1xuICAgIHRoaXMuaXBQYXJ0cyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcEFkZHJlc3MpO1xuICAgIHRoaXMubmV0d29ya0JpdHMgPSB0aGlzLmNpZHJQcmVmaXg7XG4gICAgdGhpcy5uZXR3b3JrUGFydCA9IHRoaXMuaXBQYXJ0cy5zbGljZSgwLCBNYXRoLmNlaWwodGhpcy5uZXR3b3JrQml0cyAvIDE2KSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlnSW50UGFydHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnRbXSB7XG4gICAgcmV0dXJuIGlwQWRkcmVzc1xuICAgICAgLnNwbGl0KFwiOlwiKVxuICAgICAgLm1hcCgocGFydCkgPT4gQmlnSW50KGAweCR7cGFydC5wYWRTdGFydCg0LCBcIjBcIil9YCB8fCBcIjBcIikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIE1pbmltdW0gSVB2NiBhZGRyZXNzIGZvciBhIHByb3ZpZGVkIENJRFJcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXJ0SVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubmV0d29ya1BhcnQubGVuZ3RoOyBpIDwgODsgaSsrKSB7XG4gICAgICBzdGFydElQLnB1c2goQmlnSW50KDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0SVAubWFwKHRoaXMuZm9ybWF0SVB2NlBhcnQpLmpvaW4oXCI6XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIE1heGltdW0gSVB2NiBhZGRyZXNzIGZvciBhIHByb3ZpZGVkIENJRFJcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuZElQID0gWy4uLnRoaXMubmV0d29ya1BhcnRdO1xuICAgIGNvbnN0IGhvc3RQYXJ0ID0gQXJyYXkoOCAtIHRoaXMubmV0d29ya1BhcnQubGVuZ3RoKS5maWxsKEJpZ0ludCgweGZmZmYpKTtcbiAgICBlbmRJUC5wdXNoKC4uLmhvc3RQYXJ0KTtcblxuICAgIHJldHVybiBlbmRJUC5tYXAodGhpcy5mb3JtYXRJUHY2UGFydCkuam9pbihcIjpcIik7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdElQdjZQYXJ0ID0gKHBhcnQ6IGJpZ2ludCkgPT4gcGFydC50b1N0cmluZygxNikucGFkU3RhcnQoNCwgXCIwXCIpO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSByYW5nZTIgSXB2NiBDSURSIHJhbmdlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0d28gcmFuZ2VzIG92ZXJsYXAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIHJhbmdlc092ZXJsYXAocmFuZ2UxOiBzdHJpbmcsIHJhbmdlMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSB0aGlzLmdldElQdjZSYW5nZShyYW5nZTEpO1xuICAgIGNvbnN0IFtzdGFydDIsIGVuZDJdID0gdGhpcy5nZXRJUHY2UmFuZ2UocmFuZ2UyKTtcblxuICAgIHJldHVybiBzdGFydDEgPD0gZW5kMiAmJiBzdGFydDIgPD0gZW5kMTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY2lkclxuICAgKiBAcmV0dXJucyBSYW5nZSBpbiB0aGUgZnJvbSBvZiBiaWcgaW50IG51bWJlciBbc3RhcnQsIGVuZF1cbiAgICovXG4gIHByaXZhdGUgZ2V0SVB2NlJhbmdlKGNpZHI6IHN0cmluZyk6IFtiaWdpbnQsIGJpZ2ludF0ge1xuICAgIGNvbnN0IFtpcHY2QWRkcmVzcywgcHJlZml4TGVuZ3RoXSA9IGNpZHIuc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGlwdjZOdW1iZXIgPSB0aGlzLmlwdjZUb051bWJlcihpcHY2QWRkcmVzcyk7XG4gICAgY29uc3QgbWFzayA9IChCaWdJbnQoMSkgPDwgQmlnSW50KDEyOCAtIE51bWJlcihwcmVmaXhMZW5ndGgpKSkgLSBCaWdJbnQoMSk7XG4gICAgY29uc3QgbmV0d29ya1ByZWZpeCA9IGlwdjZOdW1iZXIgJiB+bWFzaztcbiAgICBjb25zdCBzdGFydCA9IG5ldHdvcmtQcmVmaXg7XG4gICAgY29uc3QgZW5kID0gbmV0d29ya1ByZWZpeCB8IG1hc2s7XG5cbiAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpcHY2QWRkcmVzc1xuICAgKiBAcmV0dXJucyBDb252ZXJ0cyBnaXZlbiBpcHY2IGFkZHJlc3MgcmFuZ2UgdG8gYmlnIGludCBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnQge1xuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcHY2QWRkcmVzcyk7XG4gICAgbGV0IGlwdjZOdW1iZXIgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbiAgICAgIGlwdjZOdW1iZXIgPSAoaXB2Nk51bWJlciA8PCBCaWdJbnQoMTYpKSArIGJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gaXB2Nk51bWJlcjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { ISubnet, SubnetType } from "./vpc";
|
|
3
|
+
/**
|
|
4
|
+
* Turn an arbitrary string into one that can be used as a CloudFormation identifier by stripping special characters
|
|
5
|
+
*
|
|
6
|
+
* (At the moment, no efforts are taken to prevent collisions, but we can add that later when it becomes necessary).
|
|
7
|
+
*/
|
|
8
|
+
export declare function slugify(x: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* The default names for every subnet type
|
|
11
|
+
*/
|
|
12
|
+
export declare function defaultSubnetName(type: SubnetType): "Public" | "Private" | "Isolated";
|
|
13
|
+
/**
|
|
14
|
+
* Return a subnet name from its construct ID
|
|
15
|
+
*
|
|
16
|
+
* All subnet names look like NAME <> "Subnet" <> INDEX
|
|
17
|
+
*/
|
|
18
|
+
export declare function subnetGroupNameFromConstructId(subnet: ISubnet): string;
|
|
19
|
+
/**
|
|
20
|
+
* Make the subnet construct ID from a name and number
|
|
21
|
+
*/
|
|
22
|
+
export declare function subnetId(name: string, i: number): string;
|
|
23
|
+
export declare class ImportSubnetGroup {
|
|
24
|
+
private readonly availabilityZones;
|
|
25
|
+
private readonly subnetIds;
|
|
26
|
+
private readonly names;
|
|
27
|
+
private readonly routeTableIds;
|
|
28
|
+
private readonly ipv4CidrBlocks;
|
|
29
|
+
private readonly groups;
|
|
30
|
+
constructor(subnetIds: string[] | undefined, names: string[] | undefined, routeTableIds: string[] | undefined, ipv4CidrBlocks: string[] | undefined, type: SubnetType, availabilityZones: string[], idField: string, nameField: string, routeTableIdField: string, ipv4CidrBlockField: string);
|
|
31
|
+
import(scope: Construct): ISubnet[];
|
|
32
|
+
/**
|
|
33
|
+
* Return a list with a name for every subnet
|
|
34
|
+
*/
|
|
35
|
+
private normalizeNames;
|
|
36
|
+
/**
|
|
37
|
+
* Return the i'th AZ
|
|
38
|
+
*/
|
|
39
|
+
private pickAZ;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Generate the list of numbers of [0..n)
|
|
43
|
+
*/
|
|
44
|
+
export declare function range(n: number): number[];
|
|
45
|
+
/**
|
|
46
|
+
* Return the union of table IDs from all selected subnets
|
|
47
|
+
*/
|
|
48
|
+
export declare function allRouteTableIds(subnets: ISubnet[]): string[];
|
|
49
|
+
/**
|
|
50
|
+
* Flatten a list of lists into a list of elements
|
|
51
|
+
*/
|
|
52
|
+
export declare function flatten<A>(xs: A[][]): A[];
|