terraconstructs 0.0.25 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/.jsii +83939 -55116
  2. package/.mise.toml +2 -2
  3. package/.nvmrc +1 -1
  4. package/LICENSE +202 -674
  5. package/go.mod +1 -1
  6. package/go.sum +2 -2
  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 +2 -0
  113. package/lib/aws/compute/function-alias.js +14 -2
  114. package/lib/aws/compute/function-base.d.ts +23 -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 +43 -5
  136. package/lib/aws/compute/function.js +106 -18
  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,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.1" };
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,2 @@
1
+ export * from "./function";
2
+ export * from "./types";
@@ -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,8 @@
1
+ /**
2
+ * Package installation
3
+ */
4
+ export declare abstract class PackageInstallation {
5
+ static detect(module: string): PackageInstallation | undefined;
6
+ abstract readonly isLocal: boolean;
7
+ abstract readonly version: string;
8
+ }
@@ -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==