terraconstructs 0.0.11 → 0.0.13

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 (411) hide show
  1. package/.jsii +105205 -35113
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +7 -5
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.d.ts +26 -1
  339. package/lib/aws/notify/event-pattern.js +49 -5
  340. package/lib/aws/notify/index.js +3 -1
  341. package/lib/aws/notify/input.js +4 -3
  342. package/lib/aws/notify/kinesis-stream.js +3 -2
  343. package/lib/aws/notify/on-event-options.js +2 -1
  344. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  345. package/lib/aws/notify/queue-config.generated.js +1 -1
  346. package/lib/aws/notify/queue-policy.js +1 -1
  347. package/lib/aws/notify/queue.js +1 -1
  348. package/lib/aws/notify/resource-policy.js +1 -1
  349. package/lib/aws/notify/rule.js +3 -2
  350. package/lib/aws/notify/schedule.js +2 -2
  351. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  352. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  353. package/lib/aws/notify/target.js +2 -1
  354. package/lib/aws/notify/targets/event-bus.js +1 -1
  355. package/lib/aws/notify/targets/function.js +1 -1
  356. package/lib/aws/notify/targets/log-group.js +2 -2
  357. package/lib/aws/notify/targets/sqs.js +1 -1
  358. package/lib/aws/notify/targets/state-machine.js +1 -1
  359. package/lib/aws/notify/targets/util.d.ts +1 -1
  360. package/lib/aws/notify/targets/util.js +10 -11
  361. package/lib/aws/notify/util.js +4 -4
  362. package/lib/aws/provider-config.generated.d.ts +33 -33
  363. package/lib/aws/provider-config.generated.js +1 -1
  364. package/lib/aws/storage/bucket-notifications.js +1 -1
  365. package/lib/aws/storage/bucket-policy.js +1 -1
  366. package/lib/aws/storage/bucket-source.js +1 -1
  367. package/lib/aws/storage/bucket.d.ts +298 -65
  368. package/lib/aws/storage/bucket.js +548 -225
  369. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  370. package/lib/aws/storage/cors-config.generated.js +1 -1
  371. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  373. package/lib/aws/storage/index.d.ts +1 -0
  374. package/lib/aws/storage/index.js +2 -1
  375. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  376. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  377. package/lib/aws/storage/notification-targets/function.js +6 -6
  378. package/lib/aws/storage/notification-targets/queue.js +1 -1
  379. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  380. package/lib/aws/storage/origin-access-identity.js +5 -4
  381. package/lib/aws/storage/parameter-util.d.ts +12 -0
  382. package/lib/aws/storage/parameter-util.js +65 -0
  383. package/lib/aws/storage/parameter.d.ts +526 -0
  384. package/lib/aws/storage/parameter.js +606 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  386. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  387. package/lib/aws/storage/util.d.ts +25 -3
  388. package/lib/aws/storage/util.js +84 -17
  389. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  390. package/lib/aws/storage/website-config.generated.js +1 -1
  391. package/lib/aws/util.js +2 -3
  392. package/lib/construct-base.d.ts +10 -1
  393. package/lib/construct-base.js +9 -6
  394. package/lib/duration.js +1 -1
  395. package/lib/expiration.d.ts +48 -0
  396. package/lib/expiration.js +68 -0
  397. package/lib/helpers-internal/index.d.ts +1 -0
  398. package/lib/helpers-internal/index.js +7 -0
  399. package/lib/index.d.ts +2 -0
  400. package/lib/index.js +3 -1
  401. package/lib/private/md5.d.ts +4 -0
  402. package/lib/private/md5.js +14 -0
  403. package/lib/private/unique-resource-name.js +3 -4
  404. package/lib/size.js +2 -2
  405. package/lib/stack-base.d.ts +4 -23
  406. package/lib/stack-base.js +9 -30
  407. package/lib/terra-func.d.ts +103 -0
  408. package/lib/terra-func.js +170 -0
  409. package/lib/token.js +5 -5
  410. package/package.json +15 -8
  411. package/bun.lockb +0 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * NetworkUtils contains helpers to work with network constructs (subnets/ranges)
3
+ */
4
+ export declare class NetworkUtils {
5
+ /**
6
+ * Validates an IPv4 address string.
7
+ *
8
+ * @param ipAddress The IPv4 address string to be validated.
9
+ * @returns True if the string is a valid IPv4 address, false otherwise.
10
+ * Validates an IPv4 string
11
+ *
12
+ * returns true of the string contains 4 numbers between 0-255 delimited by
13
+ * a `.` character
14
+ */
15
+ static validIp(ipAddress: string): boolean;
16
+ /**
17
+ * Converts a string representation of an IPv4 address to its corresponding numerical value.
18
+ *
19
+ * Uses the formula:
20
+ * (first octet * 256³) + (second octet * 256²) + (third octet * 256) +
21
+ * (fourth octet)
22
+ *
23
+ * @param ipAddress the IP address (e.g. 174.66.173.168)
24
+ * @returns the integer value of the IP address (e.g 2923605416)
25
+ */
26
+ static ipToNum(ipAddress: string): number;
27
+ /**
28
+ * Takes number and converts it to IPv4 address string
29
+ *
30
+ * Takes a number (e.g 2923605416) and converts it to an IPv4 address string
31
+ * currently only supports IPv4
32
+ *
33
+ * @param ipNum integer value of the IP address (e.g 2923605416)
34
+ * @returns IPv4 address (e.g. 174.66.173.168)
35
+ */
36
+ static numToIp(ipNum: number): string;
37
+ }
38
+ /**
39
+ * Exported class from VPC to support subnet filtering
40
+ * and CIDR validation
41
+ */
42
+ export declare class CidrBlock {
43
+ /**
44
+ * Calculates the netmask for a given CIDR mask
45
+ *
46
+ * The netmask is a 32-bit binary value used to separate the network portion from the host portion of an IPv4 address.
47
+ * It is calculated based on the CIDR prefix length (the number of bits used to represent the network portion).
48
+ *
49
+ * For example:
50
+ * CidrBlock.calculateNetmask(24) returns '255.255.255.0'
51
+ *
52
+ * @param mask The CIDR prefix length (between 0 and 32) for which to calculate the netmask.
53
+ // Calculate the netmask by performing a bitwise NOT on the result of (2^32 - 2^(32 - mask))
54
+ * @returns The netmask string in IPv4 address format.
55
+ */
56
+ static calculateNetmask(mask: number): string;
57
+ /**
58
+ * Calculates the number IP addresses in a CIDR Mask
59
+ *
60
+ * For example:
61
+ * CidrBlock.calculateNetsize(16) returns 65536
62
+ *
63
+ * @param mask The CIDR prefix length (between 0 and 32) for which to calculate the network size.
64
+ * CidrBlock.calculateNetsize(24) returns 256
65
+ */
66
+ static calculateNetsize(mask: number): number;
67
+ /**
68
+ * IP address in the CIDR block.
69
+ */
70
+ readonly cidr: string;
71
+ readonly mask: number;
72
+ readonly networkSize: number;
73
+ private readonly networkAddress;
74
+ constructor(cidr: string);
75
+ constructor(ipAddress: number, mask: number);
76
+ maxIp(): string;
77
+ minIp(): string;
78
+ minAddress(): number;
79
+ maxAddress(): number;
80
+ nextBlock(): CidrBlock;
81
+ containsCidr(other: CidrBlock): boolean;
82
+ /**
83
+ * Checks if two IPv4 address ranges overlap.
84
+ *
85
+ * @param range1 The first IP address range represented as an array [start, end].
86
+ * @param range2 The second IP address range represented as an array [start, end].
87
+ * @returns True if the two IP address ranges overlap, false otherwise.
88
+ *
89
+ * Note: This method assumes that the start and end addresses are valid IPv4 addresses.
90
+ */
91
+ rangesOverlap(range1: [string, string], range2: [string, string]): boolean;
92
+ }
93
+ /**
94
+ * Class with helper functions to support
95
+ * Subnet Ipv6 Address Validation
96
+ *
97
+ * This class provides methods for working with IPv6 CIDR blocks, including calculating the minimum and maximum
98
+ * IP addresses in a CIDR block, and checking if two CIDR blocks overlap.
99
+ */
100
+ export declare class CidrBlockIpv6 {
101
+ /**
102
+ * Ipv6 CIDR range
103
+ */
104
+ cidr: string;
105
+ /**
106
+ * The CIDR prefix length (number of bits used for the network portion of the address).
107
+ */
108
+ cidrPrefix: number;
109
+ private ipParts;
110
+ private networkBits;
111
+ private networkPart;
112
+ constructor(cidr: string);
113
+ private parseBigIntParts;
114
+ /**
115
+ * @returns Minimum IPv6 address for a provided CIDR
116
+ */
117
+ minIp(): string;
118
+ /**
119
+ * @returns Maximum IPv6 address for a provided CIDR
120
+ */
121
+ maxIp(): string;
122
+ private formatIPv6Part;
123
+ /**
124
+ *
125
+ * @param range1 Ipv6 CIDR range to compare
126
+ * @param range2 Ipv6 CIDR range to compare
127
+ * @returns true if two ranges overlap, false otherwise
128
+ */
129
+ rangesOverlap(range1: string, range2: string): boolean;
130
+ /**
131
+ *
132
+ * @param cidr
133
+ * @returns Range in the from of big int number [start, end]
134
+ */
135
+ private getIPv6Range;
136
+ /**
137
+ * @param ipv6Address
138
+ * @returns Converts given ipv6 address range to big int number
139
+ */
140
+ private ipv6ToNumber;
141
+ }
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/util.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CidrBlockIpv6 = exports.CidrBlock = exports.NetworkUtils = void 0;
5
+ /*eslint no-bitwise: ["error", { "allow": ["~", "|", "<<", "&"] }] */
6
+ // TODO: Fix duplicates from https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/util.ts
7
+ // classes overlap and seem identical: CidrBlock, NetworkUtils in ./util.ts
8
+ /**
9
+ * NetworkUtils contains helpers to work with network constructs (subnets/ranges)
10
+ */
11
+ class NetworkUtils {
12
+ /**
13
+ * Validates an IPv4 address string.
14
+ *
15
+ * @param ipAddress The IPv4 address string to be validated.
16
+ * @returns True if the string is a valid IPv4 address, false otherwise.
17
+ * Validates an IPv4 string
18
+ *
19
+ * returns true of the string contains 4 numbers between 0-255 delimited by
20
+ * a `.` character
21
+ */
22
+ static validIp(ipAddress) {
23
+ const octets = ipAddress.split(".");
24
+ if (octets.length !== 4) {
25
+ return false;
26
+ }
27
+ return octets
28
+ .map((octet) => parseInt(octet, 10))
29
+ .every((octet) => octet >= 0 && octet <= 255);
30
+ }
31
+ /**
32
+ * Converts a string representation of an IPv4 address to its corresponding numerical value.
33
+ *
34
+ * Uses the formula:
35
+ * (first octet * 256³) + (second octet * 256²) + (third octet * 256) +
36
+ * (fourth octet)
37
+ *
38
+ * @param ipAddress the IP address (e.g. 174.66.173.168)
39
+ * @returns the integer value of the IP address (e.g 2923605416)
40
+ */
41
+ static ipToNum(ipAddress) {
42
+ if (!this.validIp(ipAddress)) {
43
+ throw new Error(`${ipAddress} is not valid`);
44
+ }
45
+ return ipAddress
46
+ .split(".")
47
+ .reduce((p, c, i) => p + parseInt(c, 10) * 256 ** (3 - i), 0);
48
+ }
49
+ /**
50
+ * Takes number and converts it to IPv4 address string
51
+ *
52
+ * Takes a number (e.g 2923605416) and converts it to an IPv4 address string
53
+ * currently only supports IPv4
54
+ *
55
+ * @param ipNum integer value of the IP address (e.g 2923605416)
56
+ * @returns IPv4 address (e.g. 174.66.173.168)
57
+ */
58
+ static numToIp(ipNum) {
59
+ // this all because bitwise math is signed
60
+ let remaining = ipNum;
61
+ const address = new Array();
62
+ for (let i = 0; i < 4; i++) {
63
+ if (remaining !== 0) {
64
+ address.push(Math.floor(remaining / 256 ** (3 - i)));
65
+ remaining = remaining % 256 ** (3 - i);
66
+ }
67
+ else {
68
+ address.push(0);
69
+ }
70
+ }
71
+ const ipAddress = address.join(".");
72
+ if (!this.validIp(ipAddress)) {
73
+ throw new Error(`${ipAddress} is not a valid IP Address`);
74
+ }
75
+ return ipAddress;
76
+ }
77
+ }
78
+ exports.NetworkUtils = NetworkUtils;
79
+ /**
80
+ * Exported class from VPC to support subnet filtering
81
+ * and CIDR validation
82
+ */
83
+ class CidrBlock {
84
+ /**
85
+ * Calculates the netmask for a given CIDR mask
86
+ *
87
+ * The netmask is a 32-bit binary value used to separate the network portion from the host portion of an IPv4 address.
88
+ * It is calculated based on the CIDR prefix length (the number of bits used to represent the network portion).
89
+ *
90
+ * For example:
91
+ * CidrBlock.calculateNetmask(24) returns '255.255.255.0'
92
+ *
93
+ * @param mask The CIDR prefix length (between 0 and 32) for which to calculate the netmask.
94
+ // Calculate the netmask by performing a bitwise NOT on the result of (2^32 - 2^(32 - mask))
95
+ * @returns The netmask string in IPv4 address format.
96
+ */
97
+ static calculateNetmask(mask) {
98
+ return NetworkUtils.numToIp(2 ** 32 - 2 ** (32 - mask));
99
+ }
100
+ /**
101
+ * Calculates the number IP addresses in a CIDR Mask
102
+ *
103
+ * For example:
104
+ * CidrBlock.calculateNetsize(16) returns 65536
105
+ *
106
+ * @param mask The CIDR prefix length (between 0 and 32) for which to calculate the network size.
107
+ * CidrBlock.calculateNetsize(24) returns 256
108
+ */
109
+ static calculateNetsize(mask) {
110
+ return 2 ** (32 - mask);
111
+ }
112
+ constructor(ipAddressOrCidr, mask) {
113
+ if (typeof ipAddressOrCidr === "string") {
114
+ this.mask = parseInt(ipAddressOrCidr.split("/")[1], 10);
115
+ this.networkAddress =
116
+ NetworkUtils.ipToNum(ipAddressOrCidr.split("/")[0]) +
117
+ CidrBlock.calculateNetsize(this.mask) -
118
+ 1;
119
+ }
120
+ else {
121
+ if (typeof mask === "number") {
122
+ this.mask = mask;
123
+ }
124
+ else {
125
+ // this should be impossible
126
+ this.mask = 16;
127
+ }
128
+ this.networkAddress =
129
+ ipAddressOrCidr + CidrBlock.calculateNetsize(this.mask) - 1;
130
+ this.networkSize = 2 ** (32 - this.mask);
131
+ }
132
+ this.networkSize = 2 ** (32 - this.mask);
133
+ this.cidr = `${this.minIp()}/${this.mask}`;
134
+ }
135
+ /*
136
+ * The maximum IP in the CIDR Block e.g. '10.0.8.255'
137
+ */
138
+ maxIp() {
139
+ // min + (2^(32-mask)) - 1 [zero needs to count]
140
+ return NetworkUtils.numToIp(this.maxAddress());
141
+ }
142
+ /*
143
+ * Checks if this CIDR block fully contains the provided CIDR block.
144
+ *
145
+ * @param other The CIDR block to check for containment.
146
+ * @returns True if this CIDR block fully contains the provided CIDR block, false otherwise.
147
+ *
148
+ * The minimum IP in the CIDR Block e.g. '10.0.0.0'
149
+ */
150
+ minIp() {
151
+ return NetworkUtils.numToIp(this.minAddress());
152
+ }
153
+ /*
154
+ * Returns the number representation for the minimum IPv4 address
155
+ */
156
+ minAddress() {
157
+ const div = this.networkAddress % this.networkSize;
158
+ return this.networkAddress - div;
159
+ }
160
+ /*
161
+ * Returns the number representation for the maximum IPv4 address
162
+ */
163
+ maxAddress() {
164
+ /**
165
+ * The maximum IP address in the CIDR block is calculated as the minimum address + (2^(32-mask)) - 1.
166
+ * This is because the minimum address represents the network address, and the maximum address is the broadcast address.
167
+ */
168
+ // min + (2^(32-mask)) - 1 [zero needs to count]
169
+ return this.minAddress() + this.networkSize - 1;
170
+ }
171
+ /*
172
+ * Returns the next consecutive CIDR block of the same mask size following this CIDR block.
173
+ *
174
+ * For example, if this CIDR block is '10.0.0.0/24', the next block would be '10.0.1.0/24'.
175
+ *
176
+ * Returns the next CIDR Block of the same mask size
177
+ */
178
+ nextBlock() {
179
+ return new CidrBlock(this.maxAddress() + 1, this.mask);
180
+ }
181
+ /*
182
+ * Returns true if this CidrBlock fully contains the provided CidrBlock
183
+ */
184
+ containsCidr(other) {
185
+ return (this.maxAddress() >= other.maxAddress() &&
186
+ this.minAddress() <= other.minAddress());
187
+ }
188
+ /**
189
+ * Checks if two IPv4 address ranges overlap.
190
+ *
191
+ * @param range1 The first IP address range represented as an array [start, end].
192
+ * @param range2 The second IP address range represented as an array [start, end].
193
+ * @returns True if the two IP address ranges overlap, false otherwise.
194
+ *
195
+ * Note: This method assumes that the start and end addresses are valid IPv4 addresses.
196
+ */
197
+ rangesOverlap(range1, range2) {
198
+ const [start1, end1] = range1.map((ip) => NetworkUtils.ipToNum(ip));
199
+ const [start2, end2] = range2.map((ip) => NetworkUtils.ipToNum(ip));
200
+ // Check if ranges overlap
201
+ return start1 <= end2 && start2 <= end1;
202
+ }
203
+ }
204
+ exports.CidrBlock = CidrBlock;
205
+ /**
206
+ * Class with helper functions to support
207
+ * Subnet Ipv6 Address Validation
208
+ *
209
+ * This class provides methods for working with IPv6 CIDR blocks, including calculating the minimum and maximum
210
+ * IP addresses in a CIDR block, and checking if two CIDR blocks overlap.
211
+ */
212
+ class CidrBlockIpv6 {
213
+ constructor(cidr) {
214
+ this.formatIPv6Part = (part) => part.toString(16).padStart(4, "0");
215
+ this.cidr = cidr;
216
+ const [ipAddress, prefix] = cidr.split("/");
217
+ this.cidrPrefix = parseInt(prefix, 10);
218
+ this.ipParts = this.parseBigIntParts(ipAddress);
219
+ this.networkBits = this.cidrPrefix;
220
+ this.networkPart = this.ipParts.slice(0, Math.ceil(this.networkBits / 16));
221
+ }
222
+ parseBigIntParts(ipAddress) {
223
+ return ipAddress
224
+ .split(":")
225
+ .map((part) => BigInt(`0x${part.padStart(4, "0")}` || "0"));
226
+ }
227
+ /**
228
+ * @returns Minimum IPv6 address for a provided CIDR
229
+ */
230
+ minIp() {
231
+ const startIP = [...this.networkPart];
232
+ for (let i = this.networkPart.length; i < 8; i++) {
233
+ startIP.push(BigInt(0));
234
+ }
235
+ return startIP.map(this.formatIPv6Part).join(":");
236
+ }
237
+ /**
238
+ * @returns Maximum IPv6 address for a provided CIDR
239
+ */
240
+ maxIp() {
241
+ const endIP = [...this.networkPart];
242
+ const hostPart = Array(8 - this.networkPart.length).fill(BigInt(0xffff));
243
+ endIP.push(...hostPart);
244
+ return endIP.map(this.formatIPv6Part).join(":");
245
+ }
246
+ /**
247
+ *
248
+ * @param range1 Ipv6 CIDR range to compare
249
+ * @param range2 Ipv6 CIDR range to compare
250
+ * @returns true if two ranges overlap, false otherwise
251
+ */
252
+ rangesOverlap(range1, range2) {
253
+ const [start1, end1] = this.getIPv6Range(range1);
254
+ const [start2, end2] = this.getIPv6Range(range2);
255
+ return start1 <= end2 && start2 <= end1;
256
+ }
257
+ /**
258
+ *
259
+ * @param cidr
260
+ * @returns Range in the from of big int number [start, end]
261
+ */
262
+ getIPv6Range(cidr) {
263
+ const [ipv6Address, prefixLength] = cidr.split("/");
264
+ const ipv6Number = this.ipv6ToNumber(ipv6Address);
265
+ const mask = (BigInt(1) << BigInt(128 - Number(prefixLength))) - BigInt(1);
266
+ const networkPrefix = ipv6Number & ~mask;
267
+ const start = networkPrefix;
268
+ const end = networkPrefix | mask;
269
+ return [start, end];
270
+ }
271
+ /**
272
+ * @param ipv6Address
273
+ * @returns Converts given ipv6 address range to big int number
274
+ */
275
+ ipv6ToNumber(ipv6Address) {
276
+ const blocks = this.parseBigIntParts(ipv6Address);
277
+ let ipv6Number = BigInt(0);
278
+ for (const block of blocks) {
279
+ /* tslint:disable:no-bitwise */
280
+ ipv6Number = (ipv6Number << BigInt(16)) + block;
281
+ }
282
+ return ipv6Number;
283
+ }
284
+ }
285
+ exports.CidrBlockIpv6 = CidrBlockIpv6;
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLXV0aWwtdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZWMyLXV0aWwtdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDJGQUEyRjs7O0FBRTNGLHFFQUFxRTtBQUVyRSxxSEFBcUg7QUFDckgsMkVBQTJFO0FBRTNFOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBQ3ZCOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBaUI7UUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxNQUFNO2FBQ1YsR0FBRyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLEtBQUssQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBaUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxTQUFTO2FBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FDTCxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FDbEMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJ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LEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQiwrQkFBK0I7WUFDL0IsVUFBVSxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBOUZELHNDQThGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL0Bhd3MtY2RrL2F3cy1lYzItYWxwaGEvbGliL3V0aWwudHNcblxuLyplc2xpbnQgbm8tYml0d2lzZTogW1wiZXJyb3JcIiwgeyBcImFsbG93XCI6IFtcIn5cIiwgXCJ8XCIsIFwiPDxcIiwgXCImXCJdIH1dICovXG5cbi8vIFRPRE86IEZpeCBkdXBsaWNhdGVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvdXRpbC50c1xuLy8gY2xhc3NlcyBvdmVybGFwIGFuZCBzZWVtIGlkZW50aWNhbDogQ2lkckJsb2NrLCBOZXR3b3JrVXRpbHMgaW4gLi91dGlsLnRzXG5cbi8qKlxuICogTmV0d29ya1V0aWxzIGNvbnRhaW5zIGhlbHBlcnMgdG8gd29yayB3aXRoIG5ldHdvcmsgY29uc3RydWN0cyAoc3VibmV0cy9yYW5nZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpcEFkZHJlc3MgVGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogVmFsaWRhdGVzIGFuIElQdjQgc3RyaW5nXG4gICAqXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc3RyaW5nIGNvbnRhaW5zIDQgbnVtYmVycyBiZXR3ZWVuIDAtMjU1IGRlbGltaXRlZCBieVxuICAgKiBhIGAuYCBjaGFyYWN0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRJcChpcEFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdChcIi5cIik7XG4gICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9jdGV0c1xuICAgICAgLm1hcCgob2N0ZXQ6IHN0cmluZykgPT4gcGFyc2VJbnQob2N0ZXQsIDEwKSlcbiAgICAgIC5ldmVyeSgob2N0ZXQ6IG51bWJlcikgPT4gb2N0ZXQgPj0gMCAmJiBvY3RldCA8PSAyNTUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIElQdjQgYWRkcmVzcyB0byBpdHMgY29ycmVzcG9uZGluZyBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFVzZXMgdGhlIGZvcm11bGE6XG4gICAqIChmaXJzdCBvY3RldCAqIDI1NsKzKSArIChzZWNvbmQgb2N0ZXQgKiAyNTbCsikgKyAodGhpcmQgb2N0ZXQgKiAyNTYpICtcbiAgICogKGZvdXJ0aCBvY3RldClcbiAgICpcbiAgICogQHBhcmFtICBpcEFkZHJlc3MgdGhlIElQIGFkZHJlc3MgKGUuZy4gMTc0LjY2LjE3My4xNjgpXG4gICAqIEByZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBJUCBhZGRyZXNzIChlLmcgMjkyMzYwNTQxNilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXBUb051bShpcEFkZHJlc3M6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnZhbGlkSXAoaXBBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2lwQWRkcmVzc30gaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlwQWRkcmVzc1xuICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHA6IG51bWJlciwgYzogc3RyaW5nLCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgcCArIHBhcnNlSW50KGMsIDEwKSAqIDI1NiAqKiAoMyAtIGkpLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBudW1iZXIgYW5kIGNvbnZlcnRzIGl0IHRvIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICpcbiAgICogVGFrZXMgYSBudW1iZXIgKGUuZyAyOTIzNjA1NDE2KSBhbmQgY29udmVydHMgaXQgdG8gYW4gSVB2NCBhZGRyZXNzIHN0cmluZ1xuICAgKiBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBJUHY0XG4gICAqXG4gICAqIEBwYXJhbSBpcE51bSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBJUCBhZGRyZXNzIChlLmcgMjkyMzYwNTQxNilcbiAgICogQHJldHVybnMgSVB2NCBhZGRyZXNzIChlLmcuIDE3NC42Ni4xNzMuMTY4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBudW1Ub0lwKGlwTnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIHRoaXMgYWxsIGJlY2F1c2UgYml0d2lzZSBtYXRoIGlzIHNpZ25lZFxuICAgIGxldCByZW1haW5pbmcgPSBpcE51bTtcbiAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgaWYgKHJlbWFpbmluZyAhPT0gMCkge1xuICAgICAgICBhZGRyZXNzLnB1c2goTWF0aC5mbG9vcihyZW1haW5pbmcgLyAyNTYgKiogKDMgLSBpKSkpO1xuICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgJSAyNTYgKiogKDMgLSBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZHJlc3MucHVzaCgwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaXBBZGRyZXNzOiBzdHJpbmcgPSBhZGRyZXNzLmpvaW4oXCIuXCIpO1xuICAgIGlmICghdGhpcy52YWxpZElwKGlwQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtpcEFkZHJlc3N9IGlzIG5vdCBhIHZhbGlkIElQIEFkZHJlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGlwQWRkcmVzcztcbiAgfVxufVxuXG4vKipcbiAqIEV4cG9ydGVkIGNsYXNzIGZyb20gVlBDIHRvIHN1cHBvcnQgc3VibmV0IGZpbHRlcmluZ1xuICogYW5kIENJRFIgdmFsaWRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2lkckJsb2NrIHtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG5ldG1hc2sgZm9yIGEgZ2l2ZW4gQ0lEUiBtYXNrXG4gICAqXG4gICAqIFRoZSBuZXRtYXNrIGlzIGEgMzItYml0IGJpbmFyeSB2YWx1ZSB1c2VkIHRvIHNlcGFyYXRlIHRoZSBuZXR3b3JrIHBvcnRpb24gZnJvbSB0aGUgaG9zdCBwb3J0aW9uIG9mIGFuIElQdjQgYWRkcmVzcy5cbiAgICogSXQgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgQ0lEUiBwcmVmaXggbGVuZ3RoICh0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIG5ldHdvcmsgcG9ydGlvbikuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0bWFzaygyNCkgcmV0dXJucyAnMjU1LjI1NS4yNTUuMCdcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0bWFzay5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldG1hc2sgYnkgcGVyZm9ybWluZyBhIGJpdHdpc2UgTk9UIG9uIHRoZSByZXN1bHQgb2YgKDJeMzIgLSAyXigzMiAtIG1hc2spKVxuICAgKiBAcmV0dXJucyBUaGUgbmV0bWFzayBzdHJpbmcgaW4gSVB2NCBhZGRyZXNzIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0bWFzayhtYXNrOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCgyICoqIDMyIC0gMiAqKiAoMzIgLSBtYXNrKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIElQIGFkZHJlc3NlcyBpbiBhIENJRFIgTWFza1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUoMTYpIHJldHVybnMgNjU1MzZcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0d29yayBzaXplLlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSgyNCkgcmV0dXJucyAyNTZcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0c2l6ZShtYXNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAyICoqICgzMiAtIG1hc2spO1xuICB9XG5cbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2suXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gIC8qXG4gICAqIFRoZSBDSURSIG1hc2sgZS5nLiBmb3IgQ0lEUiAnMTAuMC4wLjAvMjEnIHJldHVybnMgMjFcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXNrOiBudW1iZXI7XG5cbiAgLypcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhlIENJRFJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrU2l6ZTogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSBuZXR3b3JrIGFkZHJlc3MgcHJvdmlkZWQgaW4gQ0lEUiBjcmVhdGlvbiBvZmZzZXQgYnkgdGhlIE5ldHNpemUgLTFcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0FkZHJlc3M6IG51bWJlcjtcblxuICAvKlxuICAgKiBQYXJzZXMgZWl0aGVyIENJRFIgbm90YXRpb24gU3RyaW5nIG9yIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgSVBcbiAgICogc3BhY2VcbiAgICpcbiAgICogY2lkciBleHBlY3RzIGEgc3RyaW5nICcxMC4wLjAuMC8xNidcbiAgICogaXBBZGRyZXNzIGV4cGVjdHMgYSBudW1iZXJcbiAgICogbWFzayBleHBlY3RzIGEgbnVtYmVyXG4gICAqXG4gICAqIElmIHRoZSBnaXZlbiBgY2lkcmAgb3IgYGlwQWRkcmVzc2AgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLFxuICAgKiB0aGVuIHRoZSBuZXh0IGF2YWlsYWJsZSBibG9jayB3aWxsIGJlIHJldHVybmVkLiBGb3IgZXhhbXBsZSwgaWZcbiAgICogYDEwLjAuMy4xLzI4YCBpcyBnaXZlbiB0aGUgcmV0dXJuZWQgYmxvY2sgd2lsbCByZXByZXNlbnQgYDEwLjAuMy4xNi8yOGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpO1xuICBjb25zdHJ1Y3RvcihpcEFkZHJlc3M6IG51bWJlciwgbWFzazogbnVtYmVyKTtcbiAgY29uc3RydWN0b3IoaXBBZGRyZXNzT3JDaWRyOiBzdHJpbmcgfCBudW1iZXIsIG1hc2s/OiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGlwQWRkcmVzc09yQ2lkciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5tYXNrID0gcGFyc2VJbnQoaXBBZGRyZXNzT3JDaWRyLnNwbGl0KFwiL1wiKVsxXSwgMTApO1xuICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9XG4gICAgICAgIE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwQWRkcmVzc09yQ2lkci5zcGxpdChcIi9cIilbMF0pICtcbiAgICAgICAgQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUodGhpcy5tYXNrKSAtXG4gICAgICAgIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgbWFzayA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICB0aGlzLm1hc2sgPSAxNjtcbiAgICAgIH1cbiAgICAgIHRoaXMubmV0d29ya0FkZHJlc3MgPVxuICAgICAgICBpcEFkZHJlc3NPckNpZHIgKyBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSh0aGlzLm1hc2spIC0gMTtcbiAgICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgfVxuICAgIHRoaXMubmV0d29ya1NpemUgPSAyICoqICgzMiAtIHRoaXMubWFzayk7XG4gICAgdGhpcy5jaWRyID0gYCR7dGhpcy5taW5JcCgpfS8ke3RoaXMubWFza31gO1xuICB9XG5cbiAgLypcbiAgICogVGhlIG1heGltdW0gSVAgaW4gdGhlIENJRFIgQmxvY2sgZS5nLiAnMTAuMC44LjI1NSdcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1heEFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBDaGVja3MgaWYgdGhpcyBDSURSIGJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDSURSIGJsb2NrLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGhlIENJRFIgYmxvY2sgdG8gY2hlY2sgZm9yIGNvbnRhaW5tZW50LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgQ0lEUiBibG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9jaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgbWluaW11bSBJUCBpbiB0aGUgQ0lEUiBCbG9jayBlLmcuICcxMC4wLjAuMCdcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCh0aGlzLm1pbkFkZHJlc3MoKSk7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtaW5pbXVtIElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIG1pbkFkZHJlc3MoKTogbnVtYmVyIHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLm5ldHdvcmtBZGRyZXNzICUgdGhpcy5uZXR3b3JrU2l6ZTtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrQWRkcmVzcyAtIGRpdjtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1heGltdW0gSVB2NCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgbWF4QWRkcmVzcygpOiBudW1iZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2sgaXMgY2FsY3VsYXRlZCBhcyB0aGUgbWluaW11bSBhZGRyZXNzICsgKDJeKDMyLW1hc2spKSAtIDEuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIHRoZSBtaW5pbXVtIGFkZHJlc3MgcmVwcmVzZW50cyB0aGUgbmV0d29yayBhZGRyZXNzLCBhbmQgdGhlIG1heGltdW0gYWRkcmVzcyBpcyB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuXG4gICAgICovXG4gICAgLy8gbWluICsgKDJeKDMyLW1hc2spKSAtIDEgW3plcm8gbmVlZHMgdG8gY291bnRdXG4gICAgcmV0dXJuIHRoaXMubWluQWRkcmVzcygpICsgdGhpcy5uZXR3b3JrU2l6ZSAtIDE7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbnNlY3V0aXZlIENJRFIgYmxvY2sgb2YgdGhlIHNhbWUgbWFzayBzaXplIGZvbGxvd2luZyB0aGlzIENJRFIgYmxvY2suXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIENJRFIgYmxvY2sgaXMgJzEwLjAuMC4wLzI0JywgdGhlIG5leHQgYmxvY2sgd291bGQgYmUgJzEwLjAuMS4wLzI0Jy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbmV4dCBDSURSIEJsb2NrIG9mIHRoZSBzYW1lIG1hc2sgc2l6ZVxuICAgKi9cbiAgcHVibGljIG5leHRCbG9jaygpOiBDaWRyQmxvY2sge1xuICAgIHJldHVybiBuZXcgQ2lkckJsb2NrKHRoaXMubWF4QWRkcmVzcygpICsgMSwgdGhpcy5tYXNrKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENpZHJCbG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ2lkckJsb2NrXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnNDaWRyKG90aGVyOiBDaWRyQmxvY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tYXhBZGRyZXNzKCkgPj0gb3RoZXIubWF4QWRkcmVzcygpICYmXG4gICAgICB0aGlzLm1pbkFkZHJlc3MoKSA8PSBvdGhlci5taW5BZGRyZXNzKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0d28gSVB2NCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIFRoZSBmaXJzdCBJUCBhZGRyZXNzIHJhbmdlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IFtzdGFydCwgZW5kXS5cbiAgICogQHBhcmFtIHJhbmdlMiBUaGUgc2Vjb25kIElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0d28gSVAgYWRkcmVzcyByYW5nZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB2YWxpZCBJUHY0IGFkZHJlc3Nlcy5cbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKFxuICAgIHJhbmdlMTogW3N0cmluZywgc3RyaW5nXSxcbiAgICByYW5nZTI6IFtzdHJpbmcsIHN0cmluZ10sXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtzdGFydDEsIGVuZDFdID0gcmFuZ2UxLm1hcCgoaXApID0+IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwKSk7XG4gICAgY29uc3QgW3N0YXJ0MiwgZW5kMl0gPSByYW5nZTIubWFwKChpcCkgPT4gTmV0d29ya1V0aWxzLmlwVG9OdW0oaXApKTtcbiAgICAvLyBDaGVjayBpZiByYW5nZXMgb3ZlcmxhcFxuICAgIHJldHVybiBzdGFydDEgPD0gZW5kMiAmJiBzdGFydDIgPD0gZW5kMTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIHdpdGggaGVscGVyIGZ1bmN0aW9ucyB0byBzdXBwb3J0XG4gKiBTdWJuZXQgSXB2NiBBZGRyZXNzIFZhbGlkYXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBJUHY2IENJRFIgYmxvY2tzLCBpbmNsdWRpbmcgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW1cbiAqIElQIGFkZHJlc3NlcyBpbiBhIENJRFIgYmxvY2ssIGFuZCBjaGVja2luZyBpZiB0d28gQ0lEUiBibG9ja3Mgb3ZlcmxhcC5cbiAqL1xuZXhwb3J0IGNsYXNzIENpZHJCbG9ja0lwdjYge1xuICAvKipcbiAgICogSXB2NiBDSURSIHJhbmdlXG4gICAqL1xuICBwdWJsaWMgY2lkcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIENJRFIgcHJlZml4IGxlbmd0aCAobnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgdGhlIG5ldHdvcmsgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcykuXG4gICAqL1xuICBwdWJsaWMgY2lkclByZWZpeDogbnVtYmVyO1xuICBwcml2YXRlIGlwUGFydHM6IGJpZ2ludFtdO1xuICBwcml2YXRlIG5ldHdvcmtCaXRzOiBudW1iZXI7XG4gIHByaXZhdGUgbmV0d29ya1BhcnQ6IGJpZ2ludFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNpZHI6IHN0cmluZykge1xuICAgIHRoaXMuY2lkciA9IGNpZHI7XG4gICAgY29uc3QgW2lwQWRkcmVzcywgcHJlZml4XSA9IGNpZHIuc3BsaXQoXCIvXCIpO1xuICAgIHRoaXMuY2lkclByZWZpeCA9IHBhcnNlSW50KHByZWZpeCwgMTApO1xuICAgIHRoaXMuaXBQYXJ0cyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcEFkZHJlc3MpO1xuICAgIHRoaXMubmV0d29ya0JpdHMgPSB0aGlzLmNpZHJQcmVmaXg7XG4gICAgdGhpcy5uZXR3b3JrUGFydCA9IHRoaXMuaXBQYXJ0cy5zbGljZSgwLCBNYXRoLmNlaWwodGhpcy5uZXR3b3JrQml0cyAvIDE2KSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQmlnSW50UGFydHMoaXBBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnRbXSB7XG4gICAgcmV0dXJuIGlwQWRkcmVzc1xuICAgICAgLnNwbGl0KFwiOlwiKVxuICAgICAgLm1hcCgocGFydCkgPT4gQmlnSW50KGAweCR7cGFydC5wYWRTdGFydCg0LCBcIjBcIil9YCB8fCBcIjBcIikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIE1pbmltdW0gSVB2NiBhZGRyZXNzIGZvciBhIHByb3ZpZGVkIENJRFJcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXJ0SVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubmV0d29ya1BhcnQubGVuZ3RoOyBpIDwgODsgaSsrKSB7XG4gICAgICBzdGFydElQLnB1c2goQmlnSW50KDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0SVAubWFwKHRoaXMuZm9ybWF0SVB2NlBhcnQpLmpvaW4oXCI6XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIE1heGltdW0gSVB2NiBhZGRyZXNzIGZvciBhIHByb3ZpZGVkIENJRFJcbiAgICovXG4gIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuZElQID0gWy4uLnRoaXMubmV0d29ya1BhcnRdO1xuICAgIGNvbnN0IGhvc3RQYXJ0ID0gQXJyYXkoOCAtIHRoaXMubmV0d29ya1BhcnQubGVuZ3RoKS5maWxsKEJpZ0ludCgweGZmZmYpKTtcbiAgICBlbmRJUC5wdXNoKC4uLmhvc3RQYXJ0KTtcblxuICAgIHJldHVybiBlbmRJUC5tYXAodGhpcy5mb3JtYXRJUHY2UGFydCkuam9pbihcIjpcIik7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdElQdjZQYXJ0ID0gKHBhcnQ6IGJpZ2ludCkgPT4gcGFydC50b1N0cmluZygxNikucGFkU3RhcnQoNCwgXCIwXCIpO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSByYW5nZTIgSXB2NiBDSURSIHJhbmdlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0d28gcmFuZ2VzIG92ZXJsYXAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIHJhbmdlc092ZXJsYXAocmFuZ2UxOiBzdHJpbmcsIHJhbmdlMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSB0aGlzLmdldElQdjZSYW5nZShyYW5nZTEpO1xuICAgIGNvbnN0IFtzdGFydDIsIGVuZDJdID0gdGhpcy5nZXRJUHY2UmFuZ2UocmFuZ2UyKTtcblxuICAgIHJldHVybiBzdGFydDEgPD0gZW5kMiAmJiBzdGFydDIgPD0gZW5kMTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY2lkclxuICAgKiBAcmV0dXJucyBSYW5nZSBpbiB0aGUgZnJvbSBvZiBiaWcgaW50IG51bWJlciBbc3RhcnQsIGVuZF1cbiAgICovXG4gIHByaXZhdGUgZ2V0SVB2NlJhbmdlKGNpZHI6IHN0cmluZyk6IFtiaWdpbnQsIGJpZ2ludF0ge1xuICAgIGNvbnN0IFtpcHY2QWRkcmVzcywgcHJlZml4TGVuZ3RoXSA9IGNpZHIuc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGlwdjZOdW1iZXIgPSB0aGlzLmlwdjZUb051bWJlcihpcHY2QWRkcmVzcyk7XG4gICAgY29uc3QgbWFzayA9IChCaWdJbnQoMSkgPDwgQmlnSW50KDEyOCAtIE51bWJlcihwcmVmaXhMZW5ndGgpKSkgLSBCaWdJbnQoMSk7XG4gICAgY29uc3QgbmV0d29ya1ByZWZpeCA9IGlwdjZOdW1iZXIgJiB+bWFzaztcbiAgICBjb25zdCBzdGFydCA9IG5ldHdvcmtQcmVmaXg7XG4gICAgY29uc3QgZW5kID0gbmV0d29ya1ByZWZpeCB8IG1hc2s7XG5cbiAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpcHY2QWRkcmVzc1xuICAgKiBAcmV0dXJucyBDb252ZXJ0cyBnaXZlbiBpcHY2IGFkZHJlc3MgcmFuZ2UgdG8gYmlnIGludCBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnQge1xuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcHY2QWRkcmVzcyk7XG4gICAgbGV0IGlwdjZOdW1iZXIgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbiAgICAgIGlwdjZOdW1iZXIgPSAoaXB2Nk51bWJlciA8PCBCaWdJbnQoMTYpKSArIGJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gaXB2Nk51bWJlcjtcbiAgfVxufVxuIl19
@@ -0,0 +1,52 @@
1
+ import { Construct } from "constructs";
2
+ import { ISubnet, SubnetType } from "./vpc";
3
+ /**
4
+ * Turn an arbitrary string into one that can be used as a CloudFormation identifier by stripping special characters
5
+ *
6
+ * (At the moment, no efforts are taken to prevent collisions, but we can add that later when it becomes necessary).
7
+ */
8
+ export declare function slugify(x: string): string;
9
+ /**
10
+ * The default names for every subnet type
11
+ */
12
+ export declare function defaultSubnetName(type: SubnetType): "Public" | "Private" | "Isolated";
13
+ /**
14
+ * Return a subnet name from its construct ID
15
+ *
16
+ * All subnet names look like NAME <> "Subnet" <> INDEX
17
+ */
18
+ export declare function subnetGroupNameFromConstructId(subnet: ISubnet): string;
19
+ /**
20
+ * Make the subnet construct ID from a name and number
21
+ */
22
+ export declare function subnetId(name: string, i: number): string;
23
+ export declare class ImportSubnetGroup {
24
+ private readonly availabilityZones;
25
+ private readonly subnetIds;
26
+ private readonly names;
27
+ private readonly routeTableIds;
28
+ private readonly ipv4CidrBlocks;
29
+ private readonly groups;
30
+ constructor(subnetIds: string[] | undefined, names: string[] | undefined, routeTableIds: string[] | undefined, ipv4CidrBlocks: string[] | undefined, type: SubnetType, availabilityZones: string[], idField: string, nameField: string, routeTableIdField: string, ipv4CidrBlockField: string);
31
+ import(scope: Construct): ISubnet[];
32
+ /**
33
+ * Return a list with a name for every subnet
34
+ */
35
+ private normalizeNames;
36
+ /**
37
+ * Return the i'th AZ
38
+ */
39
+ private pickAZ;
40
+ }
41
+ /**
42
+ * Generate the list of numbers of [0..n)
43
+ */
44
+ export declare function range(n: number): number[];
45
+ /**
46
+ * Return the union of table IDs from all selected subnets
47
+ */
48
+ export declare function allRouteTableIds(subnets: ISubnet[]): string[];
49
+ /**
50
+ * Flatten a list of lists into a list of elements
51
+ */
52
+ export declare function flatten<A>(xs: A[][]): A[];