terraconstructs 0.0.24 → 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.
Files changed (422) hide show
  1. package/.jsii +83665 -54911
  2. package/.mise.toml +1 -1
  3. package/.nvmrc +1 -1
  4. package/LICENSE +202 -674
  5. package/go.mod +9 -7
  6. package/go.sum +18 -14
  7. package/lib/asset-manager.d.ts +23 -0
  8. package/lib/asset-manager.js +3 -0
  9. package/lib/asset-staging.d.ts +178 -0
  10. package/lib/asset-staging.js +589 -0
  11. package/lib/assets.d.ts +359 -0
  12. package/lib/assets.js +55 -0
  13. package/lib/aws/arn.js +16 -15
  14. package/lib/aws/aws-asset-manager.d.ts +91 -0
  15. package/lib/aws/aws-asset-manager.js +244 -0
  16. package/lib/aws/aws-construct.js +1 -1
  17. package/lib/aws/aws-stack.d.ts +37 -0
  18. package/lib/aws/aws-stack.js +30 -9
  19. package/lib/aws/aws-tags.js +2 -2
  20. package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
  21. package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
  22. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  23. package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
  24. package/lib/aws/cloudwatch/actions/index.js +4 -4
  25. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  26. package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
  27. package/lib/aws/cloudwatch/actions/sns.js +23 -0
  28. package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
  29. package/lib/aws/cloudwatch/actions/ssm.js +104 -0
  30. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  31. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  33. package/lib/aws/cloudwatch/alarm.js +1 -1
  34. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  35. package/lib/aws/cloudwatch/dashboard.js +1 -1
  36. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  37. package/lib/aws/cloudwatch/graph.js +8 -8
  38. package/lib/aws/cloudwatch/layout.js +3 -3
  39. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  40. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  41. package/lib/aws/cloudwatch/log-group.js +1 -1
  42. package/lib/aws/cloudwatch/log-query.js +1 -1
  43. package/lib/aws/cloudwatch/log-stream.js +1 -1
  44. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  45. package/lib/aws/cloudwatch/metric.js +2 -2
  46. package/lib/aws/cloudwatch/pattern.js +3 -3
  47. package/lib/aws/cloudwatch/policy.js +1 -1
  48. package/lib/aws/cloudwatch/query-definition.js +2 -2
  49. package/lib/aws/cloudwatch/stats.js +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  51. package/lib/aws/cloudwatch/text.js +1 -1
  52. package/lib/aws/cloudwatch/variable.js +3 -3
  53. package/lib/aws/cloudwatch/widget.js +1 -1
  54. package/lib/aws/compute/access-log.d.ts +478 -0
  55. package/lib/aws/compute/access-log.js +649 -0
  56. package/lib/aws/compute/activity.js +1 -1
  57. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  58. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  59. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  60. package/lib/aws/compute/alb/application-listener.js +1 -1
  61. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  62. package/lib/aws/compute/alb/application-target-group.js +1 -1
  63. package/lib/aws/compute/alb/conditions.js +1 -1
  64. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  65. package/lib/aws/compute/alb/trust-store.js +1 -1
  66. package/lib/aws/compute/api-definition.d.ts +106 -0
  67. package/lib/aws/compute/api-definition.js +200 -0
  68. package/lib/aws/compute/api-key.d.ts +184 -0
  69. package/lib/aws/compute/api-key.js +197 -0
  70. package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
  71. package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
  72. package/lib/aws/compute/apigateway-util.d.ts +31 -0
  73. package/lib/aws/compute/apigateway-util.js +152 -0
  74. package/lib/aws/compute/architecture.js +1 -1
  75. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  76. package/lib/aws/compute/authorizer.d.ts +35 -0
  77. package/lib/aws/compute/authorizer.js +28 -0
  78. package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
  79. package/lib/aws/compute/authorizers/identity-source.js +61 -0
  80. package/lib/aws/compute/authorizers/index.d.ts +2 -0
  81. package/lib/aws/compute/authorizers/index.js +20 -0
  82. package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
  83. package/lib/aws/compute/authorizers/lambda.js +208 -0
  84. package/lib/aws/compute/base-path-mapping.d.ts +49 -0
  85. package/lib/aws/compute/base-path-mapping.js +52 -0
  86. package/lib/aws/compute/base-scalable-attribute.js +3 -3
  87. package/lib/aws/compute/bastion-host.js +1 -1
  88. package/lib/aws/compute/chain.js +1 -1
  89. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  90. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  91. package/lib/aws/compute/client-vpn-route.js +2 -2
  92. package/lib/aws/compute/code.d.ts +415 -0
  93. package/lib/aws/compute/code.js +424 -0
  94. package/lib/aws/compute/condition.js +1 -1
  95. package/lib/aws/compute/connections.js +1 -1
  96. package/lib/aws/compute/cors.d.ts +102 -0
  97. package/lib/aws/compute/cors.js +33 -0
  98. package/lib/aws/compute/deployment.d.ts +83 -0
  99. package/lib/aws/compute/deployment.js +158 -0
  100. package/lib/aws/compute/domain-name.d.ts +153 -0
  101. package/lib/aws/compute/domain-name.js +158 -0
  102. package/lib/aws/compute/event-invoke-config.d.ts +2 -2
  103. package/lib/aws/compute/event-invoke-config.js +4 -4
  104. package/lib/aws/compute/event-source-filter.js +2 -2
  105. package/lib/aws/compute/event-source-mapping.d.ts +2 -2
  106. package/lib/aws/compute/event-source-mapping.js +9 -7
  107. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  108. package/lib/aws/compute/event-sources/s3.js +1 -1
  109. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  110. package/lib/aws/compute/event-sources/sqs.js +3 -2
  111. package/lib/aws/compute/fields.js +4 -4
  112. package/lib/aws/compute/function-alias.d.ts +1 -0
  113. package/lib/aws/compute/function-alias.js +8 -2
  114. package/lib/aws/compute/function-base.d.ts +15 -0
  115. package/lib/aws/compute/function-base.js +4 -4
  116. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  117. package/lib/aws/compute/function-destinations/function.js +1 -1
  118. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  119. package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
  120. package/lib/aws/compute/function-nodejs/bundling.js +405 -0
  121. package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
  122. package/lib/aws/compute/function-nodejs/function.js +175 -0
  123. package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
  124. package/lib/aws/compute/function-nodejs/index.js +19 -0
  125. package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
  126. package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
  127. package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
  128. package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
  129. package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
  130. package/lib/aws/compute/function-nodejs/types.js +81 -0
  131. package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
  132. package/lib/aws/compute/function-nodejs/util.js +202 -0
  133. package/lib/aws/compute/function-url.d.ts +2 -2
  134. package/lib/aws/compute/function-url.js +4 -4
  135. package/lib/aws/compute/function.d.ts +34 -4
  136. package/lib/aws/compute/function.js +91 -17
  137. package/lib/aws/compute/gateway-response.d.ts +157 -0
  138. package/lib/aws/compute/gateway-response.js +156 -0
  139. package/lib/aws/compute/handler.d.ts +10 -0
  140. package/lib/aws/compute/handler.js +20 -0
  141. package/lib/aws/compute/index.d.ts +27 -0
  142. package/lib/aws/compute/index.js +29 -1
  143. package/lib/aws/compute/instance-types.js +1 -1
  144. package/lib/aws/compute/instance.js +1 -1
  145. package/lib/aws/compute/integration.d.ts +311 -0
  146. package/lib/aws/compute/integration.js +165 -0
  147. package/lib/aws/compute/integrations/aws.d.ts +72 -0
  148. package/lib/aws/compute/integrations/aws.js +55 -0
  149. package/lib/aws/compute/integrations/http.d.ts +37 -0
  150. package/lib/aws/compute/integrations/http.js +35 -0
  151. package/lib/aws/compute/integrations/index.d.ts +6 -0
  152. package/lib/aws/compute/integrations/index.js +24 -0
  153. package/lib/aws/compute/integrations/lambda.d.ts +40 -0
  154. package/lib/aws/compute/integrations/lambda.js +73 -0
  155. package/lib/aws/compute/integrations/mock.d.ts +16 -0
  156. package/lib/aws/compute/integrations/mock.js +30 -0
  157. package/lib/aws/compute/integrations/request-context.d.ts +144 -0
  158. package/lib/aws/compute/integrations/request-context.js +3 -0
  159. package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
  160. package/lib/aws/compute/integrations/stepfunctions.js +268 -0
  161. package/lib/aws/compute/ip-addresses.js +2 -2
  162. package/lib/aws/compute/ipam.js +1 -1
  163. package/lib/aws/compute/json-schema.d.ts +75 -0
  164. package/lib/aws/compute/json-schema.js +23 -0
  165. package/lib/aws/compute/key-pair.js +1 -1
  166. package/lib/aws/compute/lambda-api.d.ts +46 -0
  167. package/lib/aws/compute/lambda-api.js +64 -0
  168. package/lib/aws/compute/launch-template.js +2 -2
  169. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  170. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  171. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  172. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  173. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  174. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  175. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  176. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  177. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  178. package/lib/aws/compute/load-balancer.js +3 -3
  179. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  180. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  181. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  182. package/lib/aws/compute/machine-image/common.js +1 -1
  183. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  184. package/lib/aws/compute/method.d.ts +219 -0
  185. package/lib/aws/compute/method.js +396 -0
  186. package/lib/aws/compute/methodresponse.d.ts +28 -0
  187. package/lib/aws/compute/methodresponse.js +3 -0
  188. package/lib/aws/compute/model.d.ts +143 -0
  189. package/lib/aws/compute/model.js +141 -0
  190. package/lib/aws/compute/nat.js +5 -5
  191. package/lib/aws/compute/network-acl-types.js +2 -2
  192. package/lib/aws/compute/network-acl.js +3 -3
  193. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  194. package/lib/aws/compute/nlb/network-listener.js +1 -1
  195. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  196. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  197. package/lib/aws/compute/peer.js +1 -1
  198. package/lib/aws/compute/placement-group.js +1 -1
  199. package/lib/aws/compute/port.js +1 -1
  200. package/lib/aws/compute/prefix-list.js +1 -1
  201. package/lib/aws/compute/requestvalidator.d.ts +50 -0
  202. package/lib/aws/compute/requestvalidator.js +59 -0
  203. package/lib/aws/compute/resource.d.ts +223 -0
  204. package/lib/aws/compute/resource.js +316 -0
  205. package/lib/aws/compute/restapi.d.ts +510 -0
  206. package/lib/aws/compute/restapi.js +626 -0
  207. package/lib/aws/compute/route.js +8 -8
  208. package/lib/aws/compute/runtime.d.ts +282 -0
  209. package/lib/aws/compute/runtime.js +337 -0
  210. package/lib/aws/compute/scalable-target.js +3 -3
  211. package/lib/aws/compute/schedule.js +3 -3
  212. package/lib/aws/compute/security-group.js +1 -1
  213. package/lib/aws/compute/stage.d.ts +350 -0
  214. package/lib/aws/compute/stage.js +304 -0
  215. package/lib/aws/compute/state-graph.js +1 -1
  216. package/lib/aws/compute/state-machine-fragment.js +1 -1
  217. package/lib/aws/compute/state-machine.js +4 -4
  218. package/lib/aws/compute/states/choice.js +1 -1
  219. package/lib/aws/compute/states/custom-state.js +1 -1
  220. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  221. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  222. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  223. package/lib/aws/compute/states/distributed-map.js +1 -1
  224. package/lib/aws/compute/states/fail.js +1 -1
  225. package/lib/aws/compute/states/map-base.js +1 -1
  226. package/lib/aws/compute/states/map.js +1 -1
  227. package/lib/aws/compute/states/parallel.js +1 -1
  228. package/lib/aws/compute/states/pass.js +2 -2
  229. package/lib/aws/compute/states/state.js +1 -1
  230. package/lib/aws/compute/states/succeed.js +1 -1
  231. package/lib/aws/compute/states/task-base.js +2 -2
  232. package/lib/aws/compute/states/task.js +1 -1
  233. package/lib/aws/compute/states/wait.js +2 -2
  234. package/lib/aws/compute/step-scaling-action.js +3 -3
  235. package/lib/aws/compute/step-scaling-policy.js +1 -1
  236. package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
  237. package/lib/aws/compute/stepfunctions-api.js +39 -0
  238. package/lib/aws/compute/subnet-v2.js +2 -2
  239. package/lib/aws/compute/subnet.js +1 -1
  240. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  241. package/lib/aws/compute/task-credentials.js +1 -1
  242. package/lib/aws/compute/task-input.js +1 -1
  243. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  244. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  245. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  246. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  247. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  248. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  249. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  250. package/lib/aws/compute/types.js +1 -1
  251. package/lib/aws/compute/usage-plan.d.ts +194 -0
  252. package/lib/aws/compute/usage-plan.js +174 -0
  253. package/lib/aws/compute/user-data.js +3 -3
  254. package/lib/aws/compute/volume.js +2 -2
  255. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  256. package/lib/aws/compute/vpc-endpoint.js +6 -6
  257. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  258. package/lib/aws/compute/vpc-link.d.ts +104 -0
  259. package/lib/aws/compute/vpc-link.js +137 -0
  260. package/lib/aws/compute/vpc-v2-base.js +1 -1
  261. package/lib/aws/compute/vpc-v2.js +2 -2
  262. package/lib/aws/compute/vpc.js +4 -4
  263. package/lib/aws/compute/vpn.js +3 -3
  264. package/lib/aws/edge/certificate.js +1 -1
  265. package/lib/aws/edge/distribution.js +3 -3
  266. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  267. package/lib/aws/edge/dns-record.js +13 -13
  268. package/lib/aws/edge/dns-zone.js +1 -1
  269. package/lib/aws/edge/function.js +2 -2
  270. package/lib/aws/edge/key-value-store.js +4 -4
  271. package/lib/aws/edge/origin.js +3 -3
  272. package/lib/aws/edge/response-headers-policy.js +1 -1
  273. package/lib/aws/encryption/alias.js +1 -1
  274. package/lib/aws/encryption/key.js +1 -1
  275. package/lib/aws/encryption/via-service-principal.js +1 -1
  276. package/lib/aws/iam/grant.js +2 -2
  277. package/lib/aws/iam/group.js +1 -1
  278. package/lib/aws/iam/instance-profile.js +1 -1
  279. package/lib/aws/iam/managed-policy.js +1 -1
  280. package/lib/aws/iam/oidc-provider.js +1 -1
  281. package/lib/aws/iam/policy-document.js +1 -1
  282. package/lib/aws/iam/policy-statement.js +1 -1
  283. package/lib/aws/iam/policy.js +1 -1
  284. package/lib/aws/iam/principals.js +20 -20
  285. package/lib/aws/iam/role.js +1 -1
  286. package/lib/aws/iam/saml-provider.js +2 -2
  287. package/lib/aws/iam/unknown-principal.js +1 -1
  288. package/lib/aws/iam/user.js +5 -5
  289. package/lib/aws/index.d.ts +1 -0
  290. package/lib/aws/index.js +4 -1
  291. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  292. package/lib/aws/network/subnet-group.js +3 -3
  293. package/lib/aws/network/subnet.js +4 -4
  294. package/lib/aws/notify/archive.js +1 -1
  295. package/lib/aws/notify/connection.js +3 -3
  296. package/lib/aws/notify/event-bus.js +3 -3
  297. package/lib/aws/notify/event-pattern.js +1 -1
  298. package/lib/aws/notify/input.js +2 -2
  299. package/lib/aws/notify/kinesis-stream.js +1 -1
  300. package/lib/aws/notify/notification-rule.d.ts +1 -1
  301. package/lib/aws/notify/notification-rule.js +5 -5
  302. package/lib/aws/notify/policy.js +1 -1
  303. package/lib/aws/notify/queue-policy.js +1 -1
  304. package/lib/aws/notify/queue.js +1 -1
  305. package/lib/aws/notify/resource-policy.js +1 -1
  306. package/lib/aws/notify/rule.js +1 -1
  307. package/lib/aws/notify/schedule.js +1 -1
  308. package/lib/aws/notify/subscription-filter.js +1 -1
  309. package/lib/aws/notify/subscription.js +4 -4
  310. package/lib/aws/notify/subscriptions/email.js +1 -1
  311. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  312. package/lib/aws/notify/subscriptions/sms.js +1 -1
  313. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  314. package/lib/aws/notify/subscriptions/url.js +1 -1
  315. package/lib/aws/notify/targets/event-bus.js +1 -1
  316. package/lib/aws/notify/targets/function.js +1 -1
  317. package/lib/aws/notify/targets/log-group.js +2 -2
  318. package/lib/aws/notify/targets/sqs.js +1 -1
  319. package/lib/aws/notify/targets/state-machine.js +1 -1
  320. package/lib/aws/notify/topic-base.js +1 -1
  321. package/lib/aws/notify/topic.js +6 -5
  322. package/lib/aws/partition.d.ts +21 -0
  323. package/lib/aws/partition.js +42 -0
  324. package/lib/aws/storage/assets/image-asset.d.ts +379 -0
  325. package/lib/aws/storage/assets/image-asset.js +247 -0
  326. package/lib/aws/storage/assets/index.d.ts +2 -0
  327. package/lib/aws/storage/assets/index.js +21 -0
  328. package/lib/aws/storage/assets/s3.d.ts +125 -0
  329. package/lib/aws/storage/assets/s3.js +80 -0
  330. package/lib/aws/storage/auth-token.d.ts +25 -0
  331. package/lib/aws/storage/auth-token.js +54 -0
  332. package/lib/aws/storage/billing.js +1 -1
  333. package/lib/aws/storage/bucket-notifications.js +1 -1
  334. package/lib/aws/storage/bucket-policy.js +1 -1
  335. package/lib/aws/storage/bucket-source.d.ts +1 -1
  336. package/lib/aws/storage/bucket-source.js +4 -4
  337. package/lib/aws/storage/bucket.d.ts +14 -6
  338. package/lib/aws/storage/bucket.js +48 -40
  339. package/lib/aws/storage/capacity.js +1 -1
  340. package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
  341. package/lib/aws/storage/ecr-lifecycle.js +23 -0
  342. package/lib/aws/storage/ecr-repository.d.ts +446 -0
  343. package/lib/aws/storage/ecr-repository.js +685 -0
  344. package/lib/aws/storage/encryption.js +1 -1
  345. package/lib/aws/storage/index.d.ts +5 -0
  346. package/lib/aws/storage/index.js +10 -3
  347. package/lib/aws/storage/location.d.ts +17 -0
  348. package/lib/aws/storage/location.js +4 -0
  349. package/lib/aws/storage/notification-targets/function.js +1 -1
  350. package/lib/aws/storage/notification-targets/queue.js +1 -1
  351. package/lib/aws/storage/origin-access-identity.js +1 -1
  352. package/lib/aws/storage/parameter.js +2 -2
  353. package/lib/aws/storage/table.js +3 -3
  354. package/lib/aws/storage/util.d.ts +8 -20
  355. package/lib/aws/storage/util.js +56 -34
  356. package/lib/aws/util.d.ts +1 -0
  357. package/lib/aws/util.js +6 -1
  358. package/lib/bundling.d.ts +434 -0
  359. package/lib/bundling.js +368 -0
  360. package/lib/construct-base.js +2 -2
  361. package/lib/duration.js +1 -1
  362. package/lib/expiration.js +1 -1
  363. package/lib/fs/copy.d.ts +2 -0
  364. package/lib/fs/copy.js +57 -0
  365. package/lib/fs/fingerprint.d.ts +21 -0
  366. package/lib/fs/fingerprint.js +165 -0
  367. package/lib/fs/ignore.d.ts +107 -0
  368. package/lib/fs/ignore.js +190 -0
  369. package/lib/fs/index.d.ts +47 -0
  370. package/lib/fs/index.js +88 -0
  371. package/lib/fs/options.d.ts +110 -0
  372. package/lib/fs/options.js +60 -0
  373. package/lib/fs/utils.d.ts +11 -0
  374. package/lib/fs/utils.js +34 -0
  375. package/lib/index.d.ts +5 -0
  376. package/lib/index.js +7 -1
  377. package/lib/private/asset-staging.d.ts +83 -0
  378. package/lib/private/asset-staging.js +205 -0
  379. package/lib/private/cache.d.ts +17 -0
  380. package/lib/private/cache.js +35 -0
  381. package/lib/private/jsii-deprecated.d.ts +2 -0
  382. package/lib/private/jsii-deprecated.js +19 -0
  383. package/lib/private/unique-resource-name.js +3 -2
  384. package/lib/size.js +1 -1
  385. package/lib/stack-base.js +1 -1
  386. package/lib/terra-func.js +2 -2
  387. package/lib/time-zone.js +1 -1
  388. package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
  389. package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
  390. package/node_modules/@balena/dockerignore/README.md +261 -0
  391. package/node_modules/@balena/dockerignore/ignore.js +363 -0
  392. package/node_modules/@balena/dockerignore/index.d.ts +45 -0
  393. package/node_modules/@balena/dockerignore/package.json +49 -0
  394. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  395. package/node_modules/balanced-match/LICENSE.md +21 -0
  396. package/node_modules/balanced-match/README.md +97 -0
  397. package/node_modules/balanced-match/index.js +62 -0
  398. package/node_modules/balanced-match/package.json +48 -0
  399. package/node_modules/concat-map/.travis.yml +4 -0
  400. package/node_modules/concat-map/LICENSE +18 -0
  401. package/node_modules/concat-map/README.markdown +62 -0
  402. package/node_modules/concat-map/example/map.js +6 -0
  403. package/node_modules/concat-map/index.js +13 -0
  404. package/node_modules/concat-map/package.json +43 -0
  405. package/node_modules/concat-map/test/map.js +39 -0
  406. package/node_modules/ignore/LICENSE-MIT +21 -0
  407. package/node_modules/ignore/README.md +412 -0
  408. package/node_modules/ignore/index.d.ts +61 -0
  409. package/node_modules/ignore/index.js +636 -0
  410. package/node_modules/ignore/legacy.js +559 -0
  411. package/node_modules/ignore/package.json +74 -0
  412. package/node_modules/minimatch/LICENSE +15 -0
  413. package/node_modules/minimatch/README.md +230 -0
  414. package/node_modules/minimatch/minimatch.js +947 -0
  415. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  416. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  417. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  418. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  419. package/node_modules/minimatch/package.json +33 -0
  420. package/package.json +14 -5
  421. package/lib/aws/compute/function-nodejs.d.ts +0 -55
  422. package/lib/aws/compute/function-nodejs.js +0 -70
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ var _a, _b, _c;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DockerVolumeConsistency = exports.DockerImage = exports.BundlingDockerImage = exports.BundlingFileAccess = exports.BundlingOutput = exports.DockerBuildSecret = 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/bundling.ts
7
+ const child_process_1 = require("child_process");
8
+ const crypto = require("crypto");
9
+ const path_1 = require("path");
10
+ const fs_1 = require("./fs");
11
+ // TODO: Replace with @cdktf/provider-docker?
12
+ const asset_staging_1 = require("./private/asset-staging");
13
+ const jsii_deprecated_1 = require("./private/jsii-deprecated");
14
+ /**
15
+ * Methods to build Docker CLI arguments for builds using secrets.
16
+ *
17
+ * Docker BuildKit must be enabled to use build secrets.
18
+ *
19
+ * @see https://docs.docker.com/build/buildkit/
20
+ */
21
+ class DockerBuildSecret {
22
+ /**
23
+ * A Docker build secret from a file source
24
+ * @param src The path to the source file, relative to the build directory.
25
+ * @returns The latter half required for `--secret`
26
+ */
27
+ static fromSrc(src) {
28
+ return `src=${src}`;
29
+ }
30
+ }
31
+ exports.DockerBuildSecret = DockerBuildSecret;
32
+ _a = JSII_RTTI_SYMBOL_1;
33
+ DockerBuildSecret[_a] = { fqn: "terraconstructs.DockerBuildSecret", version: "0.1.0" };
34
+ /**
35
+ * The type of output that a bundling operation is producing.
36
+ *
37
+ */
38
+ var BundlingOutput;
39
+ (function (BundlingOutput) {
40
+ /**
41
+ * The bundling output directory includes a single .zip or .jar file which
42
+ * will be used as the final bundle. If the output directory does not
43
+ * include exactly a single archive, bundling will fail.
44
+ */
45
+ BundlingOutput["ARCHIVED"] = "archived";
46
+ /**
47
+ * The bundling output directory contains one or more files which will be
48
+ * archived and uploaded as a .zip file to S3.
49
+ */
50
+ BundlingOutput["NOT_ARCHIVED"] = "not-archived";
51
+ /**
52
+ * If the bundling output directory contains a single archive file (zip or jar)
53
+ * it will be used as the bundle output as-is. Otherwise, all the files in the bundling output directory will be zipped.
54
+ */
55
+ BundlingOutput["AUTO_DISCOVER"] = "auto-discover";
56
+ /**
57
+ * The bundling output directory includes a single file which
58
+ * will be used as the final bundle. If the output directory does not
59
+ * include exactly a single file, bundling will fail.
60
+ *
61
+ * Similar to ARCHIVED but for non-archive files
62
+ */
63
+ BundlingOutput["SINGLE_FILE"] = "single-file";
64
+ })(BundlingOutput || (exports.BundlingOutput = BundlingOutput = {}));
65
+ /**
66
+ * The access mechanism used to make source files available to the bundling container and to return the bundling output back to the host
67
+ */
68
+ var BundlingFileAccess;
69
+ (function (BundlingFileAccess) {
70
+ /**
71
+ * Creates temporary volumes and containers to copy files from the host to the bundling container and back.
72
+ * This is slower, but works also in more complex situations with remote or shared docker sockets.
73
+ */
74
+ BundlingFileAccess["VOLUME_COPY"] = "VOLUME_COPY";
75
+ /**
76
+ * The source and output folders will be mounted as bind mount from the host system
77
+ * This is faster and simpler, but less portable than `VOLUME_COPY`.
78
+ */
79
+ BundlingFileAccess["BIND_MOUNT"] = "BIND_MOUNT";
80
+ })(BundlingFileAccess || (exports.BundlingFileAccess = BundlingFileAccess = {}));
81
+ /**
82
+ * A Docker image used for asset bundling
83
+ *
84
+ * @deprecated use DockerImage
85
+ */
86
+ class BundlingDockerImage {
87
+ /**
88
+ * Reference an image on DockerHub or another online registry.
89
+ *
90
+ * @param image the image name
91
+ */
92
+ static fromRegistry(image) {
93
+ return new DockerImage(image);
94
+ }
95
+ /**
96
+ * Reference an image that's built directly from sources on disk.
97
+ *
98
+ * @param path The path to the directory containing the Docker file
99
+ * @param options Docker build options
100
+ *
101
+ * @deprecated use DockerImage.fromBuild()
102
+ */
103
+ static fromAsset(path, options = {}) {
104
+ return DockerImage.fromBuild(path, options);
105
+ }
106
+ /** @param image The Docker image */
107
+ constructor(image, _imageHash) {
108
+ this.image = image;
109
+ this._imageHash = _imageHash;
110
+ }
111
+ /**
112
+ * Provides a stable representation of this image for JSON serialization.
113
+ *
114
+ * @return The overridden image name if set or image hash name in that order
115
+ */
116
+ toJSON() {
117
+ return this._imageHash ?? this.image;
118
+ }
119
+ /**
120
+ * Runs a Docker image
121
+ */
122
+ run(options = {}) {
123
+ const volumes = options.volumes || [];
124
+ const environment = options.environment || {};
125
+ const entrypoint = options.entrypoint?.[0] || null;
126
+ const command = [
127
+ ...(options.entrypoint?.[1] ? [...options.entrypoint.slice(1)] : []),
128
+ ...(options.command ? [...options.command] : []),
129
+ ];
130
+ const dockerArgs = [
131
+ "run",
132
+ "--rm",
133
+ ...(options.securityOpt ? ["--security-opt", options.securityOpt] : []),
134
+ ...(options.network ? ["--network", options.network] : []),
135
+ ...(options.platform ? ["--platform", options.platform] : []),
136
+ ...(options.user ? ["-u", options.user] : []),
137
+ ...(options.volumesFrom
138
+ ? flatten(options.volumesFrom.map((v) => ["--volumes-from", v]))
139
+ : []),
140
+ ...flatten(volumes.map((v) => [
141
+ "-v",
142
+ `${v.hostPath}:${v.containerPath}:${isSeLinux() ? "z," : ""}${v.consistency ?? DockerVolumeConsistency.DELEGATED}`,
143
+ ])),
144
+ ...flatten(Object.entries(environment).map(([k, v]) => ["--env", `${k}=${v}`])),
145
+ ...(options.workingDirectory ? ["-w", options.workingDirectory] : []),
146
+ ...(entrypoint ? ["--entrypoint", entrypoint] : []),
147
+ this.image,
148
+ ...command,
149
+ ];
150
+ (0, asset_staging_1.dockerExec)(dockerArgs);
151
+ }
152
+ /**
153
+ * Copies a file or directory out of the Docker image to the local filesystem.
154
+ *
155
+ * If `outputPath` is omitted the destination path is a temporary directory.
156
+ *
157
+ * @param imagePath the path in the Docker image
158
+ * @param outputPath the destination path for the copy operation
159
+ * @returns the destination path
160
+ */
161
+ cp(imagePath, outputPath) {
162
+ const { stdout } = (0, asset_staging_1.dockerExec)(["create", this.image], {}); // Empty options to avoid stdout redirect here
163
+ const match = stdout.toString().match(/([0-9a-f]{16,})/);
164
+ if (!match) {
165
+ throw new Error("Failed to extract container ID from Docker create output");
166
+ }
167
+ const containerId = match[1];
168
+ const containerPath = `${containerId}:${imagePath}`;
169
+ const destPath = outputPath ?? fs_1.FileSystem.mkdtemp("tcons-docker-cp-");
170
+ try {
171
+ (0, asset_staging_1.dockerExec)(["cp", containerPath, destPath]);
172
+ return destPath;
173
+ }
174
+ catch (err) {
175
+ throw new Error(`Failed to copy files from ${containerPath} to ${destPath}: ${err}`);
176
+ }
177
+ finally {
178
+ (0, asset_staging_1.dockerExec)(["rm", "-v", containerId]);
179
+ }
180
+ }
181
+ }
182
+ exports.BundlingDockerImage = BundlingDockerImage;
183
+ _b = JSII_RTTI_SYMBOL_1;
184
+ BundlingDockerImage[_b] = { fqn: "terraconstructs.BundlingDockerImage", version: "0.1.0" };
185
+ /**
186
+ * A Docker image
187
+ */
188
+ class DockerImage extends BundlingDockerImage {
189
+ /**
190
+ * Builds a Docker image
191
+ *
192
+ * @param path The path to the directory containing the Docker file
193
+ * @param options Docker build options
194
+ */
195
+ static fromBuild(path, options = {}) {
196
+ const buildArgs = options.buildArgs || {};
197
+ if (options.file && (0, path_1.isAbsolute)(options.file)) {
198
+ throw new Error(`"file" must be relative to the docker build directory. Got ${options.file}`);
199
+ }
200
+ // Image tag derived from path and build options
201
+ const input = JSON.stringify({ path, ...options });
202
+ const tagHash = crypto.createHash("sha256").update(input).digest("hex");
203
+ const tag = `tcons-${tagHash}`;
204
+ const dockerArgs = [
205
+ "build",
206
+ "-t",
207
+ tag,
208
+ ...(options.file ? ["-f", (0, path_1.join)(path, options.file)] : []),
209
+ ...(options.platform ? ["--platform", options.platform] : []),
210
+ ...(options.targetStage ? ["--target", options.targetStage] : []),
211
+ ...(options.cacheFrom
212
+ ? [
213
+ ...options.cacheFrom
214
+ .map((cacheFrom) => [
215
+ "--cache-from",
216
+ this.cacheOptionToFlag(cacheFrom),
217
+ ])
218
+ .flat(),
219
+ ]
220
+ : []),
221
+ ...(options.cacheTo
222
+ ? ["--cache-to", this.cacheOptionToFlag(options.cacheTo)]
223
+ : []),
224
+ ...(options.cacheDisabled ? ["--no-cache"] : []),
225
+ ...flatten(Object.entries(buildArgs).map(([k, v]) => ["--build-arg", `${k}=${v}`])),
226
+ path,
227
+ ];
228
+ (0, asset_staging_1.dockerExec)(dockerArgs);
229
+ // Fingerprints the directory containing the Dockerfile we're building and
230
+ // differentiates the fingerprint based on build arguments. We do this so
231
+ // we can provide a stable image hash. Otherwise, the image ID will be
232
+ // different every time the Docker layer cache is cleared, due primarily to
233
+ // timestamps.
234
+ const hash = fs_1.FileSystem.fingerprint(path, {
235
+ extraHash: JSON.stringify(options),
236
+ });
237
+ return new DockerImage(tag, hash);
238
+ }
239
+ /**
240
+ * Reference an image on DockerHub or another online registry.
241
+ *
242
+ * @param image the image name
243
+ */
244
+ static fromRegistry(image) {
245
+ return new DockerImage(image);
246
+ }
247
+ static cacheOptionToFlag(option) {
248
+ let flag = `type=${option.type}`;
249
+ if (option.params) {
250
+ flag +=
251
+ "," +
252
+ Object.entries(option.params)
253
+ .map(([k, v]) => `${k}=${v}`)
254
+ .join(",");
255
+ }
256
+ return flag;
257
+ }
258
+ constructor(image, _imageHash) {
259
+ // It is preferable for the deprecated class to inherit a non-deprecated class.
260
+ // However, in this case, the opposite has occurred which is incompatible with
261
+ // a deprecation feature. See https://github.com/aws/jsii/issues/3102.
262
+ const deprecated = (0, jsii_deprecated_1.quiet)();
263
+ super(image, _imageHash);
264
+ (0, jsii_deprecated_1.reset)(deprecated);
265
+ this.image = image;
266
+ }
267
+ /**
268
+ * Provides a stable representation of this image for JSON serialization.
269
+ *
270
+ * @return The overridden image name if set or image hash name in that order
271
+ */
272
+ toJSON() {
273
+ // It is preferable for the deprecated class to inherit a non-deprecated class.
274
+ // However, in this case, the opposite has occurred which is incompatible with
275
+ // a deprecation feature. See https://github.com/aws/jsii/issues/3102.
276
+ const deprecated = (0, jsii_deprecated_1.quiet)();
277
+ const json = super.toJSON();
278
+ (0, jsii_deprecated_1.reset)(deprecated);
279
+ return json;
280
+ }
281
+ /**
282
+ * Runs a Docker image
283
+ */
284
+ run(options = {}) {
285
+ // It is preferable for the deprecated class to inherit a non-deprecated class.
286
+ // However, in this case, the opposite has occurred which is incompatible with
287
+ // a deprecation feature. See https://github.com/aws/jsii/issues/3102.
288
+ const deprecated = (0, jsii_deprecated_1.quiet)();
289
+ const result = super.run(options);
290
+ (0, jsii_deprecated_1.reset)(deprecated);
291
+ return result;
292
+ }
293
+ /**
294
+ * Copies a file or directory out of the Docker image to the local filesystem.
295
+ *
296
+ * If `outputPath` is omitted the destination path is a temporary directory.
297
+ *
298
+ * @param imagePath the path in the Docker image
299
+ * @param outputPath the destination path for the copy operation
300
+ * @returns the destination path
301
+ */
302
+ cp(imagePath, outputPath) {
303
+ // It is preferable for the deprecated class to inherit a non-deprecated class.
304
+ // However, in this case, the opposite has occurred which is incompatible with
305
+ // a deprecation feature. See https://github.com/aws/jsii/issues/3102.
306
+ const deprecated = (0, jsii_deprecated_1.quiet)();
307
+ const result = super.cp(imagePath, outputPath);
308
+ (0, jsii_deprecated_1.reset)(deprecated);
309
+ return result;
310
+ }
311
+ }
312
+ exports.DockerImage = DockerImage;
313
+ _c = JSII_RTTI_SYMBOL_1;
314
+ DockerImage[_c] = { fqn: "terraconstructs.DockerImage", version: "0.1.0" };
315
+ /**
316
+ * Supported Docker volume consistency types. Only valid on macOS due to the way file storage works on Mac
317
+ */
318
+ var DockerVolumeConsistency;
319
+ (function (DockerVolumeConsistency) {
320
+ /**
321
+ * Read/write operations inside the Docker container are applied immediately on the mounted host machine volumes
322
+ */
323
+ DockerVolumeConsistency["CONSISTENT"] = "consistent";
324
+ /**
325
+ * Read/write operations on mounted Docker volumes are first written inside the container and then synchronized to the host machine
326
+ */
327
+ DockerVolumeConsistency["DELEGATED"] = "delegated";
328
+ /**
329
+ * Read/write operations on mounted Docker volumes are first applied on the host machine and then synchronized to the container
330
+ */
331
+ DockerVolumeConsistency["CACHED"] = "cached";
332
+ })(DockerVolumeConsistency || (exports.DockerVolumeConsistency = DockerVolumeConsistency = {}));
333
+ function flatten(x) {
334
+ return Array.prototype.concat([], ...x);
335
+ }
336
+ function isSeLinux() {
337
+ if (process.platform != "linux") {
338
+ return false;
339
+ }
340
+ try {
341
+ const prog = "selinuxenabled";
342
+ const proc = (0, child_process_1.spawnSync)(prog, [], {
343
+ stdio: [
344
+ // show selinux status output
345
+ "pipe", // get value of stdio
346
+ process.stderr, // redirect stdout to stderr
347
+ "inherit", // inherit stderr
348
+ ],
349
+ });
350
+ if (proc.error) {
351
+ // selinuxenabled not a valid command, therefore not enabled
352
+ return false;
353
+ }
354
+ if (proc.status == 0) {
355
+ // selinux enabled
356
+ return true;
357
+ }
358
+ else {
359
+ // selinux not enabled
360
+ return false;
361
+ }
362
+ }
363
+ catch (e) {
364
+ // If anything goes wrong, assume SELinux is not enabled
365
+ return false;
366
+ }
367
+ }
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVuZGxpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5RkFBeUY7QUFFekYsaURBQTBDO0FBQzFDLGlDQUFpQztBQUNqQywrQkFBd0M7QUFFeEMsNkJBQWtDO0FBQ2xDLDZDQUE2QztBQUM3QywyREFBcUQ7QUFDckQsK0RBQXlEO0FBRXpEOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWlCO0lBQzVCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVc7UUFDL0IsT0FBTyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7O0FBUkgsOENBU0M7OztBQTJIRDs7O0dBR0c7QUFDSCxJQUFZLGNBNEJYO0FBNUJELFdBQVksY0FBYztJQUN4Qjs7OztPQUlHO0lBQ0gsdUNBQXFCLENBQUE7SUFFckI7OztPQUdHO0lBQ0gsK0NBQTZCLENBQUE7SUFFN0I7OztPQUdHO0lBQ0gsaURBQStCLENBQUE7SUFFL0I7Ozs7OztPQU1HO0lBQ0gsNkNBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQTVCVyxjQUFjLDhCQUFkLGNBQWMsUUE0QnpCO0FBa0JEOztHQUVHO0FBQ0gsSUFBWSxrQkFZWDtBQVpELFdBQVksa0JBQWtCO0lBQzVCOzs7T0FHRztJQUNILGlEQUEyQixDQUFBO0lBRTNCOzs7T0FHRztJQUNILCtDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFaVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQVk3QjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLG1CQUFtQjtJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFhO1FBQ3RDLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUNyQixJQUFZLEVBQ1osVUFBOEIsRUFBRTtRQUVoQyxP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QyxFQWJXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBYWxDO0FBMElELFNBQVMsT0FBTyxDQUFDLENBQWE7SUFDNUIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFBLHlCQUFTLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMvQixLQUFLLEVBQUU7Z0JBQ0wsNkJBQTZCO2dCQUM3QixNQUFNLEVBQUUscUJBQXFCO2dCQUM3QixPQUFPLENBQUMsTUFBTSxFQUFFLDRCQUE0QjtnQkFDNUMsU0FBUyxFQUFFLGlCQUFpQjthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsNERBQTREO1lBQzVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixrQkFBa0I7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sQ0FBQztZQUNOLHNCQUFzQjtZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdEQUF3RDtRQUN4RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvYnVuZGxpbmcudHNcblxuaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpc0Fic29sdXRlLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNhY2hlT3B0aW9uIH0gZnJvbSBcIi4vYXNzZXRzXCI7XG5pbXBvcnQgeyBGaWxlU3lzdGVtIH0gZnJvbSBcIi4vZnNcIjtcbi8vIFRPRE86IFJlcGxhY2Ugd2l0aCBAY2RrdGYvcHJvdmlkZXItZG9ja2VyP1xuaW1wb3J0IHsgZG9ja2VyRXhlYyB9IGZyb20gXCIuL3ByaXZhdGUvYXNzZXQtc3RhZ2luZ1wiO1xuaW1wb3J0IHsgcXVpZXQsIHJlc2V0IH0gZnJvbSBcIi4vcHJpdmF0ZS9qc2lpLWRlcHJlY2F0ZWRcIjtcblxuLyoqXG4gKiBNZXRob2RzIHRvIGJ1aWxkIERvY2tlciBDTEkgYXJndW1lbnRzIGZvciBidWlsZHMgdXNpbmcgc2VjcmV0cy5cbiAqXG4gKiBEb2NrZXIgQnVpbGRLaXQgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSBidWlsZCBzZWNyZXRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vYnVpbGQvYnVpbGRraXQvXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2NrZXJCdWlsZFNlY3JldCB7XG4gIC8qKlxuICAgKiBBIERvY2tlciBidWlsZCBzZWNyZXQgZnJvbSBhIGZpbGUgc291cmNlXG4gICAqIEBwYXJhbSBzcmMgVGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLCByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyBUaGUgbGF0dGVyIGhhbGYgcmVxdWlyZWQgZm9yIGAtLXNlY3JldGBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNyYyhzcmM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBzcmM9JHtzcmN9YDtcbiAgfVxufVxuXG4vKipcbiAqIEJ1bmRsaW5nIG9wdGlvbnNcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBEb2NrZXIgaW1hZ2Ugd2hlcmUgdGhlIGNvbW1hbmQgd2lsbCBydW4uXG4gICAqL1xuICByZWFkb25seSBpbWFnZTogRG9ja2VySW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRyeXBvaW50IHRvIHJ1biBpbiB0aGUgRG9ja2VyIGNvbnRhaW5lci5cbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYFsnL2Jpbi9zaCcsICctYyddYFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jZW50cnlwb2ludFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJ1biB0aGUgZW50cnlwb2ludCBkZWZpbmVkIGluIHRoZSBpbWFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnlwb2ludD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gaW4gdGhlIERvY2tlciBjb250YWluZXIuXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBbJ25wbScsICdpbnN0YWxsJ11gXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcnVuIHRoZSBjb21tYW5kIGRlZmluZWQgaW4gdGhlIGltYWdlXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgRG9ja2VyIHZvbHVtZXMgdG8gbW91bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCB2b2x1bWVzIGFyZSBtb3VudGVkXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVzPzogRG9ja2VyVm9sdW1lW107XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRvIG1vdW50IHRoZSBzcGVjaWZpZWQgdm9sdW1lcyBmcm9tXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9ydW4vI21vdW50LXZvbHVtZXMtZnJvbS1jb250YWluZXItLS12b2x1bWVzLWZyb21cbiAgICogQGRlZmF1bHQgLSBubyBjb250YWluZXJzIGFyZSBzcGVjaWZpZWQgdG8gbW91bnQgdm9sdW1lcyBmcm9tXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVzRnJvbT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBXb3JraW5nIGRpcmVjdG9yeSBpbnNpZGUgdGhlIERvY2tlciBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC9hc3NldC1pbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVzZXIgdG8gdXNlIHdoZW4gcnVubmluZyB0aGUgRG9ja2VyIGNvbnRhaW5lci5cbiAgICpcbiAgICogICB1c2VyIHwgdXNlcjpncm91cCB8IHVpZCB8IHVpZDpnaWQgfCB1c2VyOmdpZCB8IHVpZDpncm91cFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvcnVuLyN1c2VyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdWlkOmdpZCBvZiB0aGUgY3VycmVudCB1c2VyIG9yIDEwMDA6MTAwMCBvbiBXaW5kb3dzXG4gICAqL1xuICByZWFkb25seSB1c2VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2NhbCBidW5kbGluZyBwcm92aWRlci5cbiAgICpcbiAgICogVGhlIHByb3ZpZGVyIGltcGxlbWVudHMgYSBtZXRob2QgYHRyeUJ1bmRsZSgpYCB3aGljaCBzaG91bGQgcmV0dXJuIGB0cnVlYFxuICAgKiBpZiBsb2NhbCBidW5kbGluZyB3YXMgcGVyZm9ybWVkLiBJZiBgZmFsc2VgIGlzIHJldHVybmVkLCBkb2NrZXIgYnVuZGxpbmdcbiAgICogd2lsbCBiZSBkb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGJ1bmRsaW5nIHdpbGwgb25seSBiZSBwZXJmb3JtZWQgaW4gYSBEb2NrZXIgY29udGFpbmVyXG4gICAqXG4gICAqL1xuICByZWFkb25seSBsb2NhbD86IElMb2NhbEJ1bmRsaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBvdXRwdXQgdGhhdCB0aGlzIGJ1bmRsaW5nIG9wZXJhdGlvbiBpcyBwcm9kdWNpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEJ1bmRsaW5nT3V0cHV0LkFVVE9fRElTQ09WRVJcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dFR5cGU/OiBCdW5kbGluZ091dHB1dDtcblxuICAvKipcbiAgICogW1NlY3VyaXR5IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvcnVuLyNzZWN1cml0eS1jb25maWd1cmF0aW9uKVxuICAgKiB3aGVuIHJ1bm5pbmcgdGhlIGRvY2tlciBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjdXJpdHkgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlPcHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEb2NrZXIgW05ldHdvcmtpbmcgb3B0aW9uc10oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9jb21tYW5kbGluZS9ydW4vI2Nvbm5lY3QtYS1jb250YWluZXItdG8tYS1uZXR3b3JrLS0tbmV0d29yaylcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBuZXR3b3JraW5nIG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgbWVjaGFuaXNtIHVzZWQgdG8gbWFrZSBzb3VyY2UgZmlsZXMgYXZhaWxhYmxlIHRvIHRoZSBidW5kbGluZyBjb250YWluZXIgYW5kIHRvIHJldHVybiB0aGUgYnVuZGxpbmcgb3V0cHV0IGJhY2sgdG8gdGhlIGhvc3QuXG4gICAqIEBkZWZhdWx0IC0gQnVuZGxpbmdGaWxlQWNjZXNzLkJJTkRfTU9VTlRcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nRmlsZUFjY2Vzcz86IEJ1bmRsaW5nRmlsZUFjY2VzcztcblxuICAvKipcbiAgICogUGxhdGZvcm0gdG8gYnVpbGQgZm9yLiBfUmVxdWlyZXMgRG9ja2VyIEJ1aWxkeF8uXG4gICAqXG4gICAqIFNwZWNpZnkgdGhpcyBwcm9wZXJ0eSB0byBidWlsZCBpbWFnZXMgb24gYSBzcGVjaWZpYyBwbGF0Zm9ybS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwbGF0Zm9ybSBzcGVjaWZpZWQgKHRoZSBjdXJyZW50IG1hY2hpbmUgYXJjaGl0ZWN0dXJlIHdpbGwgYmUgdXNlZClcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIG91dHB1dCB0aGF0IGEgYnVuZGxpbmcgb3BlcmF0aW9uIGlzIHByb2R1Y2luZy5cbiAqXG4gKi9cbmV4cG9ydCBlbnVtIEJ1bmRsaW5nT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBidW5kbGluZyBvdXRwdXQgZGlyZWN0b3J5IGluY2x1ZGVzIGEgc2luZ2xlIC56aXAgb3IgLmphciBmaWxlIHdoaWNoXG4gICAqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZmluYWwgYnVuZGxlLiBJZiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBkb2VzIG5vdFxuICAgKiBpbmNsdWRlIGV4YWN0bHkgYSBzaW5nbGUgYXJjaGl2ZSwgYnVuZGxpbmcgd2lsbCBmYWlsLlxuICAgKi9cbiAgQVJDSElWRUQgPSBcImFyY2hpdmVkXCIsXG5cbiAgLyoqXG4gICAqIFRoZSBidW5kbGluZyBvdXRwdXQgZGlyZWN0b3J5IGNvbnRhaW5zIG9uZSBvciBtb3JlIGZpbGVzIHdoaWNoIHdpbGwgYmVcbiAgICogYXJjaGl2ZWQgYW5kIHVwbG9hZGVkIGFzIGEgLnppcCBmaWxlIHRvIFMzLlxuICAgKi9cbiAgTk9UX0FSQ0hJVkVEID0gXCJub3QtYXJjaGl2ZWRcIixcblxuICAvKipcbiAgICogSWYgdGhlIGJ1bmRsaW5nIG91dHB1dCBkaXJlY3RvcnkgY29udGFpbnMgYSBzaW5nbGUgYXJjaGl2ZSBmaWxlICh6aXAgb3IgamFyKVxuICAgKiBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJ1bmRsZSBvdXRwdXQgYXMtaXMuIE90aGVyd2lzZSwgYWxsIHRoZSBmaWxlcyBpbiB0aGUgYnVuZGxpbmcgb3V0cHV0IGRpcmVjdG9yeSB3aWxsIGJlIHppcHBlZC5cbiAgICovXG4gIEFVVE9fRElTQ09WRVIgPSBcImF1dG8tZGlzY292ZXJcIixcblxuICAvKipcbiAgICogVGhlIGJ1bmRsaW5nIG91dHB1dCBkaXJlY3RvcnkgaW5jbHVkZXMgYSBzaW5nbGUgZmlsZSB3aGljaFxuICAgKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbmFsIGJ1bmRsZS4gSWYgdGhlIG91dHB1dCBkaXJlY3RvcnkgZG9lcyBub3RcbiAgICogaW5jbHVkZSBleGFjdGx5IGEgc2luZ2xlIGZpbGUsIGJ1bmRsaW5nIHdpbGwgZmFpbC5cbiAgICpcbiAgICogU2ltaWxhciB0byBBUkNISVZFRCBidXQgZm9yIG5vbi1hcmNoaXZlIGZpbGVzXG4gICAqL1xuICBTSU5HTEVfRklMRSA9IFwic2luZ2xlLWZpbGVcIixcbn1cblxuLyoqXG4gKiBMb2NhbCBidW5kbGluZ1xuICpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9jYWxCdW5kbGluZyB7XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgZG9ja2VyIGJ1bmRsaW5nIHRvIGFsbG93IHRoZVxuICAgKiBidW5kbGVyIHRvIGJlIGV4ZWN1dGVkIGxvY2FsbHkuIElmIHRoZSBsb2NhbCBidW5kbGVyIGV4aXN0cywgYW5kIGJ1bmRsaW5nXG4gICAqIHdhcyBwZXJmb3JtZWQgbG9jYWxseSwgcmV0dXJuIGB0cnVlYC4gT3RoZXJ3aXNlLCByZXR1cm4gYGZhbHNlYC5cbiAgICpcbiAgICogQHBhcmFtIG91dHB1dERpciB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBidW5kbGVkIGFzc2V0IHNob3VsZCBiZSBvdXRwdXRcbiAgICogQHBhcmFtIG9wdGlvbnMgYnVuZGxpbmcgb3B0aW9ucyBmb3IgdGhpcyBhc3NldFxuICAgKi9cbiAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nLCBvcHRpb25zOiBCdW5kbGluZ09wdGlvbnMpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBhY2Nlc3MgbWVjaGFuaXNtIHVzZWQgdG8gbWFrZSBzb3VyY2UgZmlsZXMgYXZhaWxhYmxlIHRvIHRoZSBidW5kbGluZyBjb250YWluZXIgYW5kIHRvIHJldHVybiB0aGUgYnVuZGxpbmcgb3V0cHV0IGJhY2sgdG8gdGhlIGhvc3RcbiAqL1xuZXhwb3J0IGVudW0gQnVuZGxpbmdGaWxlQWNjZXNzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGVtcG9yYXJ5IHZvbHVtZXMgYW5kIGNvbnRhaW5lcnMgdG8gY29weSBmaWxlcyBmcm9tIHRoZSBob3N0IHRvIHRoZSBidW5kbGluZyBjb250YWluZXIgYW5kIGJhY2suXG4gICAqIFRoaXMgaXMgc2xvd2VyLCBidXQgd29ya3MgYWxzbyBpbiBtb3JlIGNvbXBsZXggc2l0dWF0aW9ucyB3aXRoIHJlbW90ZSBvciBzaGFyZWQgZG9ja2VyIHNvY2tldHMuXG4gICAqL1xuICBWT0xVTUVfQ09QWSA9IFwiVk9MVU1FX0NPUFlcIixcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBhbmQgb3V0cHV0IGZvbGRlcnMgd2lsbCBiZSBtb3VudGVkIGFzIGJpbmQgbW91bnQgZnJvbSB0aGUgaG9zdCBzeXN0ZW1cbiAgICogVGhpcyBpcyBmYXN0ZXIgYW5kIHNpbXBsZXIsIGJ1dCBsZXNzIHBvcnRhYmxlIHRoYW4gYFZPTFVNRV9DT1BZYC5cbiAgICovXG4gIEJJTkRfTU9VTlQgPSBcIkJJTkRfTU9VTlRcIixcbn1cblxuLyoqXG4gKiBBIERvY2tlciBpbWFnZSB1c2VkIGZvciBhc3NldCBidW5kbGluZ1xuICpcbiAqIEBkZXByZWNhdGVkIHVzZSBEb2NrZXJJbWFnZVxuICovXG5leHBvcnQgY2xhc3MgQnVuZGxpbmdEb2NrZXJJbWFnZSB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gaW1hZ2Ugb24gRG9ja2VySHViIG9yIGFub3RoZXIgb25saW5lIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2UgdGhlIGltYWdlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVJlZ2lzdHJ5KGltYWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IERvY2tlckltYWdlKGltYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gaW1hZ2UgdGhhdCdzIGJ1aWx0IGRpcmVjdGx5IGZyb20gc291cmNlcyBvbiBkaXNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIERvY2tlciBmaWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIERvY2tlciBidWlsZCBvcHRpb25zXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBEb2NrZXJJbWFnZS5mcm9tQnVpbGQoKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXNzZXQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IERvY2tlckJ1aWxkT3B0aW9ucyA9IHt9LFxuICApOiBCdW5kbGluZ0RvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEBwYXJhbSBpbWFnZSBUaGUgRG9ja2VyIGltYWdlICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbWFnZUhhc2g/OiBzdHJpbmcsXG4gICkge31cblxuICAvKipcbiAgICogUHJvdmlkZXMgYSBzdGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbWFnZSBmb3IgSlNPTiBzZXJpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBvdmVycmlkZGVuIGltYWdlIG5hbWUgaWYgc2V0IG9yIGltYWdlIGhhc2ggbmFtZSBpbiB0aGF0IG9yZGVyXG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZUhhc2ggPz8gdGhpcy5pbWFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgRG9ja2VyIGltYWdlXG4gICAqL1xuICBwdWJsaWMgcnVuKG9wdGlvbnM6IERvY2tlclJ1bk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHZvbHVtZXMgPSBvcHRpb25zLnZvbHVtZXMgfHwgW107XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBvcHRpb25zLmVudmlyb25tZW50IHx8IHt9O1xuICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBvcHRpb25zLmVudHJ5cG9pbnQ/LlswXSB8fCBudWxsO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBbXG4gICAgICAuLi4ob3B0aW9ucy5lbnRyeXBvaW50Py5bMV0gPyBbLi4ub3B0aW9ucy5lbnRyeXBvaW50LnNsaWNlKDEpXSA6IFtdKSxcbiAgICAgIC4uLihvcHRpb25zLmNvbW1hbmQgPyBbLi4ub3B0aW9ucy5jb21tYW5kXSA6IFtdKSxcbiAgICBdO1xuXG4gICAgY29uc3QgZG9ja2VyQXJnczogc3RyaW5nW10gPSBbXG4gICAgICBcInJ1blwiLFxuICAgICAgXCItLXJtXCIsXG4gICAgICAuLi4ob3B0aW9ucy5zZWN1cml0eU9wdCA/IFtcIi0tc2VjdXJpdHktb3B0XCIsIG9wdGlvbnMuc2VjdXJpdHlPcHRdIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMubmV0d29yayA/IFtcIi0tbmV0d29ya1wiLCBvcHRpb25zLm5ldHdvcmtdIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMucGxhdGZvcm0gPyBbXCItLXBsYXRmb3JtXCIsIG9wdGlvbnMucGxhdGZvcm1dIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMudXNlciA/IFtcIi11XCIsIG9wdGlvbnMudXNlcl0gOiBbXSksXG4gICAgICAuLi4ob3B0aW9ucy52b2x1bWVzRnJvbVxuICAgICAgICA/IGZsYXR0ZW4ob3B0aW9ucy52b2x1bWVzRnJvbS5tYXAoKHYpID0+IFtcIi0tdm9sdW1lcy1mcm9tXCIsIHZdKSlcbiAgICAgICAgOiBbXSksXG4gICAgICAuLi5mbGF0dGVuKFxuICAgICAgICB2b2x1bWVzLm1hcCgodikgPT4gW1xuICAgICAgICAgIFwiLXZcIixcbiAgICAgICAgICBgJHt2Lmhvc3RQYXRofToke3YuY29udGFpbmVyUGF0aH06JHtpc1NlTGludXgoKSA/IFwieixcIiA6IFwiXCJ9JHt2LmNvbnNpc3RlbmN5ID8/IERvY2tlclZvbHVtZUNvbnNpc3RlbmN5LkRFTEVHQVRFRH1gLFxuICAgICAgICBdKSxcbiAgICAgICksXG4gICAgICAuLi5mbGF0dGVuKFxuICAgICAgICBPYmplY3QuZW50cmllcyhlbnZpcm9ubWVudCkubWFwKChbaywgdl0pID0+IFtcIi0tZW52XCIsIGAke2t9PSR7dn1gXSksXG4gICAgICApLFxuICAgICAgLi4uKG9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSA/IFtcIi13XCIsIG9wdGlvbnMud29ya2luZ0RpcmVjdG9yeV0gOiBbXSksXG4gICAgICAuLi4oZW50cnlwb2ludCA/IFtcIi0tZW50cnlwb2ludFwiLCBlbnRyeXBvaW50XSA6IFtdKSxcbiAgICAgIHRoaXMuaW1hZ2UsXG4gICAgICAuLi5jb21tYW5kLFxuICAgIF07XG5cbiAgICBkb2NrZXJFeGVjKGRvY2tlckFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyBhIGZpbGUgb3IgZGlyZWN0b3J5IG91dCBvZiB0aGUgRG9ja2VyIGltYWdlIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtLlxuICAgKlxuICAgKiBJZiBgb3V0cHV0UGF0aGAgaXMgb21pdHRlZCB0aGUgZGVzdGluYXRpb24gcGF0aCBpcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZVBhdGggdGhlIHBhdGggaW4gdGhlIERvY2tlciBpbWFnZVxuICAgKiBAcGFyYW0gb3V0cHV0UGF0aCB0aGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhlIGNvcHkgb3BlcmF0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBwYXRoXG4gICAqL1xuICBwdWJsaWMgY3AoaW1hZ2VQYXRoOiBzdHJpbmcsIG91dHB1dFBhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBkb2NrZXJFeGVjKFtcImNyZWF0ZVwiLCB0aGlzLmltYWdlXSwge30pOyAvLyBFbXB0eSBvcHRpb25zIHRvIGF2b2lkIHN0ZG91dCByZWRpcmVjdCBoZXJlXG4gICAgY29uc3QgbWF0Y2ggPSBzdGRvdXQudG9TdHJpbmcoKS5tYXRjaCgvKFswLTlhLWZdezE2LH0pLyk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleHRyYWN0IGNvbnRhaW5lciBJRCBmcm9tIERvY2tlciBjcmVhdGUgb3V0cHV0XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lcklkID0gbWF0Y2hbMV07XG4gICAgY29uc3QgY29udGFpbmVyUGF0aCA9IGAke2NvbnRhaW5lcklkfToke2ltYWdlUGF0aH1gO1xuICAgIGNvbnN0IGRlc3RQYXRoID0gb3V0cHV0UGF0aCA/PyBGaWxlU3lzdGVtLm1rZHRlbXAoXCJ0Y29ucy1kb2NrZXItY3AtXCIpO1xuICAgIHRyeSB7XG4gICAgICBkb2NrZXJFeGVjKFtcImNwXCIsIGNvbnRhaW5lclBhdGgsIGRlc3RQYXRoXSk7XG4gICAgICByZXR1cm4gZGVzdFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gY29weSBmaWxlcyBmcm9tICR7Y29udGFpbmVyUGF0aH0gdG8gJHtkZXN0UGF0aH06ICR7ZXJyfWAsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkb2NrZXJFeGVjKFtcInJtXCIsIFwiLXZcIiwgY29udGFpbmVySWRdKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIERvY2tlciBpbWFnZVxuICovXG5leHBvcnQgY2xhc3MgRG9ja2VySW1hZ2UgZXh0ZW5kcyBCdW5kbGluZ0RvY2tlckltYWdlIHtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhIERvY2tlciBpbWFnZVxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIERvY2tlciBmaWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIERvY2tlciBidWlsZCBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21CdWlsZChwYXRoOiBzdHJpbmcsIG9wdGlvbnM6IERvY2tlckJ1aWxkT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYnVpbGRBcmdzID0gb3B0aW9ucy5idWlsZEFyZ3MgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5maWxlICYmIGlzQWJzb2x1dGUob3B0aW9ucy5maWxlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXCJmaWxlXCIgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgZG9ja2VyIGJ1aWxkIGRpcmVjdG9yeS4gR290ICR7b3B0aW9ucy5maWxlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEltYWdlIHRhZyBkZXJpdmVkIGZyb20gcGF0aCBhbmQgYnVpbGQgb3B0aW9uc1xuICAgIGNvbnN0IGlucHV0ID0gSlNPTi5zdHJpbmdpZnkoeyBwYXRoLCAuLi5vcHRpb25zIH0pO1xuICAgIGNvbnN0IHRhZ0hhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaW5wdXQpLmRpZ2VzdChcImhleFwiKTtcbiAgICBjb25zdCB0YWcgPSBgdGNvbnMtJHt0YWdIYXNofWA7XG5cbiAgICBjb25zdCBkb2NrZXJBcmdzOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwiYnVpbGRcIixcbiAgICAgIFwiLXRcIixcbiAgICAgIHRhZyxcbiAgICAgIC4uLihvcHRpb25zLmZpbGUgPyBbXCItZlwiLCBqb2luKHBhdGgsIG9wdGlvbnMuZmlsZSldIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMucGxhdGZvcm0gPyBbXCItLXBsYXRmb3JtXCIsIG9wdGlvbnMucGxhdGZvcm1dIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMudGFyZ2V0U3RhZ2UgPyBbXCItLXRhcmdldFwiLCBvcHRpb25zLnRhcmdldFN0YWdlXSA6IFtdKSxcbiAgICAgIC4uLihvcHRpb25zLmNhY2hlRnJvbVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuY2FjaGVGcm9tXG4gICAgICAgICAgICAgIC5tYXAoKGNhY2hlRnJvbSkgPT4gW1xuICAgICAgICAgICAgICAgIFwiLS1jYWNoZS1mcm9tXCIsXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZU9wdGlvblRvRmxhZyhjYWNoZUZyb20pLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAuZmxhdCgpLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4ob3B0aW9ucy5jYWNoZVRvXG4gICAgICAgID8gW1wiLS1jYWNoZS10b1wiLCB0aGlzLmNhY2hlT3B0aW9uVG9GbGFnKG9wdGlvbnMuY2FjaGVUbyldXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKG9wdGlvbnMuY2FjaGVEaXNhYmxlZCA/IFtcIi0tbm8tY2FjaGVcIl0gOiBbXSksXG4gICAgICAuLi5mbGF0dGVuKFxuICAgICAgICBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpLm1hcCgoW2ssIHZdKSA9PiBbXCItLWJ1aWxkLWFyZ1wiLCBgJHtrfT0ke3Z9YF0pLFxuICAgICAgKSxcbiAgICAgIHBhdGgsXG4gICAgXTtcblxuICAgIGRvY2tlckV4ZWMoZG9ja2VyQXJncyk7XG5cbiAgICAvLyBGaW5nZXJwcmludHMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBEb2NrZXJmaWxlIHdlJ3JlIGJ1aWxkaW5nIGFuZFxuICAgIC8vIGRpZmZlcmVudGlhdGVzIHRoZSBmaW5nZXJwcmludCBiYXNlZCBvbiBidWlsZCBhcmd1bWVudHMuIFdlIGRvIHRoaXMgc29cbiAgICAvLyB3ZSBjYW4gcHJvdmlkZSBhIHN0YWJsZSBpbWFnZSBoYXNoLiBPdGhlcndpc2UsIHRoZSBpbWFnZSBJRCB3aWxsIGJlXG4gICAgLy8gZGlmZmVyZW50IGV2ZXJ5IHRpbWUgdGhlIERvY2tlciBsYXllciBjYWNoZSBpcyBjbGVhcmVkLCBkdWUgcHJpbWFyaWx5IHRvXG4gICAgLy8gdGltZXN0YW1wcy5cbiAgICBjb25zdCBoYXNoID0gRmlsZVN5c3RlbS5maW5nZXJwcmludChwYXRoLCB7XG4gICAgICBleHRyYUhhc2g6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgRG9ja2VySW1hZ2UodGFnLCBoYXNoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gaW1hZ2Ugb24gRG9ja2VySHViIG9yIGFub3RoZXIgb25saW5lIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBAcGFyYW0gaW1hZ2UgdGhlIGltYWdlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZnJvbVJlZ2lzdHJ5KGltYWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IERvY2tlckltYWdlKGltYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlT3B0aW9uVG9GbGFnKG9wdGlvbjogRG9ja2VyQ2FjaGVPcHRpb24pOiBzdHJpbmcge1xuICAgIGxldCBmbGFnID0gYHR5cGU9JHtvcHRpb24udHlwZX1gO1xuICAgIGlmIChvcHRpb24ucGFyYW1zKSB7XG4gICAgICBmbGFnICs9XG4gICAgICAgIFwiLFwiICtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9uLnBhcmFtcylcbiAgICAgICAgICAubWFwKChbaywgdl0pID0+IGAke2t9PSR7dn1gKVxuICAgICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGZsYWc7XG4gIH1cblxuICAvKiogVGhlIERvY2tlciBpbWFnZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihpbWFnZTogc3RyaW5nLCBfaW1hZ2VIYXNoPzogc3RyaW5nKSB7XG4gICAgLy8gSXQgaXMgcHJlZmVyYWJsZSBmb3IgdGhlIGRlcHJlY2F0ZWQgY2xhc3MgdG8gaW5oZXJpdCBhIG5vbi1kZXByZWNhdGVkIGNsYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIG9wcG9zaXRlIGhhcyBvY2N1cnJlZCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aFxuICAgIC8vIGEgZGVwcmVjYXRpb24gZmVhdHVyZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzEwMi5cbiAgICBjb25zdCBkZXByZWNhdGVkID0gcXVpZXQoKTtcblxuICAgIHN1cGVyKGltYWdlLCBfaW1hZ2VIYXNoKTtcblxuICAgIHJlc2V0KGRlcHJlY2F0ZWQpO1xuICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIHN0YWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGltYWdlIGZvciBKU09OIHNlcmlhbGl6YXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIG92ZXJyaWRkZW4gaW1hZ2UgbmFtZSBpZiBzZXQgb3IgaW1hZ2UgaGFzaCBuYW1lIGluIHRoYXQgb3JkZXJcbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKSB7XG4gICAgLy8gSXQgaXMgcHJlZmVyYWJsZSBmb3IgdGhlIGRlcHJlY2F0ZWQgY2xhc3MgdG8gaW5oZXJpdCBhIG5vbi1kZXByZWNhdGVkIGNsYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIG9wcG9zaXRlIGhhcyBvY2N1cnJlZCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aFxuICAgIC8vIGEgZGVwcmVjYXRpb24gZmVhdHVyZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzEwMi5cbiAgICBjb25zdCBkZXByZWNhdGVkID0gcXVpZXQoKTtcblxuICAgIGNvbnN0IGpzb24gPSBzdXBlci50b0pTT04oKTtcblxuICAgIHJlc2V0KGRlcHJlY2F0ZWQpO1xuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBEb2NrZXIgaW1hZ2VcbiAgICovXG4gIHB1YmxpYyBydW4ob3B0aW9uczogRG9ja2VyUnVuT3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gSXQgaXMgcHJlZmVyYWJsZSBmb3IgdGhlIGRlcHJlY2F0ZWQgY2xhc3MgdG8gaW5oZXJpdCBhIG5vbi1kZXByZWNhdGVkIGNsYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIG9wcG9zaXRlIGhhcyBvY2N1cnJlZCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aFxuICAgIC8vIGEgZGVwcmVjYXRpb24gZmVhdHVyZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzEwMi5cbiAgICBjb25zdCBkZXByZWNhdGVkID0gcXVpZXQoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnJ1bihvcHRpb25zKTtcblxuICAgIHJlc2V0KGRlcHJlY2F0ZWQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIGEgZmlsZSBvciBkaXJlY3Rvcnkgb3V0IG9mIHRoZSBEb2NrZXIgaW1hZ2UgdG8gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uXG4gICAqXG4gICAqIElmIGBvdXRwdXRQYXRoYCBpcyBvbWl0dGVkIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIGltYWdlUGF0aCB0aGUgcGF0aCBpbiB0aGUgRG9ja2VyIGltYWdlXG4gICAqIEBwYXJhbSBvdXRwdXRQYXRoIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgY29weSBvcGVyYXRpb25cbiAgICogQHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIHBhdGhcbiAgICovXG4gIHB1YmxpYyBjcChpbWFnZVBhdGg6IHN0cmluZywgb3V0cHV0UGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gSXQgaXMgcHJlZmVyYWJsZSBmb3IgdGhlIGRlcHJlY2F0ZWQgY2xhc3MgdG8gaW5oZXJpdCBhIG5vbi1kZXByZWNhdGVkIGNsYXNzLlxuICAgIC8vIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIG9wcG9zaXRlIGhhcyBvY2N1cnJlZCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aFxuICAgIC8vIGEgZGVwcmVjYXRpb24gZmVhdHVyZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzEwMi5cbiAgICBjb25zdCBkZXByZWNhdGVkID0gcXVpZXQoKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmNwKGltYWdlUGF0aCwgb3V0cHV0UGF0aCk7XG5cbiAgICByZXNldChkZXByZWNhdGVkKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbi8qKlxuICogQSBEb2NrZXIgdm9sdW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyVm9sdW1lIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBvbiB0aGUgaG9zdCBtYWNoaW5lXG4gICAqL1xuICByZWFkb25seSBob3N0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB3aGVyZSB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgbW91bnRlZCBpbiB0aGUgY29udGFpbmVyXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1vdW50IGNvbnNpc3RlbmN5LiBPbmx5IGFwcGxpY2FibGUgZm9yIG1hY09TXG4gICAqXG4gICAqIEBkZWZhdWx0IERvY2tlckNvbnNpc3RlbmN5LkRFTEVHQVRFRFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL3N0b3JhZ2UvYmluZC1tb3VudHMvI2NvbmZpZ3VyZS1tb3VudC1jb25zaXN0ZW5jeS1mb3ItbWFjb3NcbiAgICovXG4gIHJlYWRvbmx5IGNvbnNpc3RlbmN5PzogRG9ja2VyVm9sdW1lQ29uc2lzdGVuY3k7XG59XG5cbi8qKlxuICogU3VwcG9ydGVkIERvY2tlciB2b2x1bWUgY29uc2lzdGVuY3kgdHlwZXMuIE9ubHkgdmFsaWQgb24gbWFjT1MgZHVlIHRvIHRoZSB3YXkgZmlsZSBzdG9yYWdlIHdvcmtzIG9uIE1hY1xuICovXG5leHBvcnQgZW51bSBEb2NrZXJWb2x1bWVDb25zaXN0ZW5jeSB7XG4gIC8qKlxuICAgKiBSZWFkL3dyaXRlIG9wZXJhdGlvbnMgaW5zaWRlIHRoZSBEb2NrZXIgY29udGFpbmVyIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IG9uIHRoZSBtb3VudGVkIGhvc3QgbWFjaGluZSB2b2x1bWVzXG4gICAqL1xuICBDT05TSVNURU5UID0gXCJjb25zaXN0ZW50XCIsXG4gIC8qKlxuICAgKiBSZWFkL3dyaXRlIG9wZXJhdGlvbnMgb24gbW91bnRlZCBEb2NrZXIgdm9sdW1lcyBhcmUgZmlyc3Qgd3JpdHRlbiBpbnNpZGUgdGhlIGNvbnRhaW5lciBhbmQgdGhlbiBzeW5jaHJvbml6ZWQgdG8gdGhlIGhvc3QgbWFjaGluZVxuICAgKi9cbiAgREVMRUdBVEVEID0gXCJkZWxlZ2F0ZWRcIixcbiAgLyoqXG4gICAqIFJlYWQvd3JpdGUgb3BlcmF0aW9ucyBvbiBtb3VudGVkIERvY2tlciB2b2x1bWVzIGFyZSBmaXJzdCBhcHBsaWVkIG9uIHRoZSBob3N0IG1hY2hpbmUgYW5kIHRoZW4gc3luY2hyb25pemVkIHRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIENBQ0hFRCA9IFwiY2FjaGVkXCIsXG59XG5cbi8qKlxuICogRG9ja2VyIHJ1biBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyUnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZW50cnlwb2ludCB0byBydW4gaW4gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBydW4gdGhlIGVudHJ5cG9pbnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gcnVuIGluIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcnVuIHRoZSBjb21tYW5kIGRlZmluZWQgaW4gdGhlIGltYWdlXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvY2tlciB2b2x1bWVzIHRvIG1vdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHZvbHVtZXMgYXJlIG1vdW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXM/OiBEb2NrZXJWb2x1bWVbXTtcblxuICAvKipcbiAgICogV2hlcmUgdG8gbW91bnQgdGhlIHNwZWNpZmllZCB2b2x1bWVzIGZyb21cbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2NvbW1hbmRsaW5lL3J1bi8jbW91bnQtdm9sdW1lcy1mcm9tLWNvbnRhaW5lci0tLXZvbHVtZXMtZnJvbVxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbnRhaW5lcnMgYXJlIHNwZWNpZmllZCB0byBtb3VudCB2b2x1bWVzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZXNGcm9tPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogV29ya2luZyBkaXJlY3RvcnkgaW5zaWRlIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaW1hZ2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVzZXIgdG8gdXNlIHdoZW4gcnVubmluZyB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJvb3Qgb3IgaW1hZ2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlcj86IHN0cmluZztcblxuICAvKipcbiAgICogW1NlY3VyaXR5IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvcnVuLyNzZWN1cml0eS1jb25maWd1cmF0aW9uKVxuICAgKiB3aGVuIHJ1bm5pbmcgdGhlIGRvY2tlciBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2VjdXJpdHkgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlPcHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvY2tlciBbTmV0d29ya2luZyBvcHRpb25zXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2NvbW1hbmRsaW5lL3J1bi8jY29ubmVjdC1hLWNvbnRhaW5lci10by1hLW5ldHdvcmstLS1uZXR3b3JrKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldHdvcmtpbmcgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29yaz86IHN0cmluZztcblxuICAvKipcbiAgICogU2V0IHBsYXRmb3JtIGlmIHNlcnZlciBpcyBtdWx0aS1wbGF0Zm9ybSBjYXBhYmxlLiBfUmVxdWlyZXMgRG9ja2VyIEVuZ2luZSBBUEkgdjEuMzgrXy5cbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYGxpbnV4L2FtZDY0YFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBsYXRmb3JtIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRG9ja2VyIGJ1aWxkIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJCdWlsZE9wdGlvbnMge1xuICAvKipcbiAgICogQnVpbGQgYXJnc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGJ1aWxkIGFyZ3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIERvY2tlcmZpbGUsIG11c3QgcmVsYXRpdmUgdG8gdGhlIGRvY2tlciBidWlsZCBwYXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgRG9ja2VyZmlsZWBcbiAgICovXG4gIHJlYWRvbmx5IGZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldCBwbGF0Zm9ybSBpZiBzZXJ2ZXIgaXMgbXVsdGktcGxhdGZvcm0gY2FwYWJsZS4gX1JlcXVpcmVzIERvY2tlciBFbmdpbmUgQVBJIHYxLjM4K18uXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBsaW51eC9hbWQ2NGBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwbGF0Zm9ybSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXQgYnVpbGQgdGFyZ2V0IGZvciBtdWx0aS1zdGFnZSBjb250YWluZXIgYnVpbGRzLiBBbnkgc3RhZ2UgZGVmaW5lZCBhZnRlcndhcmRzIHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYGJ1aWxkLWVudmBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBCdWlsZCBhbGwgc3RhZ2VzIGRlZmluZWQgaW4gdGhlIERvY2tlcmZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFN0YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBmcm9tIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgYGRvY2tlciBidWlsZGAgY29tbWFuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjYWNoZSBmcm9tIGFyZ3MgYXJlIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVGcm9tPzogRG9ja2VyQ2FjaGVPcHRpb25bXTtcblxuICAvKipcbiAgICogQ2FjaGUgdG8gb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBgZG9ja2VyIGJ1aWxkYCBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNhY2hlIHRvIGFyZ3MgYXJlIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVUbz86IERvY2tlckNhY2hlT3B0aW9uO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBjYWNoZSBhbmQgcGFzcyBgLS1uby1jYWNoZWAgdG8gdGhlIGBkb2NrZXIgYnVpbGRgIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY2FjaGUgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oeDogc3RyaW5nW11bXSkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdChbXSwgLi4ueCk7XG59XG5cbmZ1bmN0aW9uIGlzU2VMaW51eCgpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gXCJsaW51eFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvZyA9IFwic2VsaW51eGVuYWJsZWRcIjtcbiAgICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKHByb2csIFtdLCB7XG4gICAgICBzdGRpbzogW1xuICAgICAgICAvLyBzaG93IHNlbGludXggc3RhdHVzIG91dHB1dFxuICAgICAgICBcInBpcGVcIiwgLy8gZ2V0IHZhbHVlIG9mIHN0ZGlvXG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLCAvLyByZWRpcmVjdCBzdGRvdXQgdG8gc3RkZXJyXG4gICAgICAgIFwiaW5oZXJpdFwiLCAvLyBpbmhlcml0IHN0ZGVyclxuICAgICAgXSxcbiAgICB9KTtcbiAgICBpZiAocHJvYy5lcnJvcikge1xuICAgICAgLy8gc2VsaW51eGVuYWJsZWQgbm90IGEgdmFsaWQgY29tbWFuZCwgdGhlcmVmb3JlIG5vdCBlbmFibGVkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9jLnN0YXR1cyA9PSAwKSB7XG4gICAgICAvLyBzZWxpbnV4IGVuYWJsZWRcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZWxpbnV4IG5vdCBlbmFibGVkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgYXNzdW1lIFNFTGludXggaXMgbm90IGVuYWJsZWRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -27,7 +27,7 @@ class GridTags {
27
27
  }
28
28
  exports.GridTags = GridTags;
29
29
  _a = JSII_RTTI_SYMBOL_1;
30
- GridTags[_a] = { fqn: "terraconstructs.GridTags", version: "0.0.24" };
30
+ GridTags[_a] = { fqn: "terraconstructs.GridTags", version: "0.1.0" };
31
31
  /**
32
32
  * Base class for all TerraConstructs
33
33
  *
@@ -88,5 +88,5 @@ class TerraConstructBase extends cdktf_1.TerraformElement {
88
88
  }
89
89
  exports.TerraConstructBase = TerraConstructBase;
90
90
  _b = JSII_RTTI_SYMBOL_1;
91
- TerraConstructBase[_b] = { fqn: "terraconstructs.TerraConstructBase", version: "0.0.24" };
91
+ TerraConstructBase[_b] = { fqn: "terraconstructs.TerraConstructBase", version: "0.1.0" };
92
92
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3RydWN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQW1EQSxrRUFNQzs7QUF6REQsaUNBUWU7QUFFZiw2Q0FBeUM7QUF3Q3pDLDREQUE0RDtBQUM1RCxTQUFnQiwyQkFBMkIsQ0FDekMsQ0FBYTtJQUViLE9BQU8sQ0FDTCx5QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLGdEQUFnRDtBQUNoRCxNQUFhLFFBQVE7SUFDbkIsWUFBb0IsU0FBaUM7UUFBakMsY0FBUyxHQUFULFNBQVMsQ0FBd0I7SUFBRyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsbUVBQW1FO1lBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ3pDLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7O0FBVEgsNEJBVUM7OztBQUVEOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFDcEIsU0FBUSx3QkFBZ0I7SUFHeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQXFCO1FBQ2pELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ2hDLENBQUMsQ0FBQyx5QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNwRSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQVlEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sc0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sc0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDMUQsQ0FBQztJQU9ELFlBQ0UsS0FBZ0IsRUFDQyxXQUFtQixFQUNwQyxRQUE2QixFQUFFO1FBRS9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUlwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxXQUFXLFNBQVMsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWTtZQUNmLEtBQUssQ0FBQyxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRWpFLGVBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsa0RBQWtEO2FBQ2hFLEdBQUcsQ0FDRixJQUFJLFFBQVEsQ0FBQztZQUNYLENBQUMsR0FBRyxlQUFlLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDNUQsQ0FBQyxHQUFHLGVBQWUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ3hCLENBQUMsQ0FDSCxDQUFDO1FBQ0osTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUM7UUFDdkQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLHVCQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFBRSxlQUFlLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQy9DLEtBQUssRUFBRSxZQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxxRkFBcUY7SUFDckYsOERBQThEO0lBQzlELElBQVcsR0FBRztRQUNaLFFBQVE7UUFDUixzQkFBc0I7UUFDdEIsZ0JBQWdCO1FBQ2hCLHlFQUF5RTtRQUN6RSxNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3RILENBQUM7UUFDRixJQUFJO0lBQ04sQ0FBQzs7QUFqRkgsZ0RBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTGF6eSxcbiAgVGVycmFmb3JtUmVzb3VyY2UsXG4gIFRlcnJhZm9ybUVsZW1lbnQsXG4gIFRlcnJhZm9ybU91dHB1dCxcbiAgVGVycmFmb3JtTWV0YUFyZ3VtZW50cyxcbiAgQXNwZWN0cyxcbiAgSUFzcGVjdCxcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU3RhY2tCYXNlIH0gZnJvbSBcIi4vc3RhY2stYmFzZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBUZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBmcmllbmRseSBuYW1lIGZvciBUZXJyYUNvbnN0cnVjdCByZXNvdXJjZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBgZW52aXJvbm1lbnROYW1lLWlkYFxuICAgKi9cbiAgcmVhZG9ubHkgZnJpZW5kbHlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlZ2lzdGVyIFRlcnJhZm9ybSBvdXRwdXRzIGZvciB0aGlzIFRlcnJhQ29uc3RydWN0XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWdpc3Rlck91dHB1dHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIG91dHB1dHMgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVycmFDb25zdHJ1Y3QgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEVudmlyb25tZW50IE5hbWUgcGFzc2VkIGluIGZyb20gdGhlIENMSVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdyaWRVVUlEOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgYXdzIHNwZWNpZmljLCBzaG91bGQgYmUgbW92ZWQgdG8gYXdzIG1vZHVsZVxuZXhwb3J0IHR5cGUgVGFnZ2FibGVDb25zdHJ1Y3QgPSBUZXJyYWZvcm1SZXNvdXJjZSAmIHtcbiAgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHRhZ3NJbnB1dD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59O1xuXG4vLyBUT0RPOiB0aGlzIGlzIGF3cyBzcGVjaWZpYywgc2hvdWxkIGJlIG1vdmVkIHRvIGF3cyBtb2R1bGVcbmV4cG9ydCBmdW5jdGlvbiBpc1RhZ2dhYmxlVGVycmFmb3JtUmVzb3VyY2UoXG4gIHg6IElDb25zdHJ1Y3QsXG4pOiB4IGlzIFRhZ2dhYmxlQ29uc3RydWN0IHtcbiAgcmV0dXJuIChcbiAgICBUZXJyYWZvcm1SZXNvdXJjZS5pc1RlcnJhZm9ybVJlc291cmNlKHgpICYmIFwidGFnc1wiIGluIHggJiYgXCJ0YWdzSW5wdXRcIiBpbiB4XG4gICk7XG59XG5cbmNvbnN0IEdSSURfVEFHX1BSRUZJWCA9IFwiZ3JpZFwiO1xuXG4vLyBBZGQgR3JpZCBUYWdzIHRvIGFsbCBUZXJyYUNvbnN0cnVjdCByZXNvdXJjZXNcbmV4cG9ydCBjbGFzcyBHcmlkVGFncyBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhZ3NUb0FkZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge31cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIGlmIChpc1RhZ2dhYmxlVGVycmFmb3JtUmVzb3VyY2Uobm9kZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2Nka3RmL2NvbmNlcHRzL2FzcGVjdHNcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gbm9kZS50YWdzSW5wdXQgfHwge307XG4gICAgICAvLyBUT0RPOiBCdWcgLSB0YWdzVG9BZGQgYXJlIG92ZXJ3cml0dGVuIGJ5IGN1cnJlblRhZ3NcbiAgICAgIG5vZGUudGFncyA9IHsgLi4udGhpcy50YWdzVG9BZGQsIC4uLmN1cnJlbnRUYWdzIH07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIFRlcnJhQ29uc3RydWN0c1xuICpcbiAqIEFsbG93cyBhIFRlcnJhQ29uc3RydWN0IHRvIGxhemlseSByZWdpc3RlciBpdHMgb3V0cHV0cyB3aXRoIGl0cyBwYXJlbnQgU3RhY2tcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlcnJhQ29uc3RydWN0QmFzZVxuICBleHRlbmRzIFRlcnJhZm9ybUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJVGVycmFDb25zdHJ1Y3RcbntcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uc3RydWN0IHdhcyBjcmVhdGVkIGJ5IENES1RGLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzT3duZWRSZXNvdXJjZShjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkXG4gICAgICA/IFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UoY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB1bmRlciB3aGljaCB0aGUgb3V0cHV0cyBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgcGFyZW50IFNjb3BlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXJyYUNvbnN0cnVjdCBmcmllbmRseSBuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJpZW5kbHlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRlcnJhQ29uc3RydWN0IHVuaXF1ZSBncmlkIGlkZW50aWZpZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgZ3JpZFVVSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RhY2tCYXNlLm9mVGVycmFDb25zdHJ1Y3QodGhpcykuZ3JpZFVVSUQ7XG4gIH1cblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgTmFtZSBwYXNzZWQgaW4gZnJvbSB0aGUgQ0xJXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdGFja0Jhc2Uub2ZUZXJyYUNvbnN0cnVjdCh0aGlzKS5lbnZpcm9ubWVudE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0cyB0byByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgU2NvcGUgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBvdXRwdXRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PjsgLy8gVE9ETzogc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgdW5kZWZpbmVkP1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RJZDogc3RyaW5nLFxuICAgIHByb3BzOiBUZXJyYUNvbnN0cnVjdFByb3BzID0ge30sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBjb25zdHJ1Y3RJZCk7XG4gICAgdGhpcy5vdXRwdXROYW1lID0gcHJvcHMub3V0cHV0TmFtZSB8fCBgJHtjb25zdHJ1Y3RJZH1PdXRwdXRzYDtcbiAgICB0aGlzLmZyaWVuZGx5TmFtZSA9XG4gICAgICBwcm9wcy5mcmllbmRseU5hbWUgfHwgYCR7dGhpcy5lbnZpcm9ubWVudE5hbWV9LSR7Y29uc3RydWN0SWR9YDtcblxuICAgIEFzcGVjdHMub2YodGhpcykgLy8gQWRkIEdyaWQgdGFncyB0byBldmVyeSByZXNvdXJjZSBkZWZpbmVkIHdpdGhpbi5cbiAgICAgIC5hZGQoXG4gICAgICAgIG5ldyBHcmlkVGFncyh7XG4gICAgICAgICAgW2Ake0dSSURfVEFHX1BSRUZJWH06RW52aXJvbm1lbnROYW1lYF06IHRoaXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICAgIFtgJHtHUklEX1RBR19QUkVGSVh9OlVVSURgXTogdGhpcy5ncmlkVVVJRCxcbiAgICAgICAgICBOYW1lOiB0aGlzLmZyaWVuZGx5TmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIGNvbnN0IHJlZ2lzdGVyT3V0cHV0cyA9IHByb3BzLnJlZ2lzdGVyT3V0cHV0cyB8fCBmYWxzZTtcbiAgICBpZiAocmVnaXN0ZXJPdXRwdXRzKSB7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHNjb3BlLCB0aGlzLm91dHB1dE5hbWUsIHtcbiAgICAgICAgc3RhdGljSWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgT3V0cHV0cyBmb3IgJHt0aGlzLmZyaWVuZGx5TmFtZX1gLFxuICAgICAgICB2YWx1ZTogTGF6eS5hbnlWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IHRoaXMub3V0cHV0cyB8fCBudWxsIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yY2UgdXNhZ2Ugb2Ygbm9kZS5hZGREZXBlbmRlbmN5IGluc3RlYWQgb2YgcGFzc2luZyBUZXJyYUNvbnN0cnVjdHMgdmlhIGRlcGVuZHNPblxuICAvLyBSZWZlcnJpbmcgYSBUZXJyYUNvbnN0cnVjdCBieSBmcW4gYWx3YXlzIHRyaWdnZXJzIGFuIGVycm9yP1xuICBwdWJsaWMgZ2V0IGZxbigpOiBzdHJpbmcge1xuICAgIC8vIHRyeSB7XG4gICAgLy8gICByZXR1cm4gc3VwZXIuZnFuO1xuICAgIC8vIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvY29uc3RydWN0cy9ibG9iLzEwLngvc3JjL2NvbnN0cnVjdC50cyNMMzQ1XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzZSBDb25zdHJ1Y3Qgbm9kZS5hZGREZXBlbmRlbmN5IGluc3RlYWQgb2YgcGFzc2luZyBUZXJyYUNvbnN0cnVjdCBmcW4gJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ICR7dGhpcy5jb25zdHJ1Y3RJZH1gLFxuICAgICk7XG4gICAgLy8gfVxuICB9XG59XG4iXX0=
package/lib/duration.js CHANGED
@@ -283,7 +283,7 @@ class Duration {
283
283
  }
284
284
  exports.Duration = Duration;
285
285
  _a = JSII_RTTI_SYMBOL_1;
286
- Duration[_a] = { fqn: "terraconstructs.Duration", version: "0.0.24" };
286
+ Duration[_a] = { fqn: "terraconstructs.Duration", version: "0.1.0" };
287
287
  class TimeUnit {
288
288
  constructor(label, isoLabel, inMillis) {
289
289
  this.label = label;
package/lib/expiration.js CHANGED
@@ -64,5 +64,5 @@ class Expiration {
64
64
  }
65
65
  exports.Expiration = Expiration;
66
66
  _a = JSII_RTTI_SYMBOL_1;
67
- Expiration[_a] = { fqn: "terraconstructs.Expiration", version: "0.0.24" };
67
+ Expiration[_a] = { fqn: "terraconstructs.Expiration", version: "0.1.0" };
68
68
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBpcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0E7Ozs7R0FJRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQU87UUFDMUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFTO1FBQ2pDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQVc7UUFDN0IsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFTO1FBQ2hDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBT0QsWUFBb0IsSUFBVTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxDQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU8sQ0FBQyxDQUFXO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUEvREgsZ0NBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvZXhwaXJhdGlvbi50c1xuXG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBkYXRlIG9mIGV4cGlyYXRpb24uXG4gKlxuICogVGhlIGFtb3VudCBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIERhdGUgb2JqZWN0LCB0aW1lc3RhbXAsIER1cmF0aW9uIG9yIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4cGlyYXRpb24ge1xuICAvKipcbiAgICogRXhwaXJlIGF0IHRoZSBzcGVjaWZpZWQgZGF0ZVxuICAgKiBAcGFyYW0gZCBkYXRlIHRvIGV4cGlyZSBhdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdERhdGUoZDogRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRXhwaXJhdGlvbihkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIHQgdGltZXN0YW1wIGluIHVuaXggbWlsbGlzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0VGltZXN0YW1wKHQ6IG51bWJlcikge1xuICAgIHJldHVybiBFeHBpcmF0aW9uLmF0RGF0ZShuZXcgRGF0ZSh0KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwaXJlIG9uY2UgdGhlIHNwZWNpZmllZCBkdXJhdGlvbiBoYXMgcGFzc2VkIHNpbmNlIGRlcGxveW1lbnQgdGltZVxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gd2FpdCBiZWZvcmUgZXhwaXJpbmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWZ0ZXIodDogRHVyYXRpb24pIHtcbiAgICByZXR1cm4gRXhwaXJhdGlvbi5hdERhdGUobmV3IERhdGUoRGF0ZS5ub3coKSArIHQudG9NaWxsaXNlY29uZHMoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGlyZSBhdCBzcGVjaWZpZWQgZGF0ZSwgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHMgdGhlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgZGF0ZSB0byBleHBpcmUgYXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyhzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEV4cGlyYXRpb24obmV3IERhdGUocykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gdmFsdWUgYXMgYSBEYXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGU6IERhdGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5kYXRlID0gZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmF0aW9uIFZhbHVlIGluIGEgZm9ybWF0dGVkIFVuaXggRXBvY2ggVGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgdG9FcG9jaCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgRXhwaXJhdGlvbiBleHBpcmVzIGJlZm9yZSBpbnB1dFxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gY2hlY2sgYWdhaW5zdFxuICAgKi9cbiAgcHVibGljIGlzQmVmb3JlKHQ6IER1cmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZSA8IG5ldyBEYXRlKERhdGUubm93KCkgKyB0LnRvTWlsbGlzZWNvbmRzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIEV4cGlyYXRpb24gZXhwaXJlcyBhZnRlciBpbnB1dFxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gY2hlY2sgYWdhaW5zdFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXIodDogRHVyYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlID4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHQudG9NaWxsaXNlY29uZHMoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { CopyOptions } from "./options";
2
+ export declare function copyDirectory(srcDir: string, destDir: string, options?: CopyOptions, rootDir?: string): void;
package/lib/fs/copy.js ADDED
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/core/lib/fs/copy.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.copyDirectory = copyDirectory;
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ const ignore_1 = require("./ignore");
8
+ const options_1 = require("./options");
9
+ const utils_1 = require("./utils");
10
+ function copyDirectory(srcDir, destDir, options = {}, rootDir) {
11
+ const follow = options.follow ?? options_1.SymlinkFollowMode.EXTERNAL;
12
+ rootDir = rootDir || srcDir;
13
+ // ensure the destination directory exists
14
+ if (!fs.existsSync(destDir)) {
15
+ fs.mkdirSync(destDir, { recursive: true });
16
+ }
17
+ const ignoreStrategy = ignore_1.IgnoreStrategy.fromCopyOptions(options, rootDir);
18
+ if (!fs.statSync(srcDir).isDirectory()) {
19
+ throw new Error(`${srcDir} is not a directory`);
20
+ }
21
+ const files = fs.readdirSync(srcDir);
22
+ for (const file of files) {
23
+ let sourceFilePath = path.join(srcDir, file);
24
+ if (ignoreStrategy.ignores(sourceFilePath)) {
25
+ continue;
26
+ }
27
+ const destFilePath = path.join(destDir, file);
28
+ let stat = follow === options_1.SymlinkFollowMode.ALWAYS
29
+ ? fs.statSync(sourceFilePath)
30
+ : fs.lstatSync(sourceFilePath);
31
+ if (stat && stat.isSymbolicLink()) {
32
+ const target = fs.readlinkSync(sourceFilePath);
33
+ // determine if this is an external link (i.e. the target's absolute path
34
+ // is outside of the root directory).
35
+ const targetPath = path.normalize(path.resolve(srcDir, target));
36
+ if ((0, utils_1.shouldFollow)(follow, rootDir, targetPath)) {
37
+ stat = fs.statSync(targetPath);
38
+ // Update sourceFilePath to be the resolved target path
39
+ sourceFilePath = targetPath;
40
+ }
41
+ else {
42
+ fs.symlinkSync(target, destFilePath);
43
+ stat = undefined;
44
+ }
45
+ }
46
+ if (stat && stat.isDirectory()) {
47
+ fs.mkdirSync(destFilePath);
48
+ copyDirectory(sourceFilePath, destFilePath, options, rootDir);
49
+ stat = undefined;
50
+ }
51
+ if (stat && stat.isFile()) {
52
+ fs.copyFileSync(sourceFilePath, destFilePath);
53
+ stat = undefined;
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mcy9jb3B5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx3RkFBd0Y7O0FBUXhGLHNDQWdFQztBQXRFRCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHFDQUEwQztBQUMxQyx1Q0FBMkQ7QUFDM0QsbUNBQXVDO0FBRXZDLFNBQWdCLGFBQWEsQ0FDM0IsTUFBYyxFQUNkLE9BQWUsRUFDZixVQUF1QixFQUFFLEVBQ3pCLE9BQWdCO0lBRWhCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksMkJBQWlCLENBQUMsUUFBUSxDQUFDO0lBRTVELE9BQU8sR0FBRyxPQUFPLElBQUksTUFBTSxDQUFDO0lBRTVCLDBDQUEwQztJQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLHVCQUFjLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV4RSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTlDLElBQUksSUFBSSxHQUNOLE1BQU0sS0FBSywyQkFBaUIsQ0FBQyxNQUFNO1lBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUM3QixDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRS9DLHlFQUF5RTtZQUN6RSxxQ0FBcUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRWhFLElBQUksSUFBQSxvQkFBWSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLHVEQUF1RDtnQkFDdkQsY0FBYyxHQUFHLFVBQVUsQ0FBQztZQUM5QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUMvQixFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RCxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUMxQixFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5QyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2NvcHkudHNcblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBJZ25vcmVTdHJhdGVneSB9IGZyb20gXCIuL2lnbm9yZVwiO1xuaW1wb3J0IHsgQ29weU9wdGlvbnMsIFN5bWxpbmtGb2xsb3dNb2RlIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuaW1wb3J0IHsgc2hvdWxkRm9sbG93IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEaXJlY3RvcnkoXG4gIHNyY0Rpcjogc3RyaW5nLFxuICBkZXN0RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IENvcHlPcHRpb25zID0ge30sXG4gIHJvb3REaXI/OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgZm9sbG93ID0gb3B0aW9ucy5mb2xsb3cgPz8gU3ltbGlua0ZvbGxvd01vZGUuRVhURVJOQUw7XG5cbiAgcm9vdERpciA9IHJvb3REaXIgfHwgc3JjRGlyO1xuXG4gIC8vIGVuc3VyZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0c1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdERpcikpIHtcbiAgICBmcy5ta2RpclN5bmMoZGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBjb25zdCBpZ25vcmVTdHJhdGVneSA9IElnbm9yZVN0cmF0ZWd5LmZyb21Db3B5T3B0aW9ucyhvcHRpb25zLCByb290RGlyKTtcblxuICBpZiAoIWZzLnN0YXRTeW5jKHNyY0RpcikuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtzcmNEaXJ9IGlzIG5vdCBhIGRpcmVjdG9yeWApO1xuICB9XG5cbiAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhzcmNEaXIpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgc291cmNlRmlsZVBhdGggPSBwYXRoLmpvaW4oc3JjRGlyLCBmaWxlKTtcblxuICAgIGlmIChpZ25vcmVTdHJhdGVneS5pZ25vcmVzKHNvdXJjZUZpbGVQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGVzdEZpbGVQYXRoID0gcGF0aC5qb2luKGRlc3REaXIsIGZpbGUpO1xuXG4gICAgbGV0IHN0YXQ6IGZzLlN0YXRzIHwgdW5kZWZpbmVkID1cbiAgICAgIGZvbGxvdyA9PT0gU3ltbGlua0ZvbGxvd01vZGUuQUxXQVlTXG4gICAgICAgID8gZnMuc3RhdFN5bmMoc291cmNlRmlsZVBhdGgpXG4gICAgICAgIDogZnMubHN0YXRTeW5jKHNvdXJjZUZpbGVQYXRoKTtcblxuICAgIGlmIChzdGF0ICYmIHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZnMucmVhZGxpbmtTeW5jKHNvdXJjZUZpbGVQYXRoKTtcblxuICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gZXh0ZXJuYWwgbGluayAoaS5lLiB0aGUgdGFyZ2V0J3MgYWJzb2x1dGUgcGF0aFxuICAgICAgLy8gaXMgb3V0c2lkZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkpLlxuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgubm9ybWFsaXplKHBhdGgucmVzb2x2ZShzcmNEaXIsIHRhcmdldCkpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9sbG93KGZvbGxvdywgcm9vdERpciwgdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHRhcmdldFBhdGgpO1xuICAgICAgICAvLyBVcGRhdGUgc291cmNlRmlsZVBhdGggdG8gYmUgdGhlIHJlc29sdmVkIHRhcmdldCBwYXRoXG4gICAgICAgIHNvdXJjZUZpbGVQYXRoID0gdGFyZ2V0UGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZzLnN5bWxpbmtTeW5jKHRhcmdldCwgZGVzdEZpbGVQYXRoKTtcbiAgICAgICAgc3RhdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdCAmJiBzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhkZXN0RmlsZVBhdGgpO1xuICAgICAgY29weURpcmVjdG9yeShzb3VyY2VGaWxlUGF0aCwgZGVzdEZpbGVQYXRoLCBvcHRpb25zLCByb290RGlyKTtcbiAgICAgIHN0YXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHN0YXQgJiYgc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgZnMuY29weUZpbGVTeW5jKHNvdXJjZUZpbGVQYXRoLCBkZXN0RmlsZVBhdGgpO1xuICAgICAgc3RhdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { FingerprintOptions } from "./options";
2
+ /**
3
+ * Files are fingerprinted only the first time they are encountered, to save
4
+ * time hashing large files. This function clears this cache, should it be
5
+ * necessary for some reason.
6
+ */
7
+ export declare function clearLargeFileFingerprintCache(): void;
8
+ /**
9
+ * Produces fingerprint based on the contents of a single file or an entire directory tree.
10
+ *
11
+ * Line endings are converted from CRLF to LF.
12
+ *
13
+ * The fingerprint will also include:
14
+ * 1. An extra string if defined in `options.extra`.
15
+ * 2. The symlink follow mode value.
16
+ *
17
+ * @param fileOrDirectory The directory or file to fingerprint
18
+ * @param options Fingerprinting options
19
+ */
20
+ export declare function fingerprint(fileOrDirectory: string, options?: FingerprintOptions): string;
21
+ export declare function contentFingerprint(file: string): string;