terraconstructs 0.0.25 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +83939 -55116
- package/.mise.toml +2 -2
- package/.nvmrc +1 -1
- package/LICENSE +202 -674
- package/go.mod +1 -1
- package/go.sum +2 -2
- package/lib/asset-manager.d.ts +23 -0
- package/lib/asset-manager.js +3 -0
- package/lib/asset-staging.d.ts +178 -0
- package/lib/asset-staging.js +589 -0
- package/lib/assets.d.ts +359 -0
- package/lib/assets.js +55 -0
- package/lib/aws/arn.js +16 -15
- package/lib/aws/aws-asset-manager.d.ts +91 -0
- package/lib/aws/aws-asset-manager.js +244 -0
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +37 -0
- package/lib/aws/aws-stack.js +30 -9
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
- package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
- package/lib/aws/cloudwatch/actions/index.js +4 -4
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
- package/lib/aws/cloudwatch/actions/sns.js +23 -0
- package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
- package/lib/aws/cloudwatch/actions/ssm.js +104 -0
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.d.ts +478 -0
- package/lib/aws/compute/access-log.js +649 -0
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/api-definition.d.ts +106 -0
- package/lib/aws/compute/api-definition.js +200 -0
- package/lib/aws/compute/api-key.d.ts +184 -0
- package/lib/aws/compute/api-key.js +197 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
- package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
- package/lib/aws/compute/apigateway-util.d.ts +31 -0
- package/lib/aws/compute/apigateway-util.js +152 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/authorizer.d.ts +35 -0
- package/lib/aws/compute/authorizer.js +28 -0
- package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
- package/lib/aws/compute/authorizers/identity-source.js +61 -0
- package/lib/aws/compute/authorizers/index.d.ts +2 -0
- package/lib/aws/compute/authorizers/index.js +20 -0
- package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
- package/lib/aws/compute/authorizers/lambda.js +208 -0
- package/lib/aws/compute/base-path-mapping.d.ts +49 -0
- package/lib/aws/compute/base-path-mapping.js +52 -0
- package/lib/aws/compute/base-scalable-attribute.js +3 -3
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/code.d.ts +415 -0
- package/lib/aws/compute/code.js +424 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.d.ts +102 -0
- package/lib/aws/compute/cors.js +33 -0
- package/lib/aws/compute/deployment.d.ts +83 -0
- package/lib/aws/compute/deployment.js +158 -0
- package/lib/aws/compute/domain-name.d.ts +153 -0
- package/lib/aws/compute/domain-name.js +158 -0
- package/lib/aws/compute/event-invoke-config.d.ts +2 -2
- package/lib/aws/compute/event-invoke-config.js +4 -4
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.d.ts +2 -2
- package/lib/aws/compute/event-source-mapping.js +9 -7
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +3 -2
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.d.ts +2 -0
- package/lib/aws/compute/function-alias.js +14 -2
- package/lib/aws/compute/function-base.d.ts +23 -0
- package/lib/aws/compute/function-base.js +4 -4
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
- package/lib/aws/compute/function-nodejs/bundling.js +405 -0
- package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
- package/lib/aws/compute/function-nodejs/function.js +175 -0
- package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
- package/lib/aws/compute/function-nodejs/index.js +19 -0
- package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
- package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
- package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
- package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
- package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
- package/lib/aws/compute/function-nodejs/types.js +81 -0
- package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
- package/lib/aws/compute/function-nodejs/util.js +202 -0
- package/lib/aws/compute/function-url.d.ts +2 -2
- package/lib/aws/compute/function-url.js +4 -4
- package/lib/aws/compute/function.d.ts +43 -5
- package/lib/aws/compute/function.js +106 -18
- package/lib/aws/compute/gateway-response.d.ts +157 -0
- package/lib/aws/compute/gateway-response.js +156 -0
- package/lib/aws/compute/handler.d.ts +10 -0
- package/lib/aws/compute/handler.js +20 -0
- package/lib/aws/compute/index.d.ts +27 -0
- package/lib/aws/compute/index.js +29 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/integration.d.ts +311 -0
- package/lib/aws/compute/integration.js +165 -0
- package/lib/aws/compute/integrations/aws.d.ts +72 -0
- package/lib/aws/compute/integrations/aws.js +55 -0
- package/lib/aws/compute/integrations/http.d.ts +37 -0
- package/lib/aws/compute/integrations/http.js +35 -0
- package/lib/aws/compute/integrations/index.d.ts +6 -0
- package/lib/aws/compute/integrations/index.js +24 -0
- package/lib/aws/compute/integrations/lambda.d.ts +40 -0
- package/lib/aws/compute/integrations/lambda.js +73 -0
- package/lib/aws/compute/integrations/mock.d.ts +16 -0
- package/lib/aws/compute/integrations/mock.js +30 -0
- package/lib/aws/compute/integrations/request-context.d.ts +144 -0
- package/lib/aws/compute/integrations/request-context.js +3 -0
- package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
- package/lib/aws/compute/integrations/stepfunctions.js +268 -0
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/json-schema.d.ts +75 -0
- package/lib/aws/compute/json-schema.js +23 -0
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/lambda-api.d.ts +46 -0
- package/lib/aws/compute/lambda-api.js +64 -0
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/method.d.ts +219 -0
- package/lib/aws/compute/method.js +396 -0
- package/lib/aws/compute/methodresponse.d.ts +28 -0
- package/lib/aws/compute/methodresponse.js +3 -0
- package/lib/aws/compute/model.d.ts +143 -0
- package/lib/aws/compute/model.js +141 -0
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/requestvalidator.d.ts +50 -0
- package/lib/aws/compute/requestvalidator.js +59 -0
- package/lib/aws/compute/resource.d.ts +223 -0
- package/lib/aws/compute/resource.js +316 -0
- package/lib/aws/compute/restapi.d.ts +510 -0
- package/lib/aws/compute/restapi.js +626 -0
- package/lib/aws/compute/route.js +8 -8
- package/lib/aws/compute/runtime.d.ts +282 -0
- package/lib/aws/compute/runtime.js +337 -0
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +3 -3
- package/lib/aws/compute/security-group.js +1 -1
- package/lib/aws/compute/stage.d.ts +350 -0
- package/lib/aws/compute/stage.js +304 -0
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +3 -3
- package/lib/aws/compute/step-scaling-policy.js +1 -1
- package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
- package/lib/aws/compute/stepfunctions-api.js +39 -0
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.d.ts +194 -0
- package/lib/aws/compute/usage-plan.js +174 -0
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-link.d.ts +104 -0
- package/lib/aws/compute/vpc-link.js +137 -0
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +3 -3
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +5 -5
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.d.ts +1 -1
- package/lib/aws/notify/notification-rule.js +5 -5
- package/lib/aws/notify/policy.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +6 -5
- package/lib/aws/partition.d.ts +21 -0
- package/lib/aws/partition.js +42 -0
- package/lib/aws/storage/assets/image-asset.d.ts +379 -0
- package/lib/aws/storage/assets/image-asset.js +247 -0
- package/lib/aws/storage/assets/index.d.ts +2 -0
- package/lib/aws/storage/assets/index.js +21 -0
- package/lib/aws/storage/assets/s3.d.ts +125 -0
- package/lib/aws/storage/assets/s3.js +80 -0
- package/lib/aws/storage/auth-token.d.ts +25 -0
- package/lib/aws/storage/auth-token.js +54 -0
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +4 -4
- package/lib/aws/storage/bucket.d.ts +14 -6
- package/lib/aws/storage/bucket.js +48 -40
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
- package/lib/aws/storage/ecr-lifecycle.js +23 -0
- package/lib/aws/storage/ecr-repository.d.ts +446 -0
- package/lib/aws/storage/ecr-repository.js +685 -0
- package/lib/aws/storage/encryption.js +1 -1
- package/lib/aws/storage/index.d.ts +5 -0
- package/lib/aws/storage/index.js +10 -3
- package/lib/aws/storage/location.d.ts +17 -0
- package/lib/aws/storage/location.js +4 -0
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/table.js +3 -3
- package/lib/aws/storage/util.d.ts +8 -20
- package/lib/aws/storage/util.js +56 -34
- package/lib/aws/util.d.ts +1 -0
- package/lib/aws/util.js +6 -1
- package/lib/bundling.d.ts +434 -0
- package/lib/bundling.js +368 -0
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/copy.d.ts +2 -0
- package/lib/fs/copy.js +57 -0
- package/lib/fs/fingerprint.d.ts +21 -0
- package/lib/fs/fingerprint.js +165 -0
- package/lib/fs/ignore.d.ts +107 -0
- package/lib/fs/ignore.js +190 -0
- package/lib/fs/index.d.ts +47 -0
- package/lib/fs/index.js +88 -0
- package/lib/fs/options.d.ts +110 -0
- package/lib/fs/options.js +60 -0
- package/lib/fs/utils.d.ts +11 -0
- package/lib/fs/utils.js +34 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +7 -1
- package/lib/private/asset-staging.d.ts +83 -0
- package/lib/private/asset-staging.js +205 -0
- package/lib/private/cache.d.ts +17 -0
- package/lib/private/cache.js +35 -0
- package/lib/private/jsii-deprecated.d.ts +2 -0
- package/lib/private/jsii-deprecated.js +19 -0
- package/lib/private/unique-resource-name.js +3 -2
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +2 -2
- package/lib/time-zone.js +1 -1
- package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
- package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
- package/node_modules/@balena/dockerignore/README.md +261 -0
- package/node_modules/@balena/dockerignore/ignore.js +363 -0
- package/node_modules/@balena/dockerignore/index.d.ts +45 -0
- package/node_modules/@balena/dockerignore/package.json +49 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/ignore/LICENSE-MIT +21 -0
- package/node_modules/ignore/README.md +412 -0
- package/node_modules/ignore/index.d.ts +61 -0
- package/node_modules/ignore/index.js +636 -0
- package/node_modules/ignore/legacy.js +559 -0
- package/node_modules/ignore/package.json +74 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +230 -0
- package/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/minimatch/package.json +33 -0
- package/package.json +14 -5
- package/lib/aws/compute/function-nodejs.d.ts +0 -55
- package/lib/aws/compute/function-nodejs.js +0 -70
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearLargeFileFingerprintCache = clearLargeFileFingerprintCache;
|
|
4
|
+
exports.fingerprint = fingerprint;
|
|
5
|
+
exports.contentFingerprint = contentFingerprint;
|
|
6
|
+
const crypto = require("crypto");
|
|
7
|
+
const fs = require("fs");
|
|
8
|
+
const path = require("path");
|
|
9
|
+
const ignore_1 = require("./ignore");
|
|
10
|
+
const options_1 = require("./options");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
const cache_1 = require("../private/cache");
|
|
13
|
+
const BUFFER_SIZE = 8 * 1024;
|
|
14
|
+
const CTRL_SOH = "\x01";
|
|
15
|
+
const CTRL_SOT = "\x02";
|
|
16
|
+
const CTRL_ETX = "\x03";
|
|
17
|
+
const CR = "\r";
|
|
18
|
+
const LF = "\n";
|
|
19
|
+
const CRLF = `${CR}${LF}`;
|
|
20
|
+
const fingerprintCache = new cache_1.Cache();
|
|
21
|
+
/**
|
|
22
|
+
* Files are fingerprinted only the first time they are encountered, to save
|
|
23
|
+
* time hashing large files. This function clears this cache, should it be
|
|
24
|
+
* necessary for some reason.
|
|
25
|
+
*/
|
|
26
|
+
function clearLargeFileFingerprintCache() {
|
|
27
|
+
fingerprintCache.clear();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Produces fingerprint based on the contents of a single file or an entire directory tree.
|
|
31
|
+
*
|
|
32
|
+
* Line endings are converted from CRLF to LF.
|
|
33
|
+
*
|
|
34
|
+
* The fingerprint will also include:
|
|
35
|
+
* 1. An extra string if defined in `options.extra`.
|
|
36
|
+
* 2. The symlink follow mode value.
|
|
37
|
+
*
|
|
38
|
+
* @param fileOrDirectory The directory or file to fingerprint
|
|
39
|
+
* @param options Fingerprinting options
|
|
40
|
+
*/
|
|
41
|
+
function fingerprint(fileOrDirectory, options = {}) {
|
|
42
|
+
const hash = crypto.createHash("sha256");
|
|
43
|
+
_hashField(hash, "options.extra", options.extraHash || "");
|
|
44
|
+
const follow = options.follow || options_1.SymlinkFollowMode.EXTERNAL;
|
|
45
|
+
_hashField(hash, "options.follow", follow);
|
|
46
|
+
// Resolve symlinks in the initial path (for example, the root directory
|
|
47
|
+
// might be symlinked). It's important that we know the absolute path, so we
|
|
48
|
+
// can judge if further symlinks inside the target directory are within the
|
|
49
|
+
// target or not (if we don't resolve, we would test w.r.t. the wrong path).
|
|
50
|
+
fileOrDirectory = fs.realpathSync(fileOrDirectory);
|
|
51
|
+
const isDir = fs.statSync(fileOrDirectory).isDirectory();
|
|
52
|
+
const rootDirectory = isDir ? fileOrDirectory : path.dirname(fileOrDirectory);
|
|
53
|
+
const ignoreMode = options.ignoreMode || options_1.IgnoreMode.GLOB;
|
|
54
|
+
if (ignoreMode != options_1.IgnoreMode.GLOB) {
|
|
55
|
+
_hashField(hash, "options.ignoreMode", ignoreMode);
|
|
56
|
+
}
|
|
57
|
+
const ignoreStrategy = ignore_1.IgnoreStrategy.fromCopyOptions(options, fileOrDirectory);
|
|
58
|
+
_processFileOrDirectory(fileOrDirectory, isDir);
|
|
59
|
+
return hash.digest("hex");
|
|
60
|
+
function _processFileOrDirectory(symbolicPath, isRootDir = false, realPath = symbolicPath) {
|
|
61
|
+
if (!isRootDir && ignoreStrategy.ignores(symbolicPath)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const stat = fs.lstatSync(realPath);
|
|
65
|
+
// Use relative path as hash component. Normalize it with forward slashes to ensure
|
|
66
|
+
// same hash on Windows and Linux.
|
|
67
|
+
const hashComponent = path
|
|
68
|
+
.relative(fileOrDirectory, symbolicPath)
|
|
69
|
+
.replace(/\\/g, "/");
|
|
70
|
+
if (stat.isSymbolicLink()) {
|
|
71
|
+
const linkTarget = fs.readlinkSync(realPath);
|
|
72
|
+
const resolvedLinkTarget = path.resolve(path.dirname(realPath), linkTarget);
|
|
73
|
+
if ((0, utils_1.shouldFollow)(follow, rootDirectory, resolvedLinkTarget)) {
|
|
74
|
+
_processFileOrDirectory(symbolicPath, false, resolvedLinkTarget);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
_hashField(hash, `link:${hashComponent}`, linkTarget);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (stat.isFile()) {
|
|
81
|
+
_hashField(hash, `file:${hashComponent}`, contentFingerprint(realPath));
|
|
82
|
+
}
|
|
83
|
+
else if (stat.isDirectory()) {
|
|
84
|
+
for (const item of fs.readdirSync(realPath).sort()) {
|
|
85
|
+
_processFileOrDirectory(path.join(symbolicPath, item), false, path.join(realPath, item));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error(`Unable to hash ${symbolicPath}: it is neither a file nor a directory`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function contentFingerprint(file) {
|
|
94
|
+
// On windows it's particularly important to pass bigint: true to ensure that
|
|
95
|
+
// floating-point inaccuracies don't result in false matches. ( see
|
|
96
|
+
// https://github.com/nodejs/node/issues/12115#issuecomment-438741212 )
|
|
97
|
+
//
|
|
98
|
+
// Note that even if we do get a inode collision somehow, it's unlikely that
|
|
99
|
+
// both mtime and size would have a false-positive as well.
|
|
100
|
+
// We also must suppress typescript typechecks as we are using a version of
|
|
101
|
+
// @types/node that only supports node 10 declarations.
|
|
102
|
+
const stats = fs.statSync(file, { bigint: true });
|
|
103
|
+
const cacheKey = JSON.stringify({
|
|
104
|
+
mtime_unix: stats.mtime.toUTCString(),
|
|
105
|
+
mtime_ms: stats.mtimeMs.toString(),
|
|
106
|
+
inode: stats.ino.toString(),
|
|
107
|
+
size: stats.size.toString(),
|
|
108
|
+
});
|
|
109
|
+
return fingerprintCache.obtain(cacheKey, () => contentFingerprintMiss(file));
|
|
110
|
+
}
|
|
111
|
+
function contentFingerprintMiss(file) {
|
|
112
|
+
const hash = crypto.createHash("sha256");
|
|
113
|
+
const buffer = Buffer.alloc(BUFFER_SIZE);
|
|
114
|
+
const fd = fs.openSync(file,
|
|
115
|
+
// eslint-disable-next-line no-bitwise
|
|
116
|
+
fs.constants.O_DSYNC | fs.constants.O_RDONLY | fs.constants.O_SYNC);
|
|
117
|
+
let size = 0;
|
|
118
|
+
let isBinary = false;
|
|
119
|
+
let lastStr = "";
|
|
120
|
+
let read = 0;
|
|
121
|
+
try {
|
|
122
|
+
while ((read = fs.readSync(fd, buffer, 0, BUFFER_SIZE, null)) !== 0) {
|
|
123
|
+
const slicedBuffer = buffer.slice(0, read);
|
|
124
|
+
// Detect if file is binary by checking the first 8k bytes for the
|
|
125
|
+
// null character (git like implementation)
|
|
126
|
+
if (size === 0) {
|
|
127
|
+
isBinary = slicedBuffer.indexOf(0) !== -1;
|
|
128
|
+
}
|
|
129
|
+
let dataBuffer = slicedBuffer;
|
|
130
|
+
if (!isBinary) {
|
|
131
|
+
// Line endings normalization (CRLF -> LF)
|
|
132
|
+
const str = buffer.slice(0, read).toString();
|
|
133
|
+
// We are going to normalize line endings to LF. So if the current
|
|
134
|
+
// buffer ends with CR, it could be that the next one starts with
|
|
135
|
+
// LF so we need to save it for later use.
|
|
136
|
+
if (new RegExp(`${CR}$`).test(str)) {
|
|
137
|
+
lastStr += str;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const data = lastStr + str;
|
|
141
|
+
const normalizedData = data.replace(new RegExp(CRLF, "g"), LF);
|
|
142
|
+
dataBuffer = Buffer.from(normalizedData);
|
|
143
|
+
lastStr = "";
|
|
144
|
+
}
|
|
145
|
+
size += dataBuffer.length;
|
|
146
|
+
hash.update(dataBuffer);
|
|
147
|
+
}
|
|
148
|
+
if (lastStr) {
|
|
149
|
+
hash.update(Buffer.from(lastStr));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
fs.closeSync(fd);
|
|
154
|
+
}
|
|
155
|
+
return `${size}:${hash.digest("hex")}`;
|
|
156
|
+
}
|
|
157
|
+
function _hashField(hash, header, value) {
|
|
158
|
+
hash
|
|
159
|
+
.update(CTRL_SOH)
|
|
160
|
+
.update(header)
|
|
161
|
+
.update(CTRL_SOT)
|
|
162
|
+
.update(value)
|
|
163
|
+
.update(CTRL_ETX);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2VycHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnMvZmluZ2VycHJpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsd0VBRUM7QUFjRCxrQ0EyRUM7QUFFRCxnREFtQkM7QUF2SUQsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IscUNBQTBDO0FBQzFDLHVDQUE4RTtBQUM5RSxtQ0FBdUM7QUFDdkMsNENBQXlDO0FBRXpDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDeEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUUxQixNQUFNLGdCQUFnQixHQUFHLElBQUksYUFBSyxFQUFVLENBQUM7QUFFN0M7Ozs7R0FJRztBQUNILFNBQWdCLDhCQUE4QjtJQUM1QyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQ3pCLGVBQXVCLEVBQ3ZCLFVBQThCLEVBQUU7SUFFaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksMkJBQWlCLENBQUMsUUFBUSxDQUFDO0lBQzVELFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdC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LElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDZixDQUFDO1lBRUQsSUFBSSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO1lBQVMsQ0FBQztRQUNULEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDakIsSUFBaUIsRUFDakIsTUFBYyxFQUNkLEtBQWlDO0lBRWpDLElBQUk7U0FDRCxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ2hCLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZCxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDYixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IElnbm9yZVN0cmF0ZWd5IH0gZnJvbSBcIi4vaWdub3JlXCI7XG5pbXBvcnQgeyBGaW5nZXJwcmludE9wdGlvbnMsIElnbm9yZU1vZGUsIFN5bWxpbmtGb2xsb3dNb2RlIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgc2hvdWxkRm9sbG93IH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IENhY2hlIH0gZnJvbSBcIi4uL3ByaXZhdGUvY2FjaGVcIjtcblxuY29uc3QgQlVGRkVSX1NJWkUgPSA4ICogMTAyNDtcbmNvbnN0IENUUkxfU09IID0gXCJcXHgwMVwiO1xuY29uc3QgQ1RSTF9TT1QgPSBcIlxceDAyXCI7XG5jb25zdCBDVFJMX0VUWCA9IFwiXFx4MDNcIjtcbmNvbnN0IENSID0gXCJcXHJcIjtcbmNvbnN0IExGID0gXCJcXG5cIjtcbmNvbnN0IENSTEYgPSBgJHtDUn0ke0xGfWA7XG5cbmNvbnN0IGZpbmdlcnByaW50Q2FjaGUgPSBuZXcgQ2FjaGU8c3RyaW5nPigpO1xuXG4vKipcbiAqIEZpbGVzIGFyZSBmaW5nZXJwcmludGVkIG9ubHkgdGhlIGZpcnN0IHRpbWUgdGhleSBhcmUgZW5jb3VudGVyZWQsIHRvIHNhdmVcbiAqIHRpbWUgaGFzaGluZyBsYXJnZSBmaWxlcy4gVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhpcyBjYWNoZSwgc2hvdWxkIGl0IGJlXG4gKiBuZWNlc3NhcnkgZm9yIHNvbWUgcmVhc29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJMYXJnZUZpbGVGaW5nZXJwcmludENhY2hlKCkge1xuICBmaW5nZXJwcmludENhY2hlLmNsZWFyKCk7XG59XG5cbi8qKlxuICogUHJvZHVjZXMgZmluZ2VycHJpbnQgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIGEgc2luZ2xlIGZpbGUgb3IgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlLlxuICpcbiAqIExpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkIGZyb20gQ1JMRiB0byBMRi5cbiAqXG4gKiBUaGUgZmluZ2VycHJpbnQgd2lsbCBhbHNvIGluY2x1ZGU6XG4gKiAxLiBBbiBleHRyYSBzdHJpbmcgaWYgZGVmaW5lZCBpbiBgb3B0aW9ucy5leHRyYWAuXG4gKiAyLiBUaGUgc3ltbGluayBmb2xsb3cgbW9kZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gZmlsZU9yRGlyZWN0b3J5IFRoZSBkaXJlY3Rvcnkgb3IgZmlsZSB0byBmaW5nZXJwcmludFxuICogQHBhcmFtIG9wdGlvbnMgRmluZ2VycHJpbnRpbmcgb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZ2VycHJpbnQoXG4gIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICBvcHRpb25zOiBGaW5nZXJwcmludE9wdGlvbnMgPSB7fSxcbikge1xuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIik7XG4gIF9oYXNoRmllbGQoaGFzaCwgXCJvcHRpb25zLmV4dHJhXCIsIG9wdGlvbnMuZXh0cmFIYXNoIHx8IFwiXCIpO1xuICBjb25zdCBmb2xsb3cgPSBvcHRpb25zLmZvbGxvdyB8fCBTeW1saW5rRm9sbG93TW9kZS5FWFRFUk5BTDtcbiAgX2hhc2hGaWVsZChoYXNoLCBcIm9wdGlvbnMuZm9sbG93XCIsIGZvbGxvdyk7XG5cbiAgLy8gUmVzb2x2ZSBzeW1saW5rcyBpbiB0aGUgaW5pdGlhbCBwYXRoIChmb3IgZXhhbXBsZSwgdGhlIHJvb3QgZGlyZWN0b3J5XG4gIC8vIG1pZ2h0IGJlIHN5bWxpbmtlZCkuIEl0J3MgaW1wb3J0YW50IHRoYXQgd2Uga25vdyB0aGUgYWJzb2x1dGUgcGF0aCwgc28gd2VcbiAgLy8gY2FuIGp1ZGdlIGlmIGZ1cnRoZXIgc3ltbGlua3MgaW5zaWRlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFyZSB3aXRoaW4gdGhlXG4gIC8vIHRhcmdldCBvciBub3QgKGlmIHdlIGRvbid0IHJlc29sdmUsIHdlIHdvdWxkIHRlc3Qgdy5yLnQuIHRoZSB3cm9uZyBwYXRoKS5cbiAgZmlsZU9yRGlyZWN0b3J5ID0gZnMucmVhbHBhdGhTeW5jKGZpbGVPckRpcmVjdG9yeSk7XG5cbiAgY29uc3QgaXNEaXIgPSBmcy5zdGF0U3luYyhmaWxlT3JEaXJlY3RvcnkpLmlzRGlyZWN0b3J5KCk7XG4gIGNvbnN0IHJvb3REaXJlY3RvcnkgPSBpc0RpciA/IGZpbGVPckRpcmVjdG9yeSA6IHBhdGguZGlybmFtZShmaWxlT3JEaXJlY3RvcnkpO1xuXG4gIGNvbnN0IGlnbm9yZU1vZGUgPSBvcHRpb25zLmlnbm9yZU1vZGUgfHwgSWdub3JlTW9kZS5HTE9CO1xuICBpZiAoaWdub3JlTW9kZSAhPSBJZ25vcmVNb2RlLkdMT0IpIHtcbiAgICBfaGFzaEZpZWxkKGhhc2gsIFwib3B0aW9ucy5pZ25vcmVNb2RlXCIsIGlnbm9yZU1vZGUpO1xuICB9XG5cbiAgY29uc3QgaWdub3JlU3RyYXRlZ3kgPSBJZ25vcmVTdHJhdGVneS5mcm9tQ29weU9wdGlvbnMoXG4gICAgb3B0aW9ucyxcbiAgICBmaWxlT3JEaXJlY3RvcnksXG4gICk7XG4gIF9wcm9jZXNzRmlsZU9yRGlyZWN0b3J5KGZpbGVPckRpcmVjdG9yeSwgaXNEaXIpO1xuXG4gIHJldHVybiBoYXNoLmRpZ2VzdChcImhleFwiKTtcblxuICBmdW5jdGlvbiBfcHJvY2Vzc0ZpbGVPckRpcmVjdG9yeShcbiAgICBzeW1ib2xpY1BhdGg6IHN0cmluZyxcbiAgICBpc1Jvb3REaXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICByZWFsUGF0aCA9IHN5bWJvbGljUGF0aCxcbiAgKSB7XG4gICAgaWYgKCFpc1Jvb3REaXIgJiYgaWdub3JlU3RyYXRlZ3kuaWdub3JlcyhzeW1ib2xpY1BhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyhyZWFsUGF0aCk7XG5cbiAgICAvLyBVc2UgcmVsYXRpdmUgcGF0aCBhcyBoYXNoIGNvbXBvbmVudC4gTm9ybWFsaXplIGl0IHdpdGggZm9yd2FyZCBzbGFzaGVzIHRvIGVuc3VyZVxuICAgIC8vIHNhbWUgaGFzaCBvbiBXaW5kb3dzIGFuZCBMaW51eC5cbiAgICBjb25zdCBoYXNoQ29tcG9uZW50ID0gcGF0aFxuICAgICAgLnJlbGF0aXZlKGZpbGVPckRpcmVjdG9yeSwgc3ltYm9saWNQYXRoKVxuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuXG4gICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgY29uc3QgbGlua1RhcmdldCA9IGZzLnJlYWRsaW5rU3luYyhyZWFsUGF0aCk7XG4gICAgICBjb25zdCByZXNvbHZlZExpbmtUYXJnZXQgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguZGlybmFtZShyZWFsUGF0aCksXG4gICAgICAgIGxpbmtUYXJnZXQsXG4gICAgICApO1xuICAgICAgaWYgKHNob3VsZEZvbGxvdyhmb2xsb3csIHJvb3REaXJlY3RvcnksIHJlc29sdmVkTGlua1RhcmdldCkpIHtcbiAgICAgICAgX3Byb2Nlc3NGaWxlT3JEaXJlY3Rvcnkoc3ltYm9saWNQYXRoLCBmYWxzZSwgcmVzb2x2ZWRMaW5rVGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9oYXNoRmllbGQoaGFzaCwgYGxpbms6JHtoYXNoQ29tcG9uZW50fWAsIGxpbmtUYXJnZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgX2hhc2hGaWVsZChoYXNoLCBgZmlsZToke2hhc2hDb21wb25lbnR9YCwgY29udGVudEZpbmdlcnByaW50KHJlYWxQYXRoKSk7XG4gICAgfSBlbHNlIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmcy5yZWFkZGlyU3luYyhyZWFsUGF0aCkuc29ydCgpKSB7XG4gICAgICAgIF9wcm9jZXNzRmlsZU9yRGlyZWN0b3J5KFxuICAgICAgICAgIHBhdGguam9pbihzeW1ib2xpY1BhdGgsIGl0ZW0pLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHBhdGguam9pbihyZWFsUGF0aCwgaXRlbSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuYWJsZSB0byBoYXNoICR7c3ltYm9saWNQYXRofTogaXQgaXMgbmVpdGhlciBhIGZpbGUgbm9yIGEgZGlyZWN0b3J5YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZW50RmluZ2VycHJpbnQoZmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gT24gd2luZG93cyBpdCdzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgdG8gcGFzcyBiaWdpbnQ6IHRydWUgdG8gZW5zdXJlIHRoYXRcbiAgLy8gZmxvYXRpbmctcG9pbnQgaW5hY2N1cmFjaWVzIGRvbid0IHJlc3VsdCBpbiBmYWxzZSBtYXRjaGVzLiAoIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzEyMTE1I2lzc3VlY29tbWVudC00Mzg3NDEyMTIgKVxuICAvL1xuICAvLyBOb3RlIHRoYXQgZXZlbiBpZiB3ZSBkbyBnZXQgYSBpbm9kZSBjb2xsaXNpb24gc29tZWhvdywgaXQncyB1bmxpa2VseSB0aGF0XG4gIC8vIGJvdGggbXRpbWUgYW5kIHNpemUgd291bGQgaGF2ZSBhIGZhbHNlLXBvc2l0aXZlIGFzIHdlbGwuXG5cbiAgLy8gV2UgYWxzbyBtdXN0IHN1cHByZXNzIHR5cGVzY3JpcHQgdHlwZWNoZWNrcyBhcyB3ZSBhcmUgdXNpbmcgYSB2ZXJzaW9uIG9mXG4gIC8vIEB0eXBlcy9ub2RlIHRoYXQgb25seSBzdXBwb3J0cyBub2RlIDEwIGRlY2xhcmF0aW9ucy5cbiAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KTtcbiAgY29uc3QgY2FjaGVLZXkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgbXRpbWVfdW5peDogc3RhdHMubXRpbWUudG9VVENTdHJpbmcoKSxcbiAgICBtdGltZV9tczogc3RhdHMubXRpbWVNcy50b1N0cmluZygpLFxuICAgIGlub2RlOiBzdGF0cy5pbm8udG9TdHJpbmcoKSxcbiAgICBzaXplOiBzdGF0cy5zaXplLnRvU3RyaW5nKCksXG4gIH0pO1xuXG4gIHJldHVybiBmaW5nZXJwcmludENhY2hlLm9idGFpbihjYWNoZUtleSwgKCkgPT4gY29udGVudEZpbmdlcnByaW50TWlzcyhmaWxlKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGaW5nZXJwcmludE1pc3MoZmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoQlVGRkVSX1NJWkUpO1xuICBjb25zdCBmZCA9IGZzLm9wZW5TeW5jKFxuICAgIGZpbGUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBmcy5jb25zdGFudHMuT19EU1lOQyB8IGZzLmNvbnN0YW50cy5PX1JET05MWSB8IGZzLmNvbnN0YW50cy5PX1NZTkMsXG4gICk7XG4gIGxldCBzaXplID0gMDtcbiAgbGV0IGlzQmluYXJ5ID0gZmFsc2U7XG4gIGxldCBsYXN0U3RyID0gXCJcIjtcbiAgbGV0IHJlYWQgPSAwO1xuICB0cnkge1xuICAgIHdoaWxlICgocmVhZCA9IGZzLnJlYWRTeW5jKGZkLCBidWZmZXIsIDAsIEJVRkZFUl9TSVpFLCBudWxsKSkgIT09IDApIHtcbiAgICAgIGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgwLCByZWFkKTtcblxuICAgICAgLy8gRGV0ZWN0IGlmIGZpbGUgaXMgYmluYXJ5IGJ5IGNoZWNraW5nIHRoZSBmaXJzdCA4ayBieXRlcyBmb3IgdGhlXG4gICAgICAvLyBudWxsIGNoYXJhY3RlciAoZ2l0IGxpa2UgaW1wbGVtZW50YXRpb24pXG4gICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICBpc0JpbmFyeSA9IHNsaWNlZEJ1ZmZlci5pbmRleE9mKDApICE9PSAtMTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFCdWZmZXIgPSBzbGljZWRCdWZmZXI7XG4gICAgICBpZiAoIWlzQmluYXJ5KSB7XG4gICAgICAgIC8vIExpbmUgZW5kaW5ncyBub3JtYWxpemF0aW9uIChDUkxGIC0+IExGKVxuICAgICAgICBjb25zdCBzdHIgPSBidWZmZXIuc2xpY2UoMCwgcmVhZCkudG9TdHJpbmcoKTtcblxuICAgICAgICAvLyBXZSBhcmUgZ29pbmcgdG8gbm9ybWFsaXplIGxpbmUgZW5kaW5ncyB0byBMRi4gU28gaWYgdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gYnVmZmVyIGVuZHMgd2l0aCBDUiwgaXQgY291bGQgYmUgdGhhdCB0aGUgbmV4dCBvbmUgc3RhcnRzIHdpdGhcbiAgICAgICAgLy8gTEYgc28gd2UgbmVlZCB0byBzYXZlIGl0IGZvciBsYXRlciB1c2UuXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKGAke0NSfSRgKS50ZXN0KHN0cikpIHtcbiAgICAgICAgICBsYXN0U3RyICs9IHN0cjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBsYXN0U3RyICsgc3RyO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0YSA9IGRhdGEucmVwbGFjZShuZXcgUmVnRXhwKENSTEYsIFwiZ1wiKSwgTEYpO1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmZyb20obm9ybWFsaXplZERhdGEpO1xuICAgICAgICBsYXN0U3RyID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgc2l6ZSArPSBkYXRhQnVmZmVyLmxlbmd0aDtcbiAgICAgIGhhc2gudXBkYXRlKGRhdGFCdWZmZXIpO1xuICAgIH1cblxuICAgIGlmIChsYXN0U3RyKSB7XG4gICAgICBoYXNoLnVwZGF0ZShCdWZmZXIuZnJvbShsYXN0U3RyKSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGZzLmNsb3NlU3luYyhmZCk7XG4gIH1cbiAgcmV0dXJuIGAke3NpemV9OiR7aGFzaC5kaWdlc3QoXCJoZXhcIil9YDtcbn1cblxuZnVuY3Rpb24gX2hhc2hGaWVsZChcbiAgaGFzaDogY3J5cHRvLkhhc2gsXG4gIGhlYWRlcjogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nIHwgQnVmZmVyIHwgRGF0YVZpZXcsXG4pIHtcbiAgaGFzaFxuICAgIC51cGRhdGUoQ1RSTF9TT0gpXG4gICAgLnVwZGF0ZShoZWFkZXIpXG4gICAgLnVwZGF0ZShDVFJMX1NPVClcbiAgICAudXBkYXRlKHZhbHVlKVxuICAgIC51cGRhdGUoQ1RSTF9FVFgpO1xufVxuIl19
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { CopyOptions } from "./options";
|
|
2
|
+
/**
|
|
3
|
+
* Represents file path ignoring behavior.
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class IgnoreStrategy {
|
|
6
|
+
/**
|
|
7
|
+
* Ignores file paths based on simple glob patterns.
|
|
8
|
+
*
|
|
9
|
+
* @returns `GlobIgnorePattern` associated with the given patterns.
|
|
10
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
11
|
+
*/
|
|
12
|
+
static glob(absoluteRootPath: string, patterns: string[]): GlobIgnoreStrategy;
|
|
13
|
+
/**
|
|
14
|
+
* Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
|
|
15
|
+
*
|
|
16
|
+
* @returns `GitIgnorePattern` associated with the given patterns.
|
|
17
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
18
|
+
*/
|
|
19
|
+
static git(absoluteRootPath: string, patterns: string[]): GitIgnoreStrategy;
|
|
20
|
+
/**
|
|
21
|
+
* Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
|
|
22
|
+
*
|
|
23
|
+
* @returns `DockerIgnorePattern` associated with the given patterns.
|
|
24
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
25
|
+
*/
|
|
26
|
+
static docker(absoluteRootPath: string, patterns: string[]): DockerIgnoreStrategy;
|
|
27
|
+
/**
|
|
28
|
+
* Creates an IgnoreStrategy based on the `ignoreMode` and `exclude` in a `CopyOptions`.
|
|
29
|
+
*
|
|
30
|
+
* @returns `IgnoreStrategy` based on the `CopyOptions`
|
|
31
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
32
|
+
* @param options the `CopyOptions` to create the `IgnoreStrategy` from
|
|
33
|
+
*/
|
|
34
|
+
static fromCopyOptions(options: CopyOptions, absoluteRootPath: string): IgnoreStrategy;
|
|
35
|
+
/**
|
|
36
|
+
* Adds another pattern.
|
|
37
|
+
* @params pattern the pattern to add
|
|
38
|
+
*/
|
|
39
|
+
abstract add(pattern: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Determines whether a given file path should be ignored or not.
|
|
42
|
+
*
|
|
43
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
44
|
+
* @returns `true` if the file should be ignored
|
|
45
|
+
*/
|
|
46
|
+
abstract ignores(absoluteFilePath: string): boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ignores file paths based on simple glob patterns.
|
|
50
|
+
*/
|
|
51
|
+
export declare class GlobIgnoreStrategy extends IgnoreStrategy {
|
|
52
|
+
private readonly absoluteRootPath;
|
|
53
|
+
private readonly patterns;
|
|
54
|
+
constructor(absoluteRootPath: string, patterns: string[]);
|
|
55
|
+
/**
|
|
56
|
+
* Adds another pattern.
|
|
57
|
+
* @params pattern the pattern to add
|
|
58
|
+
*/
|
|
59
|
+
add(pattern: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Determines whether a given file path should be ignored or not.
|
|
62
|
+
*
|
|
63
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
64
|
+
* @returns `true` if the file should be ignored
|
|
65
|
+
*/
|
|
66
|
+
ignores(absoluteFilePath: string): boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
|
|
70
|
+
*/
|
|
71
|
+
export declare class GitIgnoreStrategy extends IgnoreStrategy {
|
|
72
|
+
private readonly absoluteRootPath;
|
|
73
|
+
private readonly ignore;
|
|
74
|
+
constructor(absoluteRootPath: string, patterns: string[]);
|
|
75
|
+
/**
|
|
76
|
+
* Adds another pattern.
|
|
77
|
+
* @params pattern the pattern to add
|
|
78
|
+
*/
|
|
79
|
+
add(pattern: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Determines whether a given file path should be ignored or not.
|
|
82
|
+
*
|
|
83
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
84
|
+
* @returns `true` if the file should be ignored
|
|
85
|
+
*/
|
|
86
|
+
ignores(absoluteFilePath: string): boolean;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
|
|
90
|
+
*/
|
|
91
|
+
export declare class DockerIgnoreStrategy extends IgnoreStrategy {
|
|
92
|
+
private readonly absoluteRootPath;
|
|
93
|
+
private readonly ignore;
|
|
94
|
+
constructor(absoluteRootPath: string, patterns: string[]);
|
|
95
|
+
/**
|
|
96
|
+
* Adds another pattern.
|
|
97
|
+
* @params pattern the pattern to add
|
|
98
|
+
*/
|
|
99
|
+
add(pattern: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Determines whether a given file path should be ignored or not.
|
|
102
|
+
*
|
|
103
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
104
|
+
* @returns `true` if the file should be ignored
|
|
105
|
+
*/
|
|
106
|
+
ignores(absoluteFilePath: string): boolean;
|
|
107
|
+
}
|
package/lib/fs/ignore.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DockerIgnoreStrategy = exports.GitIgnoreStrategy = exports.GlobIgnoreStrategy = exports.IgnoreStrategy = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/core/lib/fs/ignore.ts
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const dockerignore_1 = require("@balena/dockerignore");
|
|
9
|
+
const ignore_1 = require("ignore");
|
|
10
|
+
const options_1 = require("./options");
|
|
11
|
+
// Must be a 'require' to not run afoul of ESM module import rules
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
13
|
+
const minimatch = require("minimatch");
|
|
14
|
+
/**
|
|
15
|
+
* Represents file path ignoring behavior.
|
|
16
|
+
*/
|
|
17
|
+
class IgnoreStrategy {
|
|
18
|
+
/**
|
|
19
|
+
* Ignores file paths based on simple glob patterns.
|
|
20
|
+
*
|
|
21
|
+
* @returns `GlobIgnorePattern` associated with the given patterns.
|
|
22
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
23
|
+
*/
|
|
24
|
+
static glob(absoluteRootPath, patterns) {
|
|
25
|
+
return new GlobIgnoreStrategy(absoluteRootPath, patterns);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
|
|
29
|
+
*
|
|
30
|
+
* @returns `GitIgnorePattern` associated with the given patterns.
|
|
31
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
32
|
+
*/
|
|
33
|
+
static git(absoluteRootPath, patterns) {
|
|
34
|
+
return new GitIgnoreStrategy(absoluteRootPath, patterns);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
|
|
38
|
+
*
|
|
39
|
+
* @returns `DockerIgnorePattern` associated with the given patterns.
|
|
40
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
41
|
+
*/
|
|
42
|
+
static docker(absoluteRootPath, patterns) {
|
|
43
|
+
return new DockerIgnoreStrategy(absoluteRootPath, patterns);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates an IgnoreStrategy based on the `ignoreMode` and `exclude` in a `CopyOptions`.
|
|
47
|
+
*
|
|
48
|
+
* @returns `IgnoreStrategy` based on the `CopyOptions`
|
|
49
|
+
* @param absoluteRootPath the absolute path to the root directory of the paths to be considered
|
|
50
|
+
* @param options the `CopyOptions` to create the `IgnoreStrategy` from
|
|
51
|
+
*/
|
|
52
|
+
static fromCopyOptions(options, absoluteRootPath) {
|
|
53
|
+
const ignoreMode = options.ignoreMode || options_1.IgnoreMode.GLOB;
|
|
54
|
+
const exclude = options.exclude || [];
|
|
55
|
+
switch (ignoreMode) {
|
|
56
|
+
case options_1.IgnoreMode.GLOB:
|
|
57
|
+
return this.glob(absoluteRootPath, exclude);
|
|
58
|
+
case options_1.IgnoreMode.GIT:
|
|
59
|
+
return this.git(absoluteRootPath, exclude);
|
|
60
|
+
case options_1.IgnoreMode.DOCKER:
|
|
61
|
+
return this.docker(absoluteRootPath, exclude);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.IgnoreStrategy = IgnoreStrategy;
|
|
66
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
67
|
+
IgnoreStrategy[_a] = { fqn: "terraconstructs.IgnoreStrategy", version: "0.1.1" };
|
|
68
|
+
/**
|
|
69
|
+
* Ignores file paths based on simple glob patterns.
|
|
70
|
+
*/
|
|
71
|
+
class GlobIgnoreStrategy extends IgnoreStrategy {
|
|
72
|
+
constructor(absoluteRootPath, patterns) {
|
|
73
|
+
super();
|
|
74
|
+
if (!path.isAbsolute(absoluteRootPath)) {
|
|
75
|
+
throw new Error("GlobIgnoreStrategy expects an absolute file path");
|
|
76
|
+
}
|
|
77
|
+
this.absoluteRootPath = absoluteRootPath;
|
|
78
|
+
this.patterns = patterns;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Adds another pattern.
|
|
82
|
+
* @params pattern the pattern to add
|
|
83
|
+
*/
|
|
84
|
+
add(pattern) {
|
|
85
|
+
this.patterns.push(pattern);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Determines whether a given file path should be ignored or not.
|
|
89
|
+
*
|
|
90
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
91
|
+
* @returns `true` if the file should be ignored
|
|
92
|
+
*/
|
|
93
|
+
ignores(absoluteFilePath) {
|
|
94
|
+
if (!path.isAbsolute(absoluteFilePath)) {
|
|
95
|
+
throw new Error("GlobIgnoreStrategy.ignores() expects an absolute path");
|
|
96
|
+
}
|
|
97
|
+
let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath);
|
|
98
|
+
let excludeOutput = false;
|
|
99
|
+
for (const pattern of this.patterns) {
|
|
100
|
+
const negate = pattern.startsWith("!");
|
|
101
|
+
const match = minimatch(relativePath, pattern, {
|
|
102
|
+
matchBase: true,
|
|
103
|
+
flipNegate: true,
|
|
104
|
+
});
|
|
105
|
+
if (!negate && match) {
|
|
106
|
+
excludeOutput = true;
|
|
107
|
+
}
|
|
108
|
+
if (negate && match) {
|
|
109
|
+
excludeOutput = false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return excludeOutput;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.GlobIgnoreStrategy = GlobIgnoreStrategy;
|
|
116
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
117
|
+
GlobIgnoreStrategy[_b] = { fqn: "terraconstructs.GlobIgnoreStrategy", version: "0.1.1" };
|
|
118
|
+
/**
|
|
119
|
+
* Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
|
|
120
|
+
*/
|
|
121
|
+
class GitIgnoreStrategy extends IgnoreStrategy {
|
|
122
|
+
constructor(absoluteRootPath, patterns) {
|
|
123
|
+
super();
|
|
124
|
+
if (!path.isAbsolute(absoluteRootPath)) {
|
|
125
|
+
throw new Error("GitIgnoreStrategy expects an absolute file path");
|
|
126
|
+
}
|
|
127
|
+
this.absoluteRootPath = absoluteRootPath;
|
|
128
|
+
this.ignore = (0, ignore_1.default)().add(patterns);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Adds another pattern.
|
|
132
|
+
* @params pattern the pattern to add
|
|
133
|
+
*/
|
|
134
|
+
add(pattern) {
|
|
135
|
+
this.ignore.add(pattern);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Determines whether a given file path should be ignored or not.
|
|
139
|
+
*
|
|
140
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
141
|
+
* @returns `true` if the file should be ignored
|
|
142
|
+
*/
|
|
143
|
+
ignores(absoluteFilePath) {
|
|
144
|
+
if (!path.isAbsolute(absoluteFilePath)) {
|
|
145
|
+
throw new Error("GitIgnoreStrategy.ignores() expects an absolute path");
|
|
146
|
+
}
|
|
147
|
+
let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath);
|
|
148
|
+
return this.ignore.ignores(relativePath);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.GitIgnoreStrategy = GitIgnoreStrategy;
|
|
152
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
153
|
+
GitIgnoreStrategy[_c] = { fqn: "terraconstructs.GitIgnoreStrategy", version: "0.1.1" };
|
|
154
|
+
/**
|
|
155
|
+
* Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
|
|
156
|
+
*/
|
|
157
|
+
class DockerIgnoreStrategy extends IgnoreStrategy {
|
|
158
|
+
constructor(absoluteRootPath, patterns) {
|
|
159
|
+
super();
|
|
160
|
+
if (!path.isAbsolute(absoluteRootPath)) {
|
|
161
|
+
throw new Error("DockerIgnoreStrategy expects an absolute file path");
|
|
162
|
+
}
|
|
163
|
+
this.absoluteRootPath = absoluteRootPath;
|
|
164
|
+
this.ignore = (0, dockerignore_1.default)().add(patterns);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Adds another pattern.
|
|
168
|
+
* @params pattern the pattern to add
|
|
169
|
+
*/
|
|
170
|
+
add(pattern) {
|
|
171
|
+
this.ignore.add(pattern);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Determines whether a given file path should be ignored or not.
|
|
175
|
+
*
|
|
176
|
+
* @param absoluteFilePath absolute file path to be assessed against the pattern
|
|
177
|
+
* @returns `true` if the file should be ignored
|
|
178
|
+
*/
|
|
179
|
+
ignores(absoluteFilePath) {
|
|
180
|
+
if (!path.isAbsolute(absoluteFilePath)) {
|
|
181
|
+
throw new Error("DockerIgnoreStrategy.ignores() expects an absolute path");
|
|
182
|
+
}
|
|
183
|
+
let relativePath = path.relative(this.absoluteRootPath, absoluteFilePath);
|
|
184
|
+
return this.ignore.ignores(relativePath);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
exports.DockerIgnoreStrategy = DockerIgnoreStrategy;
|
|
188
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
189
|
+
DockerIgnoreStrategy[_d] = { fqn: "terraconstructs.DockerIgnoreStrategy", version: "0.1.1" };
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZzL2lnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBGQUEwRjtBQUUxRiw2QkFBNkI7QUFDN0IsdURBQW1FO0FBQ25FLG1DQUErQztBQUMvQyx1Q0FBb0Q7QUFFcEQsa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFzQixjQUFjO0lBQ2xDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUNmLGdCQUF3QixFQUN4QixRQUFrQjtRQUVsQixPQUFPLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FDbEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FDM0IsT0FBb0IsRUFDcEIsZ0JBQXdCO1FBRXhCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksb0JBQVUsQ0FBQyxJQUFJLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFdEMsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLG9CQUFVLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxJQUFJLENBQUMs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LENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7O0FBdkNILG9EQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2lnbm9yZS50c1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZG9ja2VySWdub3JlLCAqIGFzIERvY2tlcklnbm9yZSBmcm9tIFwiQGJhbGVuYS9kb2NrZXJpZ25vcmVcIjtcbmltcG9ydCBnaXRJZ25vcmUsICogYXMgR2l0SWdub3JlIGZyb20gXCJpZ25vcmVcIjtcbmltcG9ydCB7IENvcHlPcHRpb25zLCBJZ25vcmVNb2RlIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuXG4vLyBNdXN0IGJlIGEgJ3JlcXVpcmUnIHRvIG5vdCBydW4gYWZvdWwgb2YgRVNNIG1vZHVsZSBpbXBvcnQgcnVsZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBtaW5pbWF0Y2ggPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgZmlsZSBwYXRoIGlnbm9yaW5nIGJlaGF2aW9yLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWdub3JlU3RyYXRlZ3kge1xuICAvKipcbiAgICogSWdub3JlcyBmaWxlIHBhdGhzIGJhc2VkIG9uIHNpbXBsZSBnbG9iIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAcmV0dXJucyBgR2xvYklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnbG9iKFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgICBwYXR0ZXJuczogc3RyaW5nW10sXG4gICk6IEdsb2JJZ25vcmVTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iSWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZ2l0aWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlKS5cbiAgICpcbiAgICogQHJldHVybnMgYEdpdElnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnaXQoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogR2l0SWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgR2l0SWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAgICpcbiAgICogQHJldHVybnMgYERvY2tlcklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2NrZXIoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogRG9ja2VySWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgRG9ja2VySWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSWdub3JlU3RyYXRlZ3kgYmFzZWQgb24gdGhlIGBpZ25vcmVNb2RlYCBhbmQgYGV4Y2x1ZGVgIGluIGEgYENvcHlPcHRpb25zYC5cbiAgICpcbiAgICogQHJldHVybnMgYElnbm9yZVN0cmF0ZWd5YCBiYXNlZCBvbiB0aGUgYENvcHlPcHRpb25zYFxuICAgKiBAcGFyYW0gYWJzb2x1dGVSb290UGF0aCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBhdGhzIHRvIGJlIGNvbnNpZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgdGhlIGBDb3B5T3B0aW9uc2AgdG8gY3JlYXRlIHRoZSBgSWdub3JlU3RyYXRlZ3lgIGZyb21cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvcHlPcHRpb25zKFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zLFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgKTogSWdub3JlU3RyYXRlZ3kge1xuICAgIGNvbnN0IGlnbm9yZU1vZGUgPSBvcHRpb25zLmlnbm9yZU1vZGUgfHwgSWdub3JlTW9kZS5HTE9CO1xuICAgIGNvbnN0IGV4Y2x1ZGUgPSBvcHRpb25zLmV4Y2x1ZGUgfHwgW107XG5cbiAgICBzd2l0Y2ggKGlnbm9yZU1vZGUpIHtcbiAgICAgIGNhc2UgSWdub3JlTW9kZS5HTE9COlxuICAgICAgICByZXR1cm4gdGhpcy5nbG9iKGFic29sdXRlUm9vdFBhdGgsIGV4Y2x1ZGUpO1xuXG4gICAgICBjYXNlIElnbm9yZU1vZGUuR0lUOlxuICAgICAgICByZXR1cm4gdGhpcy5naXQoYWJzb2x1dGVSb290UGF0aCwgZXhjbHVkZSk7XG5cbiAgICAgIGNhc2UgSWdub3JlTW9kZS5ET0NLRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmRvY2tlcihhYnNvbHV0ZVJvb3RQYXRoLCBleGNsdWRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiBzaW1wbGUgZ2xvYiBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2JJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHbG9iSWdub3JlU3RyYXRlZ3kgZXhwZWN0cyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGhcIik7XG4gICAgfVxuXG4gICAgdGhpcy5hYnNvbHV0ZVJvb3RQYXRoID0gYWJzb2x1dGVSb290UGF0aDtcbiAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGZpbGUgcGF0aCBzaG91bGQgYmUgaWdub3JlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSBhYnNvbHV0ZUZpbGVQYXRoIGFic29sdXRlIGZpbGUgcGF0aCB0byBiZSBhc3Nlc3NlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlsZSBzaG91bGQgYmUgaWdub3JlZFxuICAgKi9cbiAgcHVibGljIGlnbm9yZXMoYWJzb2x1dGVGaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVGaWxlUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdsb2JJZ25vcmVTdHJhdGVneS5pZ25vcmVzKCkgZXhwZWN0cyBhbiBhYnNvbHV0ZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGxldCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuYWJzb2x1dGVSb290UGF0aCwgYWJzb2x1dGVGaWxlUGF0aCk7XG4gICAgbGV0IGV4Y2x1ZGVPdXRwdXQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICBjb25zdCBuZWdhdGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIhXCIpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1hdGNoQmFzZTogdHJ1ZSxcbiAgICAgICAgZmxpcE5lZ2F0ZTogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4Y2x1ZGVPdXRwdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJZ25vcmVzIGZpbGUgcGF0aHMgYmFzZWQgb24gdGhlIFtgLmdpdGlnbm9yZSBzcGVjaWZpY2F0aW9uYF0oaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGlnbm9yZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlOiBHaXRJZ25vcmUuSWdub3JlO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRJZ25vcmVTdHJhdGVneSBleHBlY3RzIGFuIGFic29sdXRlIGZpbGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmFic29sdXRlUm9vdFBhdGggPSBhYnNvbHV0ZVJvb3RQYXRoO1xuICAgIHRoaXMuaWdub3JlID0gZ2l0SWdub3JlKCkuYWRkKHBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFub3RoZXIgcGF0dGVybi5cbiAgICogQHBhcmFtcyBwYXR0ZXJuIHRoZSBwYXR0ZXJuIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZChwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlnbm9yZS5hZGQocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZShhYnNvbHV0ZUZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0SWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlcklnbm9yZVN0cmF0ZWd5IGV4dGVuZHMgSWdub3JlU3RyYXRlZ3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlUm9vdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBpZ25vcmU6IERvY2tlcklnbm9yZS5JZ25vcmU7XG5cbiAgY29uc3RydWN0b3IoYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVSb290UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY2tlcklnbm9yZVN0cmF0ZWd5IGV4cGVjdHMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWJzb2x1dGVSb290UGF0aCA9IGFic29sdXRlUm9vdFBhdGg7XG4gICAgdGhpcy5pZ25vcmUgPSBkb2NrZXJJZ25vcmUoKS5hZGQocGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW5vdGhlciBwYXR0ZXJuLlxuICAgKiBAcGFyYW1zIHBhdHRlcm4gdGhlIHBhdHRlcm4gdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlLmFkZChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBmaWxlIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzb2x1dGVGaWxlUGF0aCBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gYmUgYXNzZXNzZWQgYWdhaW5zdCB0aGUgcGF0dGVyblxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICovXG4gIHB1YmxpYyBpZ25vcmVzKGFic29sdXRlRmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlRmlsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRG9ja2VySWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CopyOptions, FingerprintOptions } from "./options";
|
|
2
|
+
export * from "./ignore";
|
|
3
|
+
export * from "./options";
|
|
4
|
+
/**
|
|
5
|
+
* File system utilities.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FileSystem {
|
|
8
|
+
/**
|
|
9
|
+
* Copies an entire directory structure.
|
|
10
|
+
* @param srcDir Source directory
|
|
11
|
+
* @param destDir Destination directory
|
|
12
|
+
* @param options options
|
|
13
|
+
* @param rootDir Root directory to calculate exclusions from
|
|
14
|
+
*/
|
|
15
|
+
static copyDirectory(srcDir: string, destDir: string, options?: CopyOptions, rootDir?: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Produces fingerprint based on the contents of a single file or an entire directory tree.
|
|
18
|
+
*
|
|
19
|
+
* Line endings are converted from CRLF to LF.
|
|
20
|
+
*
|
|
21
|
+
* The fingerprint will also include:
|
|
22
|
+
* 1. An extra string if defined in `options.extra`.
|
|
23
|
+
* 2. The symlink follow mode value.
|
|
24
|
+
*
|
|
25
|
+
* @param fileOrDirectory The directory or file to fingerprint
|
|
26
|
+
* @param options Fingerprinting options
|
|
27
|
+
*/
|
|
28
|
+
static fingerprint(fileOrDirectory: string, options?: FingerprintOptions): string;
|
|
29
|
+
/**
|
|
30
|
+
* Checks whether a directory is empty
|
|
31
|
+
*
|
|
32
|
+
* @param dir The directory to check
|
|
33
|
+
*/
|
|
34
|
+
static isEmpty(dir: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The real path of the system temp directory
|
|
37
|
+
*/
|
|
38
|
+
static get tmpdir(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Creates a unique temporary directory in the **system temp directory**.
|
|
41
|
+
*
|
|
42
|
+
* @param prefix A prefix for the directory name. Six random characters
|
|
43
|
+
* will be generated and appended behind this prefix.
|
|
44
|
+
*/
|
|
45
|
+
static mkdtemp(prefix: string): string;
|
|
46
|
+
private static _tmpdir?;
|
|
47
|
+
}
|
package/lib/fs/index.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var _a;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.FileSystem = void 0;
|
|
19
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
20
|
+
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/core/lib/fs/index.ts
|
|
21
|
+
const fs = require("fs");
|
|
22
|
+
const os = require("os");
|
|
23
|
+
const path = require("path");
|
|
24
|
+
const copy_1 = require("./copy");
|
|
25
|
+
const fingerprint_1 = require("./fingerprint");
|
|
26
|
+
__exportStar(require("./ignore"), exports);
|
|
27
|
+
__exportStar(require("./options"), exports);
|
|
28
|
+
/**
|
|
29
|
+
* File system utilities.
|
|
30
|
+
*/
|
|
31
|
+
class FileSystem {
|
|
32
|
+
/**
|
|
33
|
+
* Copies an entire directory structure.
|
|
34
|
+
* @param srcDir Source directory
|
|
35
|
+
* @param destDir Destination directory
|
|
36
|
+
* @param options options
|
|
37
|
+
* @param rootDir Root directory to calculate exclusions from
|
|
38
|
+
*/
|
|
39
|
+
static copyDirectory(srcDir, destDir, options = {}, rootDir) {
|
|
40
|
+
return (0, copy_1.copyDirectory)(srcDir, destDir, options, rootDir);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Produces fingerprint based on the contents of a single file or an entire directory tree.
|
|
44
|
+
*
|
|
45
|
+
* Line endings are converted from CRLF to LF.
|
|
46
|
+
*
|
|
47
|
+
* The fingerprint will also include:
|
|
48
|
+
* 1. An extra string if defined in `options.extra`.
|
|
49
|
+
* 2. The symlink follow mode value.
|
|
50
|
+
*
|
|
51
|
+
* @param fileOrDirectory The directory or file to fingerprint
|
|
52
|
+
* @param options Fingerprinting options
|
|
53
|
+
*/
|
|
54
|
+
static fingerprint(fileOrDirectory, options = {}) {
|
|
55
|
+
return (0, fingerprint_1.fingerprint)(fileOrDirectory, options);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Checks whether a directory is empty
|
|
59
|
+
*
|
|
60
|
+
* @param dir The directory to check
|
|
61
|
+
*/
|
|
62
|
+
static isEmpty(dir) {
|
|
63
|
+
return fs.readdirSync(dir).length === 0;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The real path of the system temp directory
|
|
67
|
+
*/
|
|
68
|
+
static get tmpdir() {
|
|
69
|
+
if (FileSystem._tmpdir) {
|
|
70
|
+
return FileSystem._tmpdir;
|
|
71
|
+
}
|
|
72
|
+
FileSystem._tmpdir = fs.realpathSync(os.tmpdir());
|
|
73
|
+
return FileSystem._tmpdir;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Creates a unique temporary directory in the **system temp directory**.
|
|
77
|
+
*
|
|
78
|
+
* @param prefix A prefix for the directory name. Six random characters
|
|
79
|
+
* will be generated and appended behind this prefix.
|
|
80
|
+
*/
|
|
81
|
+
static mkdtemp(prefix) {
|
|
82
|
+
return fs.mkdtempSync(path.join(FileSystem.tmpdir, prefix));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.FileSystem = FileSystem;
|
|
86
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
87
|
+
FileSystem[_a] = { fqn: "terraconstructs.FileSystem", version: "0.1.1" };
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUV6Rix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBdUM7QUFDdkMsK0NBQTRDO0FBRzVDLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFFMUI7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsTUFBYyxFQUNkLE9BQWUsRUFDZixVQUF1QixFQUFFLEVBQ3pCLE9BQWdCO1FBRWhCLE9BQU8sSUFBQSxvQkFBYSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLGVBQXVCLEVBQ3ZCLFVBQThCLEVBQUU7UUFFaEMsT0FBTyxJQUFBLHlCQUFXLEVBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQy9CLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sS0FBSyxNQUFNO1FBQ3RCLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDO1FBQ0QsVUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWM7UUFDbEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBaEVILGdDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2luZGV4LnRzXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBjb3B5RGlyZWN0b3J5IH0gZnJvbSBcIi4vY29weVwiO1xuaW1wb3J0IHsgZmluZ2VycHJpbnQgfSBmcm9tIFwiLi9maW5nZXJwcmludFwiO1xuaW1wb3J0IHsgQ29weU9wdGlvbnMsIEZpbmdlcnByaW50T3B0aW9ucyB9IGZyb20gXCIuL29wdGlvbnNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vaWdub3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcHRpb25zXCI7XG5cbi8qKlxuICogRmlsZSBzeXN0ZW0gdXRpbGl0aWVzLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDb3BpZXMgYW4gZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXG4gICAqIEBwYXJhbSBzcmNEaXIgU291cmNlIGRpcmVjdG9yeVxuICAgKiBAcGFyYW0gZGVzdERpciBEZXN0aW5hdGlvbiBkaXJlY3RvcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICAgKiBAcGFyYW0gcm9vdERpciBSb290IGRpcmVjdG9yeSB0byBjYWxjdWxhdGUgZXhjbHVzaW9ucyBmcm9tXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvcHlEaXJlY3RvcnkoXG4gICAgc3JjRGlyOiBzdHJpbmcsXG4gICAgZGVzdERpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zID0ge30sXG4gICAgcm9vdERpcj86IHN0cmluZyxcbiAgKSB7XG4gICAgcmV0dXJuIGNvcHlEaXJlY3Rvcnkoc3JjRGlyLCBkZXN0RGlyLCBvcHRpb25zLCByb290RGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlcyBmaW5nZXJwcmludCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZmlsZSBvciBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUuXG4gICAqXG4gICAqIExpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkIGZyb20gQ1JMRiB0byBMRi5cbiAgICpcbiAgICogVGhlIGZpbmdlcnByaW50IHdpbGwgYWxzbyBpbmNsdWRlOlxuICAgKiAxLiBBbiBleHRyYSBzdHJpbmcgaWYgZGVmaW5lZCBpbiBgb3B0aW9ucy5leHRyYWAuXG4gICAqIDIuIFRoZSBzeW1saW5rIGZvbGxvdyBtb2RlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZU9yRGlyZWN0b3J5IFRoZSBkaXJlY3Rvcnkgb3IgZmlsZSB0byBmaW5nZXJwcmludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBGaW5nZXJwcmludGluZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbmdlcnByaW50KFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEZpbmdlcnByaW50T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICByZXR1cm4gZmluZ2VycHJpbnQoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgKlxuICAgKiBAcGFyYW0gZGlyIFRoZSBkaXJlY3RvcnkgdG8gY2hlY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eShkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhkaXIpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhbCBwYXRoIG9mIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHRtcGRpcigpOiBzdHJpbmcge1xuICAgIGlmIChGaWxlU3lzdGVtLl90bXBkaXIpIHtcbiAgICAgIHJldHVybiBGaWxlU3lzdGVtLl90bXBkaXI7XG4gICAgfVxuICAgIEZpbGVTeXN0ZW0uX3RtcGRpciA9IGZzLnJlYWxwYXRoU3luYyhvcy50bXBkaXIoKSk7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW0uX3RtcGRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhlICoqc3lzdGVtIHRlbXAgZGlyZWN0b3J5KiouXG4gICAqXG4gICAqIEBwYXJhbSBwcmVmaXggQSBwcmVmaXggZm9yIHRoZSBkaXJlY3RvcnkgbmFtZS4gU2l4IHJhbmRvbSBjaGFyYWN0ZXJzXG4gICAqIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBhcHBlbmRlZCBiZWhpbmQgdGhpcyBwcmVmaXguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1rZHRlbXAocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oRmlsZVN5c3RlbS50bXBkaXIsIHByZWZpeCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3RtcGRpcj86IHN0cmluZztcbn1cbiJdfQ==
|