terraconstructs 0.0.25 → 0.1.0
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 +83665 -54911
- package/.mise.toml +1 -1
- package/.nvmrc +1 -1
- package/LICENSE +202 -674
- 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 +1 -0
- package/lib/aws/compute/function-alias.js +8 -2
- package/lib/aws/compute/function-base.d.ts +15 -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 +34 -4
- package/lib/aws/compute/function.js +91 -17
- 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,99 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { BundlingOptions } from "./types";
|
|
3
|
+
import { Code } from "../code";
|
|
4
|
+
import { FunctionOptions, LambdaFunction } from "../function";
|
|
5
|
+
import { Runtime } from "../runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Properties for a NodejsFunction
|
|
8
|
+
*/
|
|
9
|
+
export interface NodejsFunctionProps extends FunctionOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Path to the entry file (JavaScript or TypeScript).
|
|
12
|
+
*
|
|
13
|
+
* @default - Derived from the name of the defining file and the construct's id.
|
|
14
|
+
* If the `NodejsFunction` is defined in `stack.ts` with `my-handler` as id
|
|
15
|
+
* (`new NodejsFunction(this, 'my-handler')`), the construct will look at `stack.my-handler.ts`
|
|
16
|
+
* and `stack.my-handler.js`.
|
|
17
|
+
*/
|
|
18
|
+
readonly entry?: string;
|
|
19
|
+
/**
|
|
20
|
+
* The name of the exported handler in the entry file.
|
|
21
|
+
*
|
|
22
|
+
* * If the `code` property is supplied, then you must include the `handler` property. The handler should be the name of the file
|
|
23
|
+
* that contains the exported handler and the function that should be called when the AWS Lambda is invoked. For example, if
|
|
24
|
+
* you had a file called `myLambda.js` and the function to be invoked was `myHandler`, then you should input `handler` property as `myLambda.myHandler`.
|
|
25
|
+
*
|
|
26
|
+
* * If the `code` property is not supplied and the handler input does not contain a `.`, then the handler is prefixed with `index.` (index period). Otherwise,
|
|
27
|
+
* the handler property is not modified.
|
|
28
|
+
*
|
|
29
|
+
* @default handler
|
|
30
|
+
*/
|
|
31
|
+
readonly handler?: string;
|
|
32
|
+
/**
|
|
33
|
+
* The runtime environment. Only runtimes of the Node.js family are
|
|
34
|
+
* supported.
|
|
35
|
+
*
|
|
36
|
+
* @default `Runtime.NODEJS_LATEST`
|
|
37
|
+
*/
|
|
38
|
+
readonly runtime?: Runtime;
|
|
39
|
+
/**
|
|
40
|
+
* The `AWS_NODEJS_CONNECTION_REUSE_ENABLED` environment variable does not exist in the AWS SDK for JavaScript v3.
|
|
41
|
+
*
|
|
42
|
+
* This prop will be deprecated when the Lambda Node16 runtime is deprecated on June 12, 2024.
|
|
43
|
+
* See https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtime-support-policy
|
|
44
|
+
*
|
|
45
|
+
* Info for Node 16 runtimes / SDK v2 users:
|
|
46
|
+
*
|
|
47
|
+
* Whether to automatically reuse TCP connections when working with the AWS
|
|
48
|
+
* SDK for JavaScript v2.
|
|
49
|
+
*
|
|
50
|
+
* This sets the `AWS_NODEJS_CONNECTION_REUSE_ENABLED` environment variable
|
|
51
|
+
* to `1`.
|
|
52
|
+
*
|
|
53
|
+
* @see https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html
|
|
54
|
+
*
|
|
55
|
+
* @default - false (obsolete) for runtimes >= Node 18, true for runtimes <= Node 16.
|
|
56
|
+
*/
|
|
57
|
+
readonly awsSdkConnectionReuse?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* The path to the dependencies lock file (`yarn.lock`, `pnpm-lock.yaml`, `bun.lockb` or `package-lock.json`).
|
|
60
|
+
*
|
|
61
|
+
* This will be used as the source for the volume mounted in the Docker
|
|
62
|
+
* container.
|
|
63
|
+
*
|
|
64
|
+
* Modules specified in `nodeModules` will be installed using the right
|
|
65
|
+
* installer (`yarn`, `pnpm`, `bun` or `npm`) along with this lock file.
|
|
66
|
+
*
|
|
67
|
+
* @default - the path is found by walking up parent directories searching for
|
|
68
|
+
* a `yarn.lock`, `pnpm-lock.yaml`, `bun.lockb` or `package-lock.json` file
|
|
69
|
+
*/
|
|
70
|
+
readonly depsLockFilePath?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Bundling options
|
|
73
|
+
*
|
|
74
|
+
* @default - use default bundling options: no minify, no sourcemap, all
|
|
75
|
+
* modules are bundled.
|
|
76
|
+
*/
|
|
77
|
+
readonly bundling?: BundlingOptions;
|
|
78
|
+
/**
|
|
79
|
+
* The path to the directory containing project config files (`package.json` or `tsconfig.json`)
|
|
80
|
+
*
|
|
81
|
+
* @default - the directory containing the `depsLockFilePath`
|
|
82
|
+
*/
|
|
83
|
+
readonly projectRoot?: string;
|
|
84
|
+
/**
|
|
85
|
+
* The code that will be deployed to the Lambda Handler. If included, then properties related to
|
|
86
|
+
* bundling of the code are ignored.
|
|
87
|
+
*
|
|
88
|
+
* * If the `code` field is specified, then you must include the `handler` property.
|
|
89
|
+
*
|
|
90
|
+
* @default - the code is bundled by esbuild
|
|
91
|
+
*/
|
|
92
|
+
readonly code?: Code;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* A Node.js Lambda function bundled using esbuild
|
|
96
|
+
*/
|
|
97
|
+
export declare class NodejsFunction extends LambdaFunction {
|
|
98
|
+
constructor(scope: Construct, id: string, props?: NodejsFunctionProps);
|
|
99
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NodejsFunction = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const bundling_1 = require("./bundling");
|
|
10
|
+
const package_manager_1 = require("./package-manager");
|
|
11
|
+
const util_1 = require("./util");
|
|
12
|
+
const architecture_1 = require("../architecture");
|
|
13
|
+
const function_1 = require("../function");
|
|
14
|
+
const runtime_1 = require("../runtime");
|
|
15
|
+
/**
|
|
16
|
+
* A Node.js Lambda function bundled using esbuild
|
|
17
|
+
*/
|
|
18
|
+
class NodejsFunction extends function_1.LambdaFunction {
|
|
19
|
+
constructor(scope, id, props = {}) {
|
|
20
|
+
if (props.runtime && props.runtime.family !== runtime_1.RuntimeFamily.NODEJS) {
|
|
21
|
+
throw new Error("Only `NODEJS` runtimes are supported.");
|
|
22
|
+
}
|
|
23
|
+
const runtime = getRuntime(props);
|
|
24
|
+
if (props.code !== undefined) {
|
|
25
|
+
if (props.handler === undefined) {
|
|
26
|
+
throw new Error("Cannot determine handler when `code` property is specified. Use `handler` property to specify a handler.\n" +
|
|
27
|
+
"The handler should be the name of the exported function to be invoked and the file containing that function.\n" +
|
|
28
|
+
"For example, handler should be specified in the form `myFile.myFunction`");
|
|
29
|
+
}
|
|
30
|
+
super(scope, id, {
|
|
31
|
+
...props,
|
|
32
|
+
runtime,
|
|
33
|
+
code: props.code,
|
|
34
|
+
handler: props.handler,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Entry and defaults
|
|
39
|
+
const entry = path.resolve(findEntry(id, props.entry));
|
|
40
|
+
const architecture = props.architecture ?? architecture_1.Architecture.X86_64;
|
|
41
|
+
const depsLockFilePath = findLockFile(props.depsLockFilePath);
|
|
42
|
+
const projectRoot = props.projectRoot ?? path.dirname(depsLockFilePath);
|
|
43
|
+
const handler = props.handler ?? "handler";
|
|
44
|
+
super(scope, id, {
|
|
45
|
+
...props,
|
|
46
|
+
runtime,
|
|
47
|
+
code: bundling_1.Bundling.bundle(scope, {
|
|
48
|
+
...(props.bundling ?? {}),
|
|
49
|
+
entry,
|
|
50
|
+
runtime,
|
|
51
|
+
architecture,
|
|
52
|
+
depsLockFilePath,
|
|
53
|
+
projectRoot,
|
|
54
|
+
}),
|
|
55
|
+
handler: handler.indexOf(".") !== -1 ? `${handler}` : `index.${handler}`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Enable connection reuse for aws-sdk v2, do not set for sdk v3
|
|
59
|
+
if ((0, util_1.isSdkV2Runtime)(runtime)) {
|
|
60
|
+
if (props.awsSdkConnectionReuse ?? true) {
|
|
61
|
+
this.addEnvironment("AWS_NODEJS_CONNECTION_REUSE_ENABLED", "1");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (props.awsSdkConnectionReuse) {
|
|
66
|
+
// "aws-cdk-lib/aws-lambda-nodejs:unusedSdkEvironmentVariable",
|
|
67
|
+
cdktf_1.Annotations.of(scope).addWarning("The AWS_NODEJS_CONNECTION_REUSE_ENABLED environment variable does not exist in SDK v3. You have explicitly set `awsSdkConnectionReuse`; please make sure this is intentional.");
|
|
68
|
+
this.addEnvironment("AWS_NODEJS_CONNECTION_REUSE_ENABLED", "1");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.NodejsFunction = NodejsFunction;
|
|
74
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
75
|
+
NodejsFunction[_a] = { fqn: "terraconstructs.aws.compute.NodejsFunction", version: "0.1.0" };
|
|
76
|
+
/**
|
|
77
|
+
* default to NODEJS_LATEST.
|
|
78
|
+
*/
|
|
79
|
+
function getRuntime(props) {
|
|
80
|
+
return props.runtime ?? runtime_1.Runtime.NODEJS_LATEST;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Checks given lock file or searches for a lock file
|
|
84
|
+
*/
|
|
85
|
+
function findLockFile(depsLockFilePath) {
|
|
86
|
+
if (depsLockFilePath) {
|
|
87
|
+
if (!fs.existsSync(depsLockFilePath)) {
|
|
88
|
+
throw new Error(`Lock file at ${depsLockFilePath} doesn't exist`);
|
|
89
|
+
}
|
|
90
|
+
if (!fs.statSync(depsLockFilePath).isFile()) {
|
|
91
|
+
throw new Error("`depsLockFilePath` should point to a file");
|
|
92
|
+
}
|
|
93
|
+
return path.resolve(depsLockFilePath);
|
|
94
|
+
}
|
|
95
|
+
const lockFiles = (0, util_1.findUpMultiple)([
|
|
96
|
+
package_manager_1.LockFile.PNPM,
|
|
97
|
+
package_manager_1.LockFile.YARN,
|
|
98
|
+
package_manager_1.LockFile.BUN,
|
|
99
|
+
package_manager_1.LockFile.NPM,
|
|
100
|
+
]);
|
|
101
|
+
if (lockFiles.length === 0) {
|
|
102
|
+
throw new Error("Cannot find a package lock file (`pnpm-lock.yaml`, `yarn.lock`, `bun.lockb` or `package-lock.json`). Please specify it with `depsLockFilePath`.");
|
|
103
|
+
}
|
|
104
|
+
if (lockFiles.length > 1) {
|
|
105
|
+
throw new Error(`Multiple package lock files found: ${lockFiles.join(", ")}. Please specify the desired one with \`depsLockFilePath\`.`);
|
|
106
|
+
}
|
|
107
|
+
return lockFiles[0];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Searches for an entry file. Preference order is the following:
|
|
111
|
+
* 1. Given entry file
|
|
112
|
+
* 2. A .ts file named as the defining file with id as suffix (defining-file.id.ts)
|
|
113
|
+
* 3. A .js file name as the defining file with id as suffix (defining-file.id.js)
|
|
114
|
+
* 4. A .mjs file name as the defining file with id as suffix (defining-file.id.mjs)
|
|
115
|
+
* 5. A .mts file name as the defining file with id as suffix (defining-file.id.mts)
|
|
116
|
+
* 6. A .cts file name as the defining file with id as suffix (defining-file.id.cts)
|
|
117
|
+
* 7. A .cjs file name as the defining file with id as suffix (defining-file.id.cjs)
|
|
118
|
+
*/
|
|
119
|
+
function findEntry(id, entry) {
|
|
120
|
+
if (entry) {
|
|
121
|
+
if (!/\.(jsx?|tsx?|cjs|cts|mjs|mts)$/.test(entry)) {
|
|
122
|
+
throw new Error("Only JavaScript or TypeScript entry files are supported.");
|
|
123
|
+
}
|
|
124
|
+
if (!fs.existsSync(entry)) {
|
|
125
|
+
throw new Error(`Cannot find entry file at ${entry}`);
|
|
126
|
+
}
|
|
127
|
+
return entry;
|
|
128
|
+
}
|
|
129
|
+
const definingFile = findDefiningFile();
|
|
130
|
+
const extname = path.extname(definingFile);
|
|
131
|
+
const tsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.ts`);
|
|
132
|
+
if (fs.existsSync(tsHandlerFile)) {
|
|
133
|
+
return tsHandlerFile;
|
|
134
|
+
}
|
|
135
|
+
const jsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.js`);
|
|
136
|
+
if (fs.existsSync(jsHandlerFile)) {
|
|
137
|
+
return jsHandlerFile;
|
|
138
|
+
}
|
|
139
|
+
const mjsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.mjs`);
|
|
140
|
+
if (fs.existsSync(mjsHandlerFile)) {
|
|
141
|
+
return mjsHandlerFile;
|
|
142
|
+
}
|
|
143
|
+
const mtsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.mts`);
|
|
144
|
+
if (fs.existsSync(mtsHandlerFile)) {
|
|
145
|
+
return mtsHandlerFile;
|
|
146
|
+
}
|
|
147
|
+
const ctsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.cts`);
|
|
148
|
+
if (fs.existsSync(ctsHandlerFile)) {
|
|
149
|
+
return ctsHandlerFile;
|
|
150
|
+
}
|
|
151
|
+
const cjsHandlerFile = definingFile.replace(new RegExp(`${extname}$`), `.${id}.cjs`);
|
|
152
|
+
if (fs.existsSync(cjsHandlerFile)) {
|
|
153
|
+
return cjsHandlerFile;
|
|
154
|
+
}
|
|
155
|
+
throw new Error(`Cannot find handler file ${tsHandlerFile}, ${jsHandlerFile}, ${mjsHandlerFile}, ${mtsHandlerFile}, ${ctsHandlerFile} or ${cjsHandlerFile}`);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Finds the name of the file where the `NodejsFunction` is defined
|
|
159
|
+
*/
|
|
160
|
+
function findDefiningFile() {
|
|
161
|
+
let definingIndex;
|
|
162
|
+
const sites = (0, util_1.callsites)();
|
|
163
|
+
for (const [index, site] of sites.entries()) {
|
|
164
|
+
if (site.getFunctionName() === "NodejsFunction") {
|
|
165
|
+
// The next site is the site where the NodejsFunction was created
|
|
166
|
+
definingIndex = index + 1;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (!definingIndex || !sites[definingIndex]) {
|
|
171
|
+
throw new Error("Cannot find defining file.");
|
|
172
|
+
}
|
|
173
|
+
return sites[definingIndex].getFileName();
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24tbm9kZWpzL2Z1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBb0M7QUFFcEMseUNBQXNDO0FBQ3RDLHVEQUE2QztBQUU3QyxpQ0FBbUU7QUFDbkUsa0RBQStDO0FBRS9DLDBDQUE4RDtBQUM5RCx3Q0FBb0Q7QUFrR3BEOztHQUVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEseUJBQWM7SUFDaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUE2QixFQUFFO1FBQ3ZFLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyx1QkFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEdBQTRHO29CQUMxRyxnSEFBZ0g7b0JBQ2hILDBFQUEwRSxDQUM3RSxDQUFDO1lBQ0osQ0FBQztZQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNmLEdBQUcsS0FBSztnQkFDUixPQUFPO2dCQUNQLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04scUJBQXFCO1lBQ3JCLE1BQU0sS0FBSyxHQUFH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NEIsYUFBYSxLQUFLLGFBQWEsS0FBSyxjQUFjLEtBQUssY0FBYyxLQUFLLGNBQWMsT0FBTyxjQUFjLEVBQUUsQ0FDNUksQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCO0lBQ3ZCLElBQUksYUFBaUMsQ0FBQztJQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFTLEdBQUUsQ0FBQztJQUMxQixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUNoRCxpRUFBaUU7WUFDakUsYUFBYSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBCdW5kbGluZyB9IGZyb20gXCIuL2J1bmRsaW5nXCI7XG5pbXBvcnQgeyBMb2NrRmlsZSB9IGZyb20gXCIuL3BhY2thZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHsgQnVuZGxpbmdPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGNhbGxzaXRlcywgZmluZFVwTXVsdGlwbGUsIGlzU2RrVjJSdW50aW1lIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlIH0gZnJvbSBcIi4uL2FyY2hpdGVjdHVyZVwiO1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gXCIuLi9jb2RlXCI7XG5pbXBvcnQgeyBGdW5jdGlvbk9wdGlvbnMsIExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcIi4uL2Z1bmN0aW9uXCI7XG5pbXBvcnQgeyBSdW50aW1lLCBSdW50aW1lRmFtaWx5IH0gZnJvbSBcIi4uL3J1bnRpbWVcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIE5vZGVqc0Z1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25Qcm9wcyBleHRlbmRzIEZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBlbnRyeSBmaWxlIChKYXZhU2NyaXB0IG9yIFR5cGVTY3JpcHQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlcml2ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgZGVmaW5pbmcgZmlsZSBhbmQgdGhlIGNvbnN0cnVjdCdzIGlkLlxuICAgKiBJZiB0aGUgYE5vZGVqc0Z1bmN0aW9uYCBpcyBkZWZpbmVkIGluIGBzdGFjay50c2Agd2l0aCBgbXktaGFuZGxlcmAgYXMgaWRcbiAgICogKGBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgJ215LWhhbmRsZXInKWApLCB0aGUgY29uc3RydWN0IHdpbGwgbG9vayBhdCBgc3RhY2subXktaGFuZGxlci50c2BcbiAgICogYW5kIGBzdGFjay5teS1oYW5kbGVyLmpzYC5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXhwb3J0ZWQgaGFuZGxlciBpbiB0aGUgZW50cnkgZmlsZS5cbiAgICpcbiAgICogKiBJZiB0aGUgYGNvZGVgIHByb3BlcnR5IGlzIHN1cHBsaWVkLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGBoYW5kbGVyYCBwcm9wZXJ0eS4gVGhlIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlXG4gICAqIHRoYXQgY29udGFpbnMgdGhlIGV4cG9ydGVkIGhhbmRsZXIgYW5kIHRoZSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgQVdTIExhbWJkYSBpcyBpbnZva2VkLiBGb3IgZXhhbXBsZSwgaWZcbiAgICogeW91IGhhZCBhIGZpbGUgY2FsbGVkIGBteUxhbWJkYS5qc2AgYW5kIHRoZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdhcyBgbXlIYW5kbGVyYCwgdGhlbiB5b3Ugc2hvdWxkIGlucHV0IGBoYW5kbGVyYCBwcm9wZXJ0eSBhcyBgbXlMYW1iZGEubXlIYW5kbGVyYC5cbiAgICpcbiAgICogKiBJZiB0aGUgYGNvZGVgIHByb3BlcnR5IGlzIG5vdCBzdXBwbGllZCBhbmQgdGhlIGhhbmRsZXIgaW5wdXQgZG9lcyBub3QgY29udGFpbiBhIGAuYCwgdGhlbiB0aGUgaGFuZGxlciBpcyBwcmVmaXhlZCB3aXRoIGBpbmRleC5gIChpbmRleCBwZXJpb2QpLiBPdGhlcndpc2UsXG4gICAqIHRoZSBoYW5kbGVyIHByb3BlcnR5IGlzIG5vdCBtb2RpZmllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgaGFuZGxlclxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuIE9ubHkgcnVudGltZXMgb2YgdGhlIE5vZGUuanMgZmFtaWx5IGFyZVxuICAgKiBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBSdW50aW1lLk5PREVKU19MQVRFU1RgXG4gICAqL1xuICByZWFkb25seSBydW50aW1lPzogUnVudGltZTtcblxuICAvKipcbiAgICogVGhlIGBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRGAgZW52aXJvbm1lbnQgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIEFXUyBTREsgZm9yIEphdmFTY3JpcHQgdjMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCB3aWxsIGJlIGRlcHJlY2F0ZWQgd2hlbiB0aGUgTGFtYmRhIE5vZGUxNiBydW50aW1lIGlzIGRlcHJlY2F0ZWQgb24gSnVuZSAxMiwgMjAyNC5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2xhbWJkYS1ydW50aW1lcy5odG1sI3J1bnRpbWUtc3VwcG9ydC1wb2xpY3lcbiAgICpcbiAgICogSW5mbyBmb3IgTm9kZSAxNiBydW50aW1lcyAvIFNESyB2MiB1c2VyczpcbiAgICpcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHJldXNlIFRDUCBjb25uZWN0aW9ucyB3aGVuIHdvcmtpbmcgd2l0aCB0aGUgQVdTXG4gICAqIFNESyBmb3IgSmF2YVNjcmlwdCB2Mi5cbiAgICpcbiAgICogVGhpcyBzZXRzIHRoZSBgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRURgIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAqIHRvIGAxYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2RrLWZvci1qYXZhc2NyaXB0L3YzL2RldmVsb3Blci1ndWlkZS9ub2RlLXJldXNpbmctY29ubmVjdGlvbnMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlIChvYnNvbGV0ZSkgZm9yIHJ1bnRpbWVzID49IE5vZGUgMTgsIHRydWUgZm9yIHJ1bnRpbWVzIDw9IE5vZGUgMTYuXG4gICAqL1xuICByZWFkb25seSBhd3NTZGtDb25uZWN0aW9uUmV1c2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgZGVwZW5kZW5jaWVzIGxvY2sgZmlsZSAoYHlhcm4ubG9ja2AsIGBwbnBtLWxvY2sueWFtbGAsIGBidW4ubG9ja2JgIG9yIGBwYWNrYWdlLWxvY2suanNvbmApLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgdXNlZCBhcyB0aGUgc291cmNlIGZvciB0aGUgdm9sdW1lIG1vdW50ZWQgaW4gdGhlIERvY2tlclxuICAgKiBjb250YWluZXIuXG4gICAqXG4gICAqIE1vZHVsZXMgc3BlY2lmaWVkIGluIGBub2RlTW9kdWxlc2Agd2lsbCBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlIHJpZ2h0XG4gICAqIGluc3RhbGxlciAoYHlhcm5gLCBgcG5wbWAsIGBidW5gIG9yIGBucG1gKSBhbG9uZyB3aXRoIHRoaXMgbG9jayBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwYXRoIGlzIGZvdW5kIGJ5IHdhbGtpbmcgdXAgcGFyZW50IGRpcmVjdG9yaWVzIHNlYXJjaGluZyBmb3JcbiAgICogICBhIGB5YXJuLmxvY2tgLCBgcG5wbS1sb2NrLnlhbWxgLCBgYnVuLmxvY2tiYCBvciBgcGFja2FnZS1sb2NrLmpzb25gIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGRlcHNMb2NrRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1bmRsaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgZGVmYXVsdCBidW5kbGluZyBvcHRpb25zOiBubyBtaW5pZnksIG5vIHNvdXJjZW1hcCwgYWxsXG4gICAqICAgbW9kdWxlcyBhcmUgYnVuZGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nPzogQnVuZGxpbmdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcHJvamVjdCBjb25maWcgZmlsZXMgKGBwYWNrYWdlLmpzb25gIG9yIGB0c2NvbmZpZy5qc29uYClcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGBkZXBzTG9ja0ZpbGVQYXRoYFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2RlIHRoYXQgd2lsbCBiZSBkZXBsb3llZCB0byB0aGUgTGFtYmRhIEhhbmRsZXIuIElmIGluY2x1ZGVkLCB0aGVuIHByb3BlcnRpZXMgcmVsYXRlZCB0b1xuICAgKiBidW5kbGluZyBvZiB0aGUgY29kZSBhcmUgaWdub3JlZC5cbiAgICpcbiAgICogKiBJZiB0aGUgYGNvZGVgIGZpZWxkIGlzIHNwZWNpZmllZCwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHRoZSBgaGFuZGxlcmAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGNvZGUgaXMgYnVuZGxlZCBieSBlc2J1aWxkXG4gICAqL1xuICByZWFkb25seSBjb2RlPzogQ29kZTtcbn1cblxuLyoqXG4gKiBBIE5vZGUuanMgTGFtYmRhIGZ1bmN0aW9uIGJ1bmRsZWQgdXNpbmcgZXNidWlsZFxuICovXG5leHBvcnQgY2xhc3MgTm9kZWpzRnVuY3Rpb24gZXh0ZW5kcyBMYW1iZGFGdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOb2RlanNGdW5jdGlvblByb3BzID0ge30pIHtcbiAgICBpZiAocHJvcHMucnVudGltZSAmJiBwcm9wcy5ydW50aW1lLmZhbWlseSAhPT0gUnVudGltZUZhbWlseS5OT0RFSlMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgYE5PREVKU2AgcnVudGltZXMgYXJlIHN1cHBvcnRlZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZSA9IGdldFJ1bnRpbWUocHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHByb3BzLmhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgZGV0ZXJtaW5lIGhhbmRsZXIgd2hlbiBgY29kZWAgcHJvcGVydHkgaXMgc3BlY2lmaWVkLiBVc2UgYGhhbmRsZXJgIHByb3BlcnR5IHRvIHNwZWNpZnkgYSBoYW5kbGVyLlxcblwiICtcbiAgICAgICAgICAgIFwiVGhlIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFuZCB0aGUgZmlsZSBjb250YWluaW5nIHRoYXQgZnVuY3Rpb24uXFxuXCIgK1xuICAgICAgICAgICAgXCJGb3IgZXhhbXBsZSwgaGFuZGxlciBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIGBteUZpbGUubXlGdW5jdGlvbmBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBydW50aW1lLFxuICAgICAgICBjb2RlOiBwcm9wcy5jb2RlLFxuICAgICAgICBoYW5kbGVyOiBwcm9wcy5oYW5kbGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVudHJ5IGFuZCBkZWZhdWx0c1xuICAgICAgY29uc3QgZW50cnkgPSBwYXRoLnJlc29sdmUoZmluZEVudHJ5KGlkLCBwcm9wcy5lbnRyeSkpO1xuICAgICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gcHJvcHMuYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5YODZfNjQ7XG4gICAgICBjb25zdCBkZXBzTG9ja0ZpbGVQYXRoID0gZmluZExvY2tGaWxlKHByb3BzLmRlcHNMb2NrRmlsZVBhdGgpO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9wcy5wcm9qZWN0Um9vdCA/PyBwYXRoLmRpcm5hbWUoZGVwc0xvY2tGaWxlUGF0aCk7XG4gICAgICBjb25zdCBoYW5kbGVyID0gcHJvcHMuaGFuZGxlciA/PyBcImhhbmRsZXJcIjtcblxuICAgICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBydW50aW1lLFxuICAgICAgICBjb2RlOiBCdW5kbGluZy5idW5kbGUoc2NvcGUsIHtcbiAgICAgICAgICAuLi4ocHJvcHMuYnVuZGxpbmcgPz8ge30pLFxuICAgICAgICAgIGVudHJ5LFxuICAgICAgICAgIHJ1bnRpbWUsXG4gICAgICAgICAgYXJjaGl0ZWN0dXJlLFxuICAgICAgICAgIGRlcHNMb2NrRmlsZVBhdGgsXG4gICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgIH0pLFxuICAgICAgICBoYW5kbGVyOlxuICAgICAgICAgIGhhbmRsZXIuaW5kZXhPZihcIi5cIikgIT09IC0xID8gYCR7aGFuZGxlcn1gIDogYGluZGV4LiR7aGFuZGxlcn1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRW5hYmxlIGNvbm5lY3Rpb24gcmV1c2UgZm9yIGF3cy1zZGsgdjIsIGRvIG5vdCBzZXQgZm9yIHNkayB2M1xuICAgIGlmIChpc1Nka1YyUnVudGltZShydW50aW1lKSkge1xuICAgICAgaWYgKHByb3BzLmF3c1Nka0Nvbm5lY3Rpb25SZXVzZSA/PyB0cnVlKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXCJBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRFwiLCBcIjFcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy5hd3NTZGtDb25uZWN0aW9uUmV1c2UpIHtcbiAgICAgICAgLy8gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqczp1bnVzZWRTZGtFdmlyb25tZW50VmFyaWFibGVcIixcbiAgICAgICAgQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZFdhcm5pbmcoXG4gICAgICAgICAgXCJUaGUgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQgZW52aXJvbm1lbnQgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QgaW4gU0RLIHYzLiBZb3UgaGF2ZSBleHBsaWNpdGx5IHNldCBgYXdzU2RrQ29ubmVjdGlvblJldXNlYDsgcGxlYXNlIG1ha2Ugc3VyZSB0aGlzIGlzIGludGVudGlvbmFsLlwiLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRURcIiwgXCIxXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGRlZmF1bHQgdG8gTk9ERUpTX0xBVEVTVC5cbiAqL1xuZnVuY3Rpb24gZ2V0UnVudGltZShwcm9wczogTm9kZWpzRnVuY3Rpb25Qcm9wcyk6IFJ1bnRpbWUge1xuICByZXR1cm4gcHJvcHMucnVudGltZSA/PyBSdW50aW1lLk5PREVKU19MQVRFU1Q7XG59XG5cbi8qKlxuICogQ2hlY2tzIGdpdmVuIGxvY2sgZmlsZSBvciBzZWFyY2hlcyBmb3IgYSBsb2NrIGZpbGVcbiAqL1xuZnVuY3Rpb24gZmluZExvY2tGaWxlKGRlcHNMb2NrRmlsZVBhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZGVwc0xvY2tGaWxlUGF0aCkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkZXBzTG9ja0ZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NrIGZpbGUgYXQgJHtkZXBzTG9ja0ZpbGVQYXRofSBkb2Vzbid0IGV4aXN0YCk7XG4gICAgfVxuXG4gICAgaWYgKCFmcy5zdGF0U3luYyhkZXBzTG9ja0ZpbGVQYXRoKS5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGRlcHNMb2NrRmlsZVBhdGhgIHNob3VsZCBwb2ludCB0byBhIGZpbGVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShkZXBzTG9ja0ZpbGVQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGxvY2tGaWxlcyA9IGZpbmRVcE11bHRpcGxlKFtcbiAgICBMb2NrRmlsZS5QTlBNLFxuICAgIExvY2tGaWxlLllBUk4sXG4gICAgTG9ja0ZpbGUuQlVOLFxuICAgIExvY2tGaWxlLk5QTSxcbiAgXSk7XG5cbiAgaWYgKGxvY2tGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkNhbm5vdCBmaW5kIGEgcGFja2FnZSBsb2NrIGZpbGUgKGBwbnBtLWxvY2sueWFtbGAsIGB5YXJuLmxvY2tgLCBgYnVuLmxvY2tiYCBvciBgcGFja2FnZS1sb2NrLmpzb25gKS4gUGxlYXNlIHNwZWNpZnkgaXQgd2l0aCBgZGVwc0xvY2tGaWxlUGF0aGAuXCIsXG4gICAgKTtcbiAgfVxuICBpZiAobG9ja0ZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTXVsdGlwbGUgcGFja2FnZSBsb2NrIGZpbGVzIGZvdW5kOiAke2xvY2tGaWxlcy5qb2luKFwiLCBcIil9LiBQbGVhc2Ugc3BlY2lmeSB0aGUgZGVzaXJlZCBvbmUgd2l0aCBcXGBkZXBzTG9ja0ZpbGVQYXRoXFxgLmAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBsb2NrRmlsZXNbMF07XG59XG5cbi8qKlxuICogU2VhcmNoZXMgZm9yIGFuIGVudHJ5IGZpbGUuIFByZWZlcmVuY2Ugb3JkZXIgaXMgdGhlIGZvbGxvd2luZzpcbiAqIDEuIEdpdmVuIGVudHJ5IGZpbGVcbiAqIDIuIEEgLnRzIGZpbGUgbmFtZWQgYXMgdGhlIGRlZmluaW5nIGZpbGUgd2l0aCBpZCBhcyBzdWZmaXggKGRlZmluaW5nLWZpbGUuaWQudHMpXG4gKiAzLiBBIC5qcyBmaWxlIG5hbWUgYXMgdGhlIGRlZmluaW5nIGZpbGUgd2l0aCBpZCBhcyBzdWZmaXggKGRlZmluaW5nLWZpbGUuaWQuanMpXG4gKiA0LiBBIC5tanMgZmlsZSBuYW1lIGFzIHRoZSBkZWZpbmluZyBmaWxlIHdpdGggaWQgYXMgc3VmZml4IChkZWZpbmluZy1maWxlLmlkLm1qcylcbiAqIDUuIEEgLm10cyBmaWxlIG5hbWUgYXMgdGhlIGRlZmluaW5nIGZpbGUgd2l0aCBpZCBhcyBzdWZmaXggKGRlZmluaW5nLWZpbGUuaWQubXRzKVxuICogNi4gQSAuY3RzIGZpbGUgbmFtZSBhcyB0aGUgZGVmaW5pbmcgZmlsZSB3aXRoIGlkIGFzIHN1ZmZpeCAoZGVmaW5pbmctZmlsZS5pZC5jdHMpXG4gKiA3LiBBIC5janMgZmlsZSBuYW1lIGFzIHRoZSBkZWZpbmluZyBmaWxlIHdpdGggaWQgYXMgc3VmZml4IChkZWZpbmluZy1maWxlLmlkLmNqcylcbiAqL1xuZnVuY3Rpb24gZmluZEVudHJ5KGlkOiBzdHJpbmcsIGVudHJ5Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVudHJ5KSB7XG4gICAgaWYgKCEvXFwuKGpzeD98dHN4P3xjanN8Y3RzfG1qc3xtdHMpJC8udGVzdChlbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPbmx5IEphdmFTY3JpcHQgb3IgVHlwZVNjcmlwdCBlbnRyeSBmaWxlcyBhcmUgc3VwcG9ydGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGVudHJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBlbnRyeSBmaWxlIGF0ICR7ZW50cnl9YCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaW5nRmlsZSA9IGZpbmREZWZpbmluZ0ZpbGUoKTtcbiAgY29uc3QgZXh0bmFtZSA9IHBhdGguZXh0bmFtZShkZWZpbmluZ0ZpbGUpO1xuXG4gIGNvbnN0IHRzSGFuZGxlckZpbGUgPSBkZWZpbmluZ0ZpbGUucmVwbGFjZShcbiAgICBuZXcgUmVnRXhwKGAke2V4dG5hbWV9JGApLFxuICAgIGAuJHtpZH0udHNgLFxuICApO1xuICBpZiAoZnMuZXhpc3RzU3luYyh0c0hhbmRsZXJGaWxlKSkge1xuICAgIHJldHVybiB0c0hhbmRsZXJGaWxlO1xuICB9XG5cbiAgY29uc3QganNIYW5kbGVyRmlsZSA9IGRlZmluaW5nRmlsZS5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYCR7ZXh0bmFtZX0kYCksXG4gICAgYC4ke2lkfS5qc2AsXG4gICk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGpzSGFuZGxlckZpbGUpKSB7XG4gICAgcmV0dXJuIGpzSGFuZGxlckZpbGU7XG4gIH1cblxuICBjb25zdCBtanNIYW5kbGVyRmlsZSA9IGRlZmluaW5nRmlsZS5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYCR7ZXh0bmFtZX0kYCksXG4gICAgYC4ke2lkfS5tanNgLFxuICApO1xuICBpZiAoZnMuZXhpc3RzU3luYyhtanNIYW5kbGVyRmlsZSkpIHtcbiAgICByZXR1cm4gbWpzSGFuZGxlckZpbGU7XG4gIH1cblxuICBjb25zdCBtdHNIYW5kbGVyRmlsZSA9IGRlZmluaW5nRmlsZS5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYCR7ZXh0bmFtZX0kYCksXG4gICAgYC4ke2lkfS5tdHNgLFxuICApO1xuICBpZiAoZnMuZXhpc3RzU3luYyhtdHNIYW5kbGVyRmlsZSkpIHtcbiAgICByZXR1cm4gbXRzSGFuZGxlckZpbGU7XG4gIH1cblxuICBjb25zdCBjdHNIYW5kbGVyRmlsZSA9IGRlZmluaW5nRmlsZS5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYCR7ZXh0bmFtZX0kYCksXG4gICAgYC4ke2lkfS5jdHNgLFxuICApO1xuICBpZiAoZnMuZXhpc3RzU3luYyhjdHNIYW5kbGVyRmlsZSkpIHtcbiAgICByZXR1cm4gY3RzSGFuZGxlckZpbGU7XG4gIH1cblxuICBjb25zdCBjanNIYW5kbGVyRmlsZSA9IGRlZmluaW5nRmlsZS5yZXBsYWNlKFxuICAgIG5ldyBSZWdFeHAoYCR7ZXh0bmFtZX0kYCksXG4gICAgYC4ke2lkfS5janNgLFxuICApO1xuICBpZiAoZnMuZXhpc3RzU3luYyhjanNIYW5kbGVyRmlsZSkpIHtcbiAgICByZXR1cm4gY2pzSGFuZGxlckZpbGU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYENhbm5vdCBmaW5kIGhhbmRsZXIgZmlsZSAke3RzSGFuZGxlckZpbGV9LCAke2pzSGFuZGxlckZpbGV9LCAke21qc0hhbmRsZXJGaWxlfSwgJHttdHNIYW5kbGVyRmlsZX0sICR7Y3RzSGFuZGxlckZpbGV9IG9yICR7Y2pzSGFuZGxlckZpbGV9YCxcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgYE5vZGVqc0Z1bmN0aW9uYCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGZpbmREZWZpbmluZ0ZpbGUoKTogc3RyaW5nIHtcbiAgbGV0IGRlZmluaW5nSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2l0ZXMgPSBjYWxsc2l0ZXMoKTtcbiAgZm9yIChjb25zdCBbaW5kZXgsIHNpdGVdIG9mIHNpdGVzLmVudHJpZXMoKSkge1xuICAgIGlmIChzaXRlLmdldEZ1bmN0aW9uTmFtZSgpID09PSBcIk5vZGVqc0Z1bmN0aW9uXCIpIHtcbiAgICAgIC8vIFRoZSBuZXh0IHNpdGUgaXMgdGhlIHNpdGUgd2hlcmUgdGhlIE5vZGVqc0Z1bmN0aW9uIHdhcyBjcmVhdGVkXG4gICAgICBkZWZpbmluZ0luZGV4ID0gaW5kZXggKyAxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFkZWZpbmluZ0luZGV4IHx8ICFzaXRlc1tkZWZpbmluZ0luZGV4XSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIGRlZmluaW5nIGZpbGUuXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNpdGVzW2RlZmluaW5nSW5kZXhdLmdldEZpbGVOYW1lKCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./function"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24tbm9kZWpzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFDM0IsMENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageInstallation = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const util_1 = require("./util");
|
|
6
|
+
/**
|
|
7
|
+
* Package installation
|
|
8
|
+
*/
|
|
9
|
+
class PackageInstallation {
|
|
10
|
+
static detect(module) {
|
|
11
|
+
try {
|
|
12
|
+
// Check local version first
|
|
13
|
+
const version = (0, util_1.tryGetModuleVersionFromRequire)(module);
|
|
14
|
+
if (version) {
|
|
15
|
+
return {
|
|
16
|
+
isLocal: true,
|
|
17
|
+
version,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// Fallback to a global version
|
|
21
|
+
const proc = (0, child_process_1.spawnSync)(module, ["--version"]);
|
|
22
|
+
if (proc.status === 0 && !proc.error) {
|
|
23
|
+
return {
|
|
24
|
+
isLocal: false,
|
|
25
|
+
version: proc.stdout.toString().trim(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.PackageInstallation = PackageInstallation;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1pbnN0YWxsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24tbm9kZWpzL3BhY2thZ2UtaW5zdGFsbGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUEwQztBQUMxQyxpQ0FBd0Q7QUFFeEQ7O0dBRUc7QUFDSCxNQUFzQixtQkFBbUI7SUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjO1FBQ2pDLElBQUksQ0FBQztZQUNILDRCQUE0QjtZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUE4QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTztvQkFDTCxPQUFPLEVBQUUsSUFBSTtvQkFDYixPQUFPO2lCQUNSLENBQUM7WUFDSixDQUFDO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUEseUJBQVMsRUFBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFO2lCQUN2QyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7Q0FJRjtBQTVCRCxrREE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgdHJ5R2V0TW9kdWxlVmVyc2lvbkZyb21SZXF1aXJlIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG4vKipcbiAqIFBhY2thZ2UgaW5zdGFsbGF0aW9uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWNrYWdlSW5zdGFsbGF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBkZXRlY3QobW9kdWxlOiBzdHJpbmcpOiBQYWNrYWdlSW5zdGFsbGF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgbG9jYWwgdmVyc2lvbiBmaXJzdFxuICAgICAgY29uc3QgdmVyc2lvbiA9IHRyeUdldE1vZHVsZVZlcnNpb25Gcm9tUmVxdWlyZShtb2R1bGUpO1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc0xvY2FsOiB0cnVlLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEZhbGxiYWNrIHRvIGEgZ2xvYmFsIHZlcnNpb25cbiAgICAgIGNvbnN0IHByb2MgPSBzcGF3blN5bmMobW9kdWxlLCBbXCItLXZlcnNpb25cIl0pO1xuICAgICAgaWYgKHByb2Muc3RhdHVzID09PSAwICYmICFwcm9jLmVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNMb2NhbDogZmFsc2UsXG4gICAgICAgICAgdmVyc2lvbjogcHJvYy5zdGRvdXQudG9TdHJpbmcoKS50cmltKCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNMb2NhbDogYm9vbGVhbjtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EsbuildLogLevel } from "./types";
|
|
2
|
+
interface PackageManagerProps {
|
|
3
|
+
readonly lockFile: string;
|
|
4
|
+
readonly installCommand: string[];
|
|
5
|
+
readonly runCommand: string[];
|
|
6
|
+
readonly argsSeparator?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare enum LockFile {
|
|
9
|
+
NPM = "package-lock.json",
|
|
10
|
+
YARN = "yarn.lock",
|
|
11
|
+
BUN = "bun.lockb",
|
|
12
|
+
PNPM = "pnpm-lock.yaml"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A node package manager
|
|
16
|
+
*/
|
|
17
|
+
export declare class PackageManager {
|
|
18
|
+
/**
|
|
19
|
+
* Use a lock file path to determine the package manager to use. Optionally, specify a log level to
|
|
20
|
+
* control its verbosity.
|
|
21
|
+
* @param lockFilePath Path of the lock file
|
|
22
|
+
* @param logLevel optional log level @default LogLevel.INFO
|
|
23
|
+
* @returns the right PackageManager for that lock file
|
|
24
|
+
*/
|
|
25
|
+
static fromLockFile(lockFilePath: string, logLevel?: EsbuildLogLevel): PackageManager;
|
|
26
|
+
readonly lockFile: string;
|
|
27
|
+
readonly installCommand: string[];
|
|
28
|
+
readonly runCommand: string[];
|
|
29
|
+
readonly argsSeparator?: string;
|
|
30
|
+
constructor(props: PackageManagerProps);
|
|
31
|
+
runBinCommand(bin: string): string;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageManager = exports.LockFile = void 0;
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
var LockFile;
|
|
8
|
+
(function (LockFile) {
|
|
9
|
+
LockFile["NPM"] = "package-lock.json";
|
|
10
|
+
LockFile["YARN"] = "yarn.lock";
|
|
11
|
+
LockFile["BUN"] = "bun.lockb";
|
|
12
|
+
LockFile["PNPM"] = "pnpm-lock.yaml";
|
|
13
|
+
})(LockFile || (exports.LockFile = LockFile = {}));
|
|
14
|
+
/**
|
|
15
|
+
* A node package manager
|
|
16
|
+
*/
|
|
17
|
+
class PackageManager {
|
|
18
|
+
/**
|
|
19
|
+
* Use a lock file path to determine the package manager to use. Optionally, specify a log level to
|
|
20
|
+
* control its verbosity.
|
|
21
|
+
* @param lockFilePath Path of the lock file
|
|
22
|
+
* @param logLevel optional log level @default LogLevel.INFO
|
|
23
|
+
* @returns the right PackageManager for that lock file
|
|
24
|
+
*/
|
|
25
|
+
static fromLockFile(lockFilePath, logLevel) {
|
|
26
|
+
const lockFile = path.basename(lockFilePath);
|
|
27
|
+
switch (lockFile) {
|
|
28
|
+
case LockFile.YARN:
|
|
29
|
+
return new PackageManager({
|
|
30
|
+
lockFile: LockFile.YARN,
|
|
31
|
+
installCommand: logLevel && logLevel !== types_1.EsbuildLogLevel.INFO
|
|
32
|
+
? ["yarn", "install", "--no-immutable", "--silent"]
|
|
33
|
+
: ["yarn", "install", "--no-immutable"],
|
|
34
|
+
runCommand: ["yarn", "run"],
|
|
35
|
+
});
|
|
36
|
+
case LockFile.PNPM:
|
|
37
|
+
return new PackageManager({
|
|
38
|
+
lockFile: LockFile.PNPM,
|
|
39
|
+
installCommand: logLevel && logLevel !== types_1.EsbuildLogLevel.INFO
|
|
40
|
+
? [
|
|
41
|
+
"pnpm",
|
|
42
|
+
"install",
|
|
43
|
+
"--reporter",
|
|
44
|
+
"silent",
|
|
45
|
+
"--config.node-linker=hoisted",
|
|
46
|
+
"--config.package-import-method=clone-or-copy",
|
|
47
|
+
"--no-prefer-frozen-lockfile",
|
|
48
|
+
]
|
|
49
|
+
: [
|
|
50
|
+
"pnpm",
|
|
51
|
+
"install",
|
|
52
|
+
"--config.node-linker=hoisted",
|
|
53
|
+
"--config.package-import-method=clone-or-copy",
|
|
54
|
+
"--no-prefer-frozen-lockfile",
|
|
55
|
+
],
|
|
56
|
+
// --config.node-linker=hoisted to create flat node_modules without symlinks
|
|
57
|
+
// --config.package-import-method=clone-or-copy to avoid hardlinking packages from the store
|
|
58
|
+
// --no-prefer-frozen-lockfile (works the same as yarn's --no-immutable) Disable --frozen-lockfile that is enabled by default in CI environments (https://github.com/pnpm/pnpm/issues/1994).
|
|
59
|
+
runCommand: ["pnpm", "exec"],
|
|
60
|
+
argsSeparator: "--",
|
|
61
|
+
});
|
|
62
|
+
case LockFile.BUN:
|
|
63
|
+
return new PackageManager({
|
|
64
|
+
lockFile: LockFile.BUN,
|
|
65
|
+
// Bun's default is to not force `--frozen-lockfile`, so it's not specified here. If they ever add a
|
|
66
|
+
// flag to explicitly disable it, we should add it here. https://github.com/oven-sh/bun/issues/16387
|
|
67
|
+
installCommand: logLevel && logLevel !== types_1.EsbuildLogLevel.INFO
|
|
68
|
+
? ["bun", "install", "--backend", "copyfile", "--silent"]
|
|
69
|
+
: ["bun", "install", "--backend", "copyfile"],
|
|
70
|
+
runCommand: ["bun", "run"],
|
|
71
|
+
});
|
|
72
|
+
default:
|
|
73
|
+
return new PackageManager({
|
|
74
|
+
lockFile: LockFile.NPM,
|
|
75
|
+
installCommand: logLevel
|
|
76
|
+
? ["npm", "ci", "--loglevel", logLevel]
|
|
77
|
+
: ["npm", "ci"],
|
|
78
|
+
runCommand: ["npx", "--no-install"],
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
constructor(props) {
|
|
83
|
+
this.lockFile = props.lockFile;
|
|
84
|
+
this.installCommand = props.installCommand;
|
|
85
|
+
this.runCommand = props.runCommand;
|
|
86
|
+
this.argsSeparator = props.argsSeparator;
|
|
87
|
+
}
|
|
88
|
+
runBinCommand(bin) {
|
|
89
|
+
const [runCommand, ...runArgs] = this.runCommand;
|
|
90
|
+
return [
|
|
91
|
+
os.platform() === "win32" ? `${runCommand}.cmd` : runCommand,
|
|
92
|
+
...runArgs,
|
|
93
|
+
...(this.argsSeparator ? [this.argsSeparator] : []),
|
|
94
|
+
bin,
|
|
95
|
+
].join(" ");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.PackageManager = PackageManager;
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2Z1bmN0aW9uLW5vZGVqcy9wYWNrYWdlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtQ0FBMEM7QUFTMUMsSUFBWSxRQUtYO0FBTEQsV0FBWSxRQUFRO0lBQ2xCLHFDQUF5QixDQUFBO0lBQ3pCLDhCQUFrQixDQUFBO0lBQ2xCLDZCQUFpQixDQUFBO0lBQ2pCLG1DQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFMVyxRQUFRLHdCQUFSLFFBQVEsUUFLbkI7QUFFRDs7R0FFRztBQUNILE1BQWEsY0FBYztJQUN6Qjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUN4QixZQUFvQixFQUNwQixRQUEwQjtRQUUxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTdDLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDaEIsT0FBTyxJQUFJLGNBQWMsQ0FBQztvQkFDeEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJO29CQUN2QixjQUFjLEVBQ1osUUFBUSxJQUFJLFFBQVEsS0FBSyx1QkFBZSxDQUFDLElBQUk7d0JBQzNDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO3dCQUNuRCxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDO29CQUMzQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2lCQUM1QixDQUFDLENBQUM7WUFDTCxLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixPQUFPLElBQUksY0FBYyxDQUFDO29CQUN4QixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7b0JBQ3ZCLGNBQWMsRUFDWixRQUFRLElBQUksUUFBUSxLQUFLLHVCQUFlLENBQUMsSUFBSTt3QkFDM0MsQ0FBQyxDQUFDOzRCQUNFLE1BQU07NEJBQ04sU0FBUzs0QkFDVCxZQUFZOzRCQUNaLFFBQVE7NEJBQ1IsOEJBQThCOzRCQUM5Qiw4Q0FBOEM7NEJBQzlDLDZCQUE2Qjt5QkFDOUI7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLE1BQU07NEJBQ04sU0FBUzs0QkFDVCw4QkFBOEI7NEJBQzlCLDhDQUE4Qzs0QkFDOUMsNkJBQTZCO3lCQUM5QjtvQkFDUCw0RUFBNEU7b0JBQzVFLDRGQUE0RjtvQkFDNUYsNExBQTRMO29CQUM1TCxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO29CQUM1QixhQUFhLEVBQUUsSUFBSTtpQkFDcEIsQ0FBQyxDQUFDO1lBQ0wsS0FBSyxRQUFRLENBQUMsR0FBRztnQkFDZixPQUFPLElBQUksY0FBYyxDQUFDO29CQUN4QixRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ3RCLG9HQUFvRztvQkFDcEcsb0dBQW9HO29CQUNwRyxjQUFjLEVBQ1osUUFBUSxJQUFJLFFBQVEsS0FBSyx1QkFBZSxDQUFDLElBQUk7d0JBQzNDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7d0JBQ3pELENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQztvQkFDakQsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztpQkFDM0IsQ0FBQyxDQUFDO1lBQ0w7Z0JBQ0UsT0FBTyxJQUFJLGNBQWMsQ0FBQztvQkFDeEIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUN0QixjQUFjLEVBQUUsUUFBUTt3QkFDdEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDO3dCQUN2QyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO29CQUNqQixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO2lCQUNwQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQU9ELFlBQVksS0FBMEI7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFTSxhQUFhLENBQUMsR0FBVztRQUM5QixNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqRCxPQUFPO1lBQ0wsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUM1RCxHQUFHLE9BQU87WUFDVixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxHQUFHO1NBQ0osQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUE5RkQsd0NBOEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2J1aWxkTG9nTGV2ZWwgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgUGFja2FnZU1hbmFnZXJQcm9wcyB7XG4gIHJlYWRvbmx5IGxvY2tGaWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcnVuQ29tbWFuZDogc3RyaW5nW107XG4gIHJlYWRvbmx5IGFyZ3NTZXBhcmF0b3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIExvY2tGaWxlIHtcbiAgTlBNID0gXCJwYWNrYWdlLWxvY2suanNvblwiLFxuICBZQVJOID0gXCJ5YXJuLmxvY2tcIixcbiAgQlVOID0gXCJidW4ubG9ja2JcIixcbiAgUE5QTSA9IFwicG5wbS1sb2NrLnlhbWxcIixcbn1cblxuLyoqXG4gKiBBIG5vZGUgcGFja2FnZSBtYW5hZ2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWNrYWdlTWFuYWdlciB7XG4gIC8qKlxuICAgKiBVc2UgYSBsb2NrIGZpbGUgcGF0aCB0byBkZXRlcm1pbmUgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIE9wdGlvbmFsbHksIHNwZWNpZnkgYSBsb2cgbGV2ZWwgdG9cbiAgICogY29udHJvbCBpdHMgdmVyYm9zaXR5LlxuICAgKiBAcGFyYW0gbG9ja0ZpbGVQYXRoIFBhdGggb2YgdGhlIGxvY2sgZmlsZVxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgb3B0aW9uYWwgbG9nIGxldmVsIEBkZWZhdWx0IExvZ0xldmVsLklORk9cbiAgICogQHJldHVybnMgdGhlIHJpZ2h0IFBhY2thZ2VNYW5hZ2VyIGZvciB0aGF0IGxvY2sgZmlsZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTG9ja0ZpbGUoXG4gICAgbG9ja0ZpbGVQYXRoOiBzdHJpbmcsXG4gICAgbG9nTGV2ZWw/OiBFc2J1aWxkTG9nTGV2ZWwsXG4gICk6IFBhY2thZ2VNYW5hZ2VyIHtcbiAgICBjb25zdCBsb2NrRmlsZSA9IHBhdGguYmFzZW5hbWUobG9ja0ZpbGVQYXRoKTtcblxuICAgIHN3aXRjaCAobG9ja0ZpbGUpIHtcbiAgICAgIGNhc2UgTG9ja0ZpbGUuWUFSTjpcbiAgICAgICAgcmV0dXJuIG5ldyBQYWNrYWdlTWFuYWdlcih7XG4gICAgICAgICAgbG9ja0ZpbGU6IExvY2tGaWxlLllBUk4sXG4gICAgICAgICAgaW5zdGFsbENvbW1hbmQ6XG4gICAgICAgICAgICBsb2dMZXZlbCAmJiBsb2dMZXZlbCAhPT0gRXNidWlsZExvZ0xldmVsLklORk9cbiAgICAgICAgICAgICAgPyBbXCJ5YXJuXCIsIFwiaW5zdGFsbFwiLCBcIi0tbm8taW1tdXRhYmxlXCIsIFwiLS1zaWxlbnRcIl1cbiAgICAgICAgICAgICAgOiBbXCJ5YXJuXCIsIFwiaW5zdGFsbFwiLCBcIi0tbm8taW1tdXRhYmxlXCJdLFxuICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcInlhcm5cIiwgXCJydW5cIl0sXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBMb2NrRmlsZS5QTlBNOlxuICAgICAgICByZXR1cm4gbmV3IFBhY2thZ2VNYW5hZ2VyKHtcbiAgICAgICAgICBsb2NrRmlsZTogTG9ja0ZpbGUuUE5QTSxcbiAgICAgICAgICBpbnN0YWxsQ29tbWFuZDpcbiAgICAgICAgICAgIGxvZ0xldmVsICYmIGxvZ0xldmVsICE9PSBFc2J1aWxkTG9nTGV2ZWwuSU5GT1xuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIFwicG5wbVwiLFxuICAgICAgICAgICAgICAgICAgXCJpbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICBcIi0tcmVwb3J0ZXJcIixcbiAgICAgICAgICAgICAgICAgIFwic2lsZW50XCIsXG4gICAgICAgICAgICAgICAgICBcIi0tY29uZmlnLm5vZGUtbGlua2VyPWhvaXN0ZWRcIixcbiAgICAgICAgICAgICAgICAgIFwiLS1jb25maWcucGFja2FnZS1pbXBvcnQtbWV0aG9kPWNsb25lLW9yLWNvcHlcIixcbiAgICAgICAgICAgICAgICAgIFwiLS1uby1wcmVmZXItZnJvemVuLWxvY2tmaWxlXCIsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgIFwicG5wbVwiLFxuICAgICAgICAgICAgICAgICAgXCJpbnN0YWxsXCIsXG4gICAgICAgICAgICAgICAgICBcIi0tY29uZmlnLm5vZGUtbGlua2VyPWhvaXN0ZWRcIixcbiAgICAgICAgICAgICAgICAgIFwiLS1jb25maWcucGFja2FnZS1pbXBvcnQtbWV0aG9kPWNsb25lLW9yLWNvcHlcIixcbiAgICAgICAgICAgICAgICAgIFwiLS1uby1wcmVmZXItZnJvemVuLWxvY2tmaWxlXCIsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAvLyAtLWNvbmZpZy5ub2RlLWxpbmtlcj1ob2lzdGVkIHRvIGNyZWF0ZSBmbGF0IG5vZGVfbW9kdWxlcyB3aXRob3V0IHN5bWxpbmtzXG4gICAgICAgICAgLy8gLS1jb25maWcucGFja2FnZS1pbXBvcnQtbWV0aG9kPWNsb25lLW9yLWNvcHkgdG8gYXZvaWQgaGFyZGxpbmtpbmcgcGFja2FnZXMgZnJvbSB0aGUgc3RvcmVcbiAgICAgICAgICAvLyAtLW5vLXByZWZlci1mcm96ZW4tbG9ja2ZpbGUgKHdvcmtzIHRoZSBzYW1lIGFzIHlhcm4ncyAtLW5vLWltbXV0YWJsZSkgRGlzYWJsZSAtLWZyb3plbi1sb2NrZmlsZSB0aGF0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBDSSBlbnZpcm9ubWVudHMgKGh0dHBzOi8vZ2l0aHViLmNvbS9wbnBtL3BucG0vaXNzdWVzLzE5OTQpLlxuICAgICAgICAgIHJ1bkNvbW1hbmQ6IFtcInBucG1cIiwgXCJleGVjXCJdLFxuICAgICAgICAgIGFyZ3NTZXBhcmF0b3I6IFwiLS1cIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIExvY2tGaWxlLkJVTjpcbiAgICAgICAgcmV0dXJuIG5ldyBQYWNrYWdlTWFuYWdlcih7XG4gICAgICAgICAgbG9ja0ZpbGU6IExvY2tGaWxlLkJVTixcbiAgICAgICAgICAvLyBCdW4ncyBkZWZhdWx0IGlzIHRvIG5vdCBmb3JjZSBgLS1mcm96ZW4tbG9ja2ZpbGVgLCBzbyBpdCdzIG5vdCBzcGVjaWZpZWQgaGVyZS4gSWYgdGhleSBldmVyIGFkZCBhXG4gICAgICAgICAgLy8gZmxhZyB0byBleHBsaWNpdGx5IGRpc2FibGUgaXQsIHdlIHNob3VsZCBhZGQgaXQgaGVyZS4gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjM4N1xuICAgICAgICAgIGluc3RhbGxDb21tYW5kOlxuICAgICAgICAgICAgbG9nTGV2ZWwgJiYgbG9nTGV2ZWwgIT09IEVzYnVpbGRMb2dMZXZlbC5JTkZPXG4gICAgICAgICAgICAgID8gW1wiYnVuXCIsIFwiaW5zdGFsbFwiLCBcIi0tYmFja2VuZFwiLCBcImNvcHlmaWxlXCIsIFwiLS1zaWxlbnRcIl1cbiAgICAgICAgICAgICAgOiBbXCJidW5cIiwgXCJpbnN0YWxsXCIsIFwiLS1iYWNrZW5kXCIsIFwiY29weWZpbGVcIl0sXG4gICAgICAgICAgcnVuQ29tbWFuZDogW1wiYnVuXCIsIFwicnVuXCJdLFxuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgUGFja2FnZU1hbmFnZXIoe1xuICAgICAgICAgIGxvY2tGaWxlOiBMb2NrRmlsZS5OUE0sXG4gICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGxvZ0xldmVsXG4gICAgICAgICAgICA/IFtcIm5wbVwiLCBcImNpXCIsIFwiLS1sb2dsZXZlbFwiLCBsb2dMZXZlbF1cbiAgICAgICAgICAgIDogW1wibnBtXCIsIFwiY2lcIl0sXG4gICAgICAgICAgcnVuQ29tbWFuZDogW1wibnB4XCIsIFwiLS1uby1pbnN0YWxsXCJdLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbG9ja0ZpbGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IHJ1bkNvbW1hbmQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJnc1NlcGFyYXRvcj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUGFja2FnZU1hbmFnZXJQcm9wcykge1xuICAgIHRoaXMubG9ja0ZpbGUgPSBwcm9wcy5sb2NrRmlsZTtcbiAgICB0aGlzLmluc3RhbGxDb21tYW5kID0gcHJvcHMuaW5zdGFsbENvbW1hbmQ7XG4gICAgdGhpcy5ydW5Db21tYW5kID0gcHJvcHMucnVuQ29tbWFuZDtcbiAgICB0aGlzLmFyZ3NTZXBhcmF0b3IgPSBwcm9wcy5hcmdzU2VwYXJhdG9yO1xuICB9XG5cbiAgcHVibGljIHJ1bkJpbkNvbW1hbmQoYmluOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtydW5Db21tYW5kLCAuLi5ydW5BcmdzXSA9IHRoaXMucnVuQ29tbWFuZDtcbiAgICByZXR1cm4gW1xuICAgICAgb3MucGxhdGZvcm0oKSA9PT0gXCJ3aW4zMlwiID8gYCR7cnVuQ29tbWFuZH0uY21kYCA6IHJ1bkNvbW1hbmQsXG4gICAgICAuLi5ydW5BcmdzLFxuICAgICAgLi4uKHRoaXMuYXJnc1NlcGFyYXRvciA/IFt0aGlzLmFyZ3NTZXBhcmF0b3JdIDogW10pLFxuICAgICAgYmluLFxuICAgIF0uam9pbihcIiBcIik7XG4gIH1cbn1cbiJdfQ==
|