@aws-cdk/toolkit-lib 0.3.2 → 0.3.3

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 (361) hide show
  1. package/build-info.json +2 -2
  2. package/lib/actions/bootstrap/index.d.ts +1 -1
  3. package/lib/actions/bootstrap/index.js +5 -5
  4. package/lib/actions/deploy/index.d.ts +1 -1
  5. package/lib/actions/deploy/index.js +1 -1
  6. package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
  7. package/lib/actions/deploy/private/deploy-options.js +1 -1
  8. package/lib/actions/deploy/private/helpers.d.ts +3 -2
  9. package/lib/actions/deploy/private/helpers.js +3 -3
  10. package/lib/actions/diff/private/helpers.d.ts +5 -9
  11. package/lib/actions/diff/private/helpers.js +6 -23
  12. package/lib/api/aws-auth/account-cache.d.ts +41 -0
  13. package/lib/api/aws-auth/account-cache.js +108 -0
  14. package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
  15. package/lib/api/aws-auth/awscli-compatible.js +250 -0
  16. package/lib/api/aws-auth/cached.d.ts +11 -0
  17. package/lib/api/aws-auth/cached.js +26 -0
  18. package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
  19. package/lib/api/aws-auth/credential-plugins.js +154 -0
  20. package/lib/api/aws-auth/private/index.d.ts +11 -0
  21. package/lib/api/aws-auth/private/index.js +37 -0
  22. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  23. package/lib/api/aws-auth/provider-caching.js +24 -0
  24. package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
  25. package/lib/api/aws-auth/proxy-agent.js +54 -0
  26. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  27. package/lib/api/aws-auth/sdk-logger.js +128 -0
  28. package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
  29. package/lib/api/aws-auth/sdk-provider.js +373 -0
  30. package/lib/api/aws-auth/sdk.d.ts +235 -0
  31. package/lib/api/aws-auth/sdk.js +391 -0
  32. package/lib/api/aws-auth/tracing.d.ts +11 -0
  33. package/lib/api/aws-auth/tracing.js +60 -0
  34. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  35. package/lib/api/aws-auth/user-agent.js +20 -0
  36. package/lib/api/aws-auth/util.d.ts +6 -0
  37. package/lib/api/aws-auth/util.js +21 -0
  38. package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
  39. package/lib/api/bootstrap/bootstrap-environment.js +323 -0
  40. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  41. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  42. package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
  43. package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
  44. package/lib/api/bootstrap/index.d.ts +3 -0
  45. package/lib/api/bootstrap/index.js +23 -0
  46. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  47. package/lib/api/bootstrap/legacy-template.js +82 -0
  48. package/lib/api/cloud-assembly/environment.d.ts +43 -0
  49. package/lib/api/cloud-assembly/environment.js +127 -0
  50. package/lib/api/cloud-assembly/index.d.ts +1 -1
  51. package/lib/api/cloud-assembly/index.js +3 -3
  52. package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
  53. package/lib/api/cloud-assembly/private/context-aware-source.js +5 -5
  54. package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
  55. package/lib/api/cloud-assembly/private/prepare-source.js +14 -12
  56. package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
  57. package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
  58. package/lib/api/cloud-assembly/private/source-builder.js +8 -6
  59. package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
  60. package/lib/api/cloud-assembly/private/stack-assembly.js +10 -9
  61. package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
  62. package/lib/api/cloud-assembly/stack-assembly.js +139 -0
  63. package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
  64. package/lib/api/cloud-assembly/stack-collection.js +112 -0
  65. package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
  66. package/lib/api/cloud-assembly/stack-selector.js +62 -5
  67. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
  68. package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
  69. package/lib/api/cloudformation/index.d.ts +4 -0
  70. package/lib/api/cloudformation/index.js +21 -0
  71. package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
  72. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  73. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  74. package/lib/api/cloudformation/stack-helpers.js +163 -0
  75. package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
  76. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  77. package/lib/api/context.d.ts +40 -0
  78. package/lib/api/context.js +84 -0
  79. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  80. package/lib/api/deployments/asset-manifest-builder.js +33 -0
  81. package/lib/api/deployments/asset-publishing.d.ts +60 -0
  82. package/lib/api/deployments/asset-publishing.js +144 -0
  83. package/lib/api/deployments/assets.d.ts +11 -0
  84. package/lib/api/deployments/assets.js +109 -0
  85. package/lib/api/deployments/cfn-api.d.ts +145 -0
  86. package/lib/api/deployments/cfn-api.js +444 -0
  87. package/lib/api/deployments/checks.d.ts +9 -0
  88. package/lib/api/deployments/checks.js +72 -0
  89. package/lib/api/deployments/deploy-stack.d.ts +164 -0
  90. package/lib/api/deployments/deploy-stack.js +490 -0
  91. package/lib/api/deployments/deployment-method.d.ts +24 -0
  92. package/lib/api/deployments/deployment-method.js +3 -0
  93. package/lib/api/deployments/deployment-result.d.ts +21 -0
  94. package/lib/api/deployments/deployment-result.js +10 -0
  95. package/lib/api/deployments/deployments.d.ts +289 -0
  96. package/lib/api/deployments/deployments.js +355 -0
  97. package/lib/api/deployments/index.d.ts +6 -0
  98. package/lib/api/deployments/index.js +27 -0
  99. package/lib/api/diff/diff-formatter.d.ts +147 -0
  100. package/lib/api/diff/diff-formatter.js +225 -0
  101. package/lib/api/diff/index.d.ts +1 -0
  102. package/lib/api/diff/index.js +18 -0
  103. package/lib/api/environment/environment-access.d.ts +139 -0
  104. package/lib/api/environment/environment-access.js +205 -0
  105. package/lib/api/environment/environment-resources.d.ts +75 -0
  106. package/lib/api/environment/environment-resources.js +213 -0
  107. package/lib/api/environment/index.d.ts +3 -0
  108. package/lib/api/environment/index.js +20 -0
  109. package/lib/api/environment/placeholders.d.ts +10 -0
  110. package/lib/api/environment/placeholders.js +23 -0
  111. package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
  112. package/lib/api/garbage-collection/garbage-collector.js +614 -0
  113. package/lib/api/garbage-collection/index.d.ts +3 -0
  114. package/lib/api/garbage-collection/index.js +21 -0
  115. package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
  116. package/lib/api/garbage-collection/progress-printer.js +80 -0
  117. package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
  118. package/lib/api/garbage-collection/stack-refresh.js +152 -0
  119. package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
  120. package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
  121. package/lib/api/hotswap/code-build-projects.d.ts +4 -0
  122. package/lib/api/hotswap/code-build-projects.js +62 -0
  123. package/lib/api/hotswap/common.d.ts +89 -0
  124. package/lib/api/hotswap/common.js +137 -0
  125. package/lib/api/hotswap/ecs-services.d.ts +4 -0
  126. package/lib/api/hotswap/ecs-services.js +159 -0
  127. package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
  128. package/lib/api/hotswap/hotswap-deployments.js +441 -0
  129. package/lib/api/hotswap/index.d.ts +2 -0
  130. package/lib/api/hotswap/index.js +19 -0
  131. package/lib/api/hotswap/lambda-functions.d.ts +4 -0
  132. package/lib/api/hotswap/lambda-functions.js +297 -0
  133. package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
  134. package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
  135. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
  136. package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
  137. package/lib/api/index.d.ts +25 -0
  138. package/lib/api/index.js +42 -0
  139. package/lib/api/io/index.d.ts +3 -1
  140. package/lib/api/io/index.js +18 -1
  141. package/lib/api/io/io-host.d.ts +15 -0
  142. package/lib/api/io/io-host.js +3 -0
  143. package/lib/api/io/io-message.d.ts +76 -0
  144. package/lib/api/io/io-message.js +3 -0
  145. package/lib/api/io/private/index.d.ts +7 -1
  146. package/lib/api/io/private/index.js +8 -5
  147. package/lib/api/io/private/io-default-messages.d.ts +21 -0
  148. package/lib/api/io/private/io-default-messages.js +59 -0
  149. package/lib/api/io/private/io-helper.d.ts +32 -0
  150. package/lib/api/io/private/io-helper.js +51 -0
  151. package/lib/api/io/private/level-priority.d.ts +11 -0
  152. package/lib/api/io/private/level-priority.js +33 -0
  153. package/lib/api/io/private/message-maker.d.ts +89 -0
  154. package/lib/api/io/private/message-maker.js +60 -0
  155. package/lib/api/io/private/messages.d.ts +178 -0
  156. package/lib/api/io/private/messages.js +534 -0
  157. package/lib/api/io/private/span.d.ts +93 -0
  158. package/lib/api/io/private/span.js +87 -0
  159. package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
  160. package/lib/api/io/private/testing/fake-io-host.js +41 -0
  161. package/lib/api/io/private/testing/index.d.ts +2 -0
  162. package/lib/api/io/private/testing/index.js +19 -0
  163. package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
  164. package/lib/api/io/private/testing/test-io-host.js +61 -0
  165. package/lib/api/io/private/types.d.ts +4 -0
  166. package/lib/api/io/private/types.js +3 -0
  167. package/lib/api/io/toolkit-action.d.ts +4 -0
  168. package/lib/api/io/toolkit-action.js +3 -0
  169. package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
  170. package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
  171. package/lib/api/logs-monitor/index.d.ts +2 -0
  172. package/lib/api/logs-monitor/index.js +19 -0
  173. package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
  174. package/lib/api/logs-monitor/logs-monitor.js +194 -0
  175. package/lib/api/notices.d.ts +210 -0
  176. package/lib/api/notices.js +430 -0
  177. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  178. package/lib/api/plugin/context-provider-plugin.js +7 -0
  179. package/lib/api/plugin/index.d.ts +3 -0
  180. package/lib/api/plugin/index.js +20 -0
  181. package/lib/api/plugin/mode.d.ts +4 -0
  182. package/lib/api/plugin/mode.js +9 -0
  183. package/lib/api/plugin/plugin.d.ts +72 -0
  184. package/lib/api/plugin/plugin.js +132 -0
  185. package/lib/api/private.d.ts +1 -0
  186. package/lib/api/private.js +18 -0
  187. package/lib/api/refactoring/cloudformation.d.ts +15 -0
  188. package/lib/api/refactoring/cloudformation.js +3 -0
  189. package/lib/api/refactoring/digest.d.ts +26 -0
  190. package/lib/api/refactoring/digest.js +175 -0
  191. package/lib/api/refactoring/index.d.ts +51 -0
  192. package/lib/api/refactoring/index.js +223 -0
  193. package/lib/api/require-approval.d.ts +17 -0
  194. package/lib/api/require-approval.js +22 -0
  195. package/lib/api/resource-import/importer.d.ts +216 -0
  196. package/lib/api/resource-import/importer.js +331 -0
  197. package/lib/api/resource-import/index.d.ts +2 -0
  198. package/lib/api/resource-import/index.js +19 -0
  199. package/lib/api/resource-import/migrator.d.ts +26 -0
  200. package/lib/api/resource-import/migrator.js +73 -0
  201. package/lib/api/resource-metadata/index.d.ts +1 -0
  202. package/lib/api/resource-metadata/index.js +18 -0
  203. package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
  204. package/lib/api/resource-metadata/resource-metadata.js +42 -0
  205. package/lib/api/rwlock.d.ts +60 -0
  206. package/lib/api/rwlock.js +204 -0
  207. package/lib/api/settings.d.ts +26 -0
  208. package/lib/api/settings.js +107 -0
  209. package/lib/api/shared-private.d.ts +8 -6
  210. package/lib/api/shared-private.js +2838 -9213
  211. package/lib/api/shared-private.js.map +4 -4
  212. package/lib/api/shared-public.d.ts +18 -38
  213. package/lib/api/shared-public.js +2187 -25
  214. package/lib/api/shared-public.js.map +4 -4
  215. package/lib/api/stack-events/index.d.ts +4 -0
  216. package/lib/api/stack-events/index.js +23 -0
  217. package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
  218. package/lib/api/stack-events/stack-activity-monitor.js +164 -0
  219. package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
  220. package/lib/api/stack-events/stack-event-poller.js +130 -0
  221. package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
  222. package/lib/api/stack-events/stack-progress-monitor.js +98 -0
  223. package/lib/api/stack-events/stack-status.d.ts +42 -0
  224. package/lib/api/stack-events/stack-status.js +90 -0
  225. package/lib/api/streams.d.ts +7 -0
  226. package/lib/api/streams.js +24 -0
  227. package/lib/api/tags.d.ts +9 -0
  228. package/lib/api/tags.js +10 -0
  229. package/lib/api/toolkit-error.d.ts +86 -0
  230. package/lib/api/toolkit-error.js +132 -0
  231. package/lib/api/toolkit-info.d.ts +52 -0
  232. package/lib/api/toolkit-info.js +157 -0
  233. package/lib/api/tree.d.ts +31 -0
  234. package/lib/api/tree.js +37 -0
  235. package/lib/api/work-graph/index.d.ts +3 -0
  236. package/lib/api/work-graph/index.js +20 -0
  237. package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
  238. package/lib/api/work-graph/work-graph-builder.js +172 -0
  239. package/lib/api/work-graph/work-graph-types.d.ts +50 -0
  240. package/lib/api/work-graph/work-graph-types.js +13 -0
  241. package/lib/api/work-graph/work-graph.d.ts +72 -0
  242. package/lib/api/work-graph/work-graph.js +349 -0
  243. package/lib/context-providers/ami.d.ts +13 -0
  244. package/lib/context-providers/ami.js +52 -0
  245. package/lib/context-providers/availability-zones.d.ts +13 -0
  246. package/lib/context-providers/availability-zones.js +29 -0
  247. package/lib/context-providers/cc-api-provider.d.ts +30 -0
  248. package/lib/context-providers/cc-api-provider.js +145 -0
  249. package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
  250. package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
  251. package/lib/context-providers/hosted-zones.d.ts +12 -0
  252. package/lib/context-providers/hosted-zones.js +69 -0
  253. package/lib/context-providers/index.d.ts +44 -0
  254. package/lib/context-providers/index.js +128 -0
  255. package/lib/context-providers/keys.d.ts +13 -0
  256. package/lib/context-providers/keys.js +54 -0
  257. package/lib/context-providers/load-balancers.d.ts +20 -0
  258. package/lib/context-providers/load-balancers.js +161 -0
  259. package/lib/context-providers/security-groups.d.ts +9 -0
  260. package/lib/context-providers/security-groups.js +69 -0
  261. package/lib/context-providers/ssm-parameters.d.ts +25 -0
  262. package/lib/context-providers/ssm-parameters.js +61 -0
  263. package/lib/context-providers/vpcs.d.ts +13 -0
  264. package/lib/context-providers/vpcs.js +291 -0
  265. package/lib/index.d.ts +1 -0
  266. package/lib/index.js +2 -1
  267. package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
  268. package/lib/payloads/bootstrap-environment-progress.js +3 -0
  269. package/lib/payloads/context.d.ts +9 -0
  270. package/lib/payloads/context.js +3 -0
  271. package/lib/payloads/deploy.d.ts +43 -0
  272. package/lib/payloads/deploy.js +3 -0
  273. package/lib/payloads/destroy.d.ts +23 -0
  274. package/lib/payloads/destroy.js +3 -0
  275. package/lib/payloads/diff.d.ts +31 -0
  276. package/lib/payloads/diff.js +22 -0
  277. package/lib/payloads/hotswap.d.ts +211 -0
  278. package/lib/payloads/hotswap.js +43 -0
  279. package/lib/payloads/index.d.ts +17 -0
  280. package/lib/payloads/index.js +34 -0
  281. package/lib/payloads/list.d.ts +4 -0
  282. package/lib/payloads/list.js +3 -0
  283. package/lib/payloads/logs-monitor.d.ts +33 -0
  284. package/lib/payloads/logs-monitor.js +3 -0
  285. package/lib/payloads/progress.d.ts +14 -0
  286. package/lib/payloads/progress.js +3 -0
  287. package/lib/payloads/refactor.d.ts +14 -0
  288. package/lib/payloads/refactor.js +3 -0
  289. package/lib/payloads/rollback.d.ts +17 -0
  290. package/lib/payloads/rollback.js +3 -0
  291. package/lib/payloads/sdk-trace.d.ts +20 -0
  292. package/lib/payloads/sdk-trace.js +3 -0
  293. package/lib/payloads/stack-activity.d.ts +53 -0
  294. package/lib/payloads/stack-activity.js +3 -0
  295. package/lib/payloads/stack-details.d.ts +17 -0
  296. package/lib/payloads/stack-details.js +3 -0
  297. package/lib/payloads/synth.d.ts +7 -0
  298. package/lib/payloads/synth.js +3 -0
  299. package/lib/payloads/types.d.ts +95 -0
  300. package/lib/payloads/types.js +3 -0
  301. package/lib/payloads/watch.d.ts +27 -0
  302. package/lib/payloads/watch.js +3 -0
  303. package/lib/private/activity-printer/base.d.ts +50 -0
  304. package/lib/private/activity-printer/base.js +120 -0
  305. package/lib/private/activity-printer/current.d.ts +26 -0
  306. package/lib/private/activity-printer/current.js +122 -0
  307. package/lib/private/activity-printer/display.d.ts +13 -0
  308. package/lib/private/activity-printer/display.js +81 -0
  309. package/lib/private/activity-printer/history.d.ts +32 -0
  310. package/lib/private/activity-printer/history.js +109 -0
  311. package/lib/private/activity-printer/index.d.ts +3 -0
  312. package/lib/private/activity-printer/index.js +20 -0
  313. package/lib/private/index.d.ts +1 -0
  314. package/lib/private/index.js +18 -0
  315. package/lib/private/util.d.ts +1 -1
  316. package/lib/private/util.js +22 -22
  317. package/lib/private/util.js.map +2 -2
  318. package/lib/toolkit/private/index.d.ts +2 -1
  319. package/lib/toolkit/private/index.js +1 -1
  320. package/lib/toolkit/toolkit.js +142 -124
  321. package/lib/toolkit/types.d.ts +0 -55
  322. package/lib/toolkit/types.js +1 -1
  323. package/lib/util/archive.d.ts +1 -0
  324. package/lib/util/archive.js +86 -0
  325. package/lib/util/arrays.d.ts +14 -0
  326. package/lib/util/arrays.js +36 -0
  327. package/lib/util/bool.d.ts +7 -0
  328. package/lib/util/bool.js +13 -0
  329. package/lib/util/bytes.d.ts +8 -0
  330. package/lib/util/bytes.js +21 -0
  331. package/lib/util/cloudformation.d.ts +16 -0
  332. package/lib/util/cloudformation.js +36 -0
  333. package/lib/util/content-hash.d.ts +5 -0
  334. package/lib/util/content-hash.js +43 -0
  335. package/lib/util/directories.d.ts +22 -0
  336. package/lib/util/directories.js +59 -0
  337. package/lib/util/format-error.d.ts +9 -0
  338. package/lib/util/format-error.js +22 -0
  339. package/lib/util/index.d.ts +18 -0
  340. package/lib/util/index.js +35 -0
  341. package/lib/util/json.d.ts +48 -0
  342. package/lib/util/json.js +68 -0
  343. package/lib/util/objects.d.ts +65 -0
  344. package/lib/util/objects.js +230 -0
  345. package/lib/util/package-info.d.ts +3 -0
  346. package/lib/util/package-info.js +22 -0
  347. package/lib/util/parallel.d.ts +6 -0
  348. package/lib/util/parallel.js +48 -0
  349. package/lib/util/serialize.d.ts +27 -0
  350. package/lib/util/serialize.js +86 -0
  351. package/lib/util/string-manipulation.d.ts +18 -0
  352. package/lib/util/string-manipulation.js +46 -0
  353. package/lib/util/type-brands.d.ts +39 -0
  354. package/lib/util/type-brands.js +39 -0
  355. package/lib/util/types.d.ts +27 -0
  356. package/lib/util/types.js +25 -0
  357. package/lib/util/version-range.d.ts +2 -0
  358. package/lib/util/version-range.js +36 -0
  359. package/lib/util/yaml-cfn.d.ts +15 -0
  360. package/lib/util/yaml-cfn.js +58 -0
  361. package/package.json +3 -4
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadCurrentTemplateWithNestedStacks = loadCurrentTemplateWithNestedStacks;
4
+ exports.loadCurrentTemplate = loadCurrentTemplate;
5
+ const path = require("path");
6
+ const fs = require("fs-extra");
7
+ const evaluate_cloudformation_template_1 = require("./evaluate-cloudformation-template");
8
+ const stack_helpers_1 = require("./stack-helpers");
9
+ const util_1 = require("../../util");
10
+ /**
11
+ * Reads the currently deployed template and all of its nested stack templates from CloudFormation.
12
+ */
13
+ async function loadCurrentTemplateWithNestedStacks(rootStackArtifact, sdk, retrieveProcessedTemplate = false) {
14
+ const deployedRootTemplate = await loadCurrentTemplate(rootStackArtifact, sdk, retrieveProcessedTemplate);
15
+ const nestedStacks = await loadNestedStacks(rootStackArtifact, sdk, {
16
+ generatedTemplate: rootStackArtifact.template,
17
+ deployedTemplate: deployedRootTemplate,
18
+ deployedStackName: rootStackArtifact.stackName,
19
+ });
20
+ return {
21
+ deployedRootTemplate,
22
+ nestedStacks,
23
+ };
24
+ }
25
+ /**
26
+ * Returns the currently deployed template from CloudFormation that corresponds to `stackArtifact`.
27
+ */
28
+ async function loadCurrentTemplate(stackArtifact, sdk, retrieveProcessedTemplate = false) {
29
+ return loadCurrentStackTemplate(stackArtifact.stackName, sdk, retrieveProcessedTemplate);
30
+ }
31
+ async function loadCurrentStackTemplate(stackName, sdk, retrieveProcessedTemplate = false) {
32
+ const cfn = sdk.cloudFormation();
33
+ const stack = await stack_helpers_1.CloudFormationStack.lookup(cfn, stackName, retrieveProcessedTemplate);
34
+ return stack.template();
35
+ }
36
+ async function loadNestedStacks(rootStackArtifact, sdk, parentTemplates) {
37
+ const listStackResources = parentTemplates.deployedStackName
38
+ ? new evaluate_cloudformation_template_1.LazyListStackResources(sdk, parentTemplates.deployedStackName)
39
+ : undefined;
40
+ const nestedStacks = {};
41
+ for (const [nestedStackLogicalId, generatedNestedStackResource] of Object.entries(parentTemplates.generatedTemplate.Resources ?? {})) {
42
+ if (!isCdkManagedNestedStack(generatedNestedStackResource)) {
43
+ continue;
44
+ }
45
+ const assetPath = generatedNestedStackResource.Metadata['aws:asset:path'];
46
+ const nestedStackTemplates = await getNestedStackTemplates(rootStackArtifact, assetPath, nestedStackLogicalId, listStackResources, sdk);
47
+ nestedStacks[nestedStackLogicalId] = {
48
+ deployedTemplate: nestedStackTemplates.deployedTemplate,
49
+ generatedTemplate: nestedStackTemplates.generatedTemplate,
50
+ physicalName: nestedStackTemplates.deployedStackName,
51
+ nestedStackTemplates: await loadNestedStacks(rootStackArtifact, sdk, nestedStackTemplates),
52
+ };
53
+ }
54
+ return nestedStacks;
55
+ }
56
+ async function getNestedStackTemplates(rootStackArtifact, nestedTemplateAssetPath, nestedStackLogicalId, listStackResources, sdk) {
57
+ const nestedTemplatePath = path.join(rootStackArtifact.assembly.directory, nestedTemplateAssetPath);
58
+ // CFN generates the nested stack name in the form `ParentStackName-NestedStackLogicalID-SomeHashWeCan'tCompute,
59
+ // the arn is of the form: arn:aws:cloudformation:region:123456789012:stack/NestedStackName/AnotherHashWeDon'tNeed
60
+ // so we get the ARN and manually extract the name.
61
+ const nestedStackArn = await getNestedStackArn(nestedStackLogicalId, listStackResources);
62
+ const deployedStackName = nestedStackArn?.slice(nestedStackArn.indexOf('/') + 1, nestedStackArn.lastIndexOf('/'));
63
+ return {
64
+ generatedTemplate: JSON.parse(fs.readFileSync(nestedTemplatePath, 'utf-8')),
65
+ deployedTemplate: deployedStackName ? await loadCurrentStackTemplate(deployedStackName, sdk) : {},
66
+ deployedStackName,
67
+ };
68
+ }
69
+ async function getNestedStackArn(nestedStackLogicalId, listStackResources) {
70
+ try {
71
+ const stackResources = await listStackResources?.listStackResources();
72
+ return stackResources?.find((sr) => sr.LogicalResourceId === nestedStackLogicalId)?.PhysicalResourceId;
73
+ }
74
+ catch (e) {
75
+ if ((0, util_1.formatErrorMessage)(e).startsWith('Stack with id ') && (0, util_1.formatErrorMessage)(e).endsWith(' does not exist')) {
76
+ return;
77
+ }
78
+ throw e;
79
+ }
80
+ }
81
+ function isCdkManagedNestedStack(stackResource) {
82
+ return (stackResource.Type === 'AWS::CloudFormation::Stack' &&
83
+ stackResource.Metadata &&
84
+ stackResource.Metadata['aws:asset:path']);
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLXN0YWNrLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJuZXN0ZWQtc3RhY2staGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSxrRkFnQkM7QUFLRCxrREFNQztBQTdDRCw2QkFBNkI7QUFFN0IsK0JBQStCO0FBQy9CLHlGQUFxRztBQUNyRyxtREFBcUU7QUFDckUscUNBQWdEO0FBVWhEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLG1DQUFtQyxDQUN2RCxpQkFBOEMsRUFDOUMsR0FBUSxFQUNSLDRCQUFxQyxLQUFLO0lBRTFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUMxRyxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUNsRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1FBQzdDLGdCQUFnQixFQUFFLG9CQUFvQjtRQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTO0tBQy9DLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxvQkFBb0I7UUFDcEIsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLGFBQTBDLEVBQzFDLEdBQVEsRUFDUiw0QkFBcUMsS0FBSztJQUUxQyxPQUFPLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVELEtBQUssVUFBVSx3QkFBd0IsQ0FDckMsU0FBaUIsRUFDakIsR0FBUSxFQUNSLDRCQUFxQyxLQUFLO0lBRTFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLG1DQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDMUYsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELEtBQUssVUFBVSxnQkFBZ0IsQ0FDN0IsaUJBQThDLEVBQzlDLEdBQVEsRUFDUixlQUErQjtJQUUvQixNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxpQkFBaUI7UUFDMUQsQ0FBQyxDQUFDLElBQUkseURBQXNCLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztRQUNwRSxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsTUFBTSxZQUFZLEdBQTZELEVBQUUsQ0FBQztJQUNsRixLQUFLLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQy9FLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUNsRCxFQUFFLENBQUM7UUFDRixJQUFJLENBQUMsdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO1lBQzNELFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLHVCQUF1QixDQUN4RCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsR0FBRyxDQUNKLENBQUM7UUFFRixZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRztZQUNuQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxnQkFBZ0I7WUFDdkQsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCO1lBQ3pELFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUI7WUFDcEQsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLENBQUM7U0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsS0FBSyxVQUFVLHVCQUF1QixDQUNwQyxpQkFBOEMsRUFDOUMsdUJBQStCLEVBQy9CLG9CQUE0QixFQUM1QixrQkFBa0QsRUFDbEQsR0FBUTtJQUVSLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFcEcsZ0hBQWdIO0lBQ2hILGtIQUFrSDtJQUNsSCxtREFBbUQ7SUFDbkQsTUFBTSxjQUFjLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pGLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFbEgsT0FBTztRQUNMLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqRyxpQkFBaUI7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsaUJBQWlCLENBQzlCLG9CQUE0QixFQUM1QixrQkFBdUM7SUFFdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLGlCQUFpQixLQUFLLG9CQUFvQixDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDekcsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsSUFBSSxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUEseUJBQWtCLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUM1RyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLGFBQWtCO0lBQ2pELE9BQU8sQ0FDTCxhQUFhLENBQUMsSUFBSSxLQUFLLDRCQUE0QjtRQUNuRCxhQUFhLENBQUMsUUFBUTtRQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IExhenlMaXN0U3RhY2tSZXNvdXJjZXMsIHR5cGUgTGlzdFN0YWNrUmVzb3VyY2VzIH0gZnJvbSAnLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCB0eXBlIFRlbXBsYXRlIH0gZnJvbSAnLi9zdGFjay1oZWxwZXJzJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBSb290VGVtcGxhdGVXaXRoTmVzdGVkU3RhY2tzIHtcbiAgcmVhZG9ubHkgZGVwbG95ZWRSb290VGVtcGxhdGU6IFRlbXBsYXRlO1xuICByZWFkb25seSBuZXN0ZWRTdGFja3M6IHtcbiAgICBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzO1xuICB9O1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjdXJyZW50bHkgZGVwbG95ZWQgdGVtcGxhdGUgYW5kIGFsbCBvZiBpdHMgbmVzdGVkIHN0YWNrIHRlbXBsYXRlcyBmcm9tIENsb3VkRm9ybWF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEN1cnJlbnRUZW1wbGF0ZVdpdGhOZXN0ZWRTdGFja3MoXG4gIHJvb3RTdGFja0FydGlmYWN0OiBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIHNkazogU0RLLFxuICByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlOiBib29sZWFuID0gZmFsc2UsXG4pOiBQcm9taXNlPFJvb3RUZW1wbGF0ZVdpdGhOZXN0ZWRTdGFja3M+IHtcbiAgY29uc3QgZGVwbG95ZWRSb290VGVtcGxhdGUgPSBhd2FpdCBsb2FkQ3VycmVudFRlbXBsYXRlKHJvb3RTdGFja0FydGlmYWN0LCBzZGssIHJldHJpZXZlUHJvY2Vzc2VkVGVtcGxhdGUpO1xuICBjb25zdCBuZXN0ZWRTdGFja3MgPSBhd2FpdCBsb2FkTmVzdGVkU3RhY2tzKHJvb3RTdGFja0FydGlmYWN0LCBzZGssIHtcbiAgICBnZW5lcmF0ZWRUZW1wbGF0ZTogcm9vdFN0YWNrQXJ0aWZhY3QudGVtcGxhdGUsXG4gICAgZGVwbG95ZWRUZW1wbGF0ZTogZGVwbG95ZWRSb290VGVtcGxhdGUsXG4gICAgZGVwbG95ZWRTdGFja05hbWU6IHJvb3RTdGFja0FydGlmYWN0LnN0YWNrTmFtZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkZXBsb3llZFJvb3RUZW1wbGF0ZSxcbiAgICBuZXN0ZWRTdGFja3MsXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudGx5IGRlcGxveWVkIHRlbXBsYXRlIGZyb20gQ2xvdWRGb3JtYXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byBgc3RhY2tBcnRpZmFjdGAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ3VycmVudFRlbXBsYXRlKFxuICBzdGFja0FydGlmYWN0OiBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIHNkazogU0RLLFxuICByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlOiBib29sZWFuID0gZmFsc2UsXG4pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gIHJldHVybiBsb2FkQ3VycmVudFN0YWNrVGVtcGxhdGUoc3RhY2tBcnRpZmFjdC5zdGFja05hbWUsIHNkaywgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDdXJyZW50U3RhY2tUZW1wbGF0ZShcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIHNkazogU0RLLFxuICByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlOiBib29sZWFuID0gZmFsc2UsXG4pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gIGNvbnN0IGNmbiA9IHNkay5jbG91ZEZvcm1hdGlvbigpO1xuICBjb25zdCBzdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgc3RhY2tOYW1lLCByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlKTtcbiAgcmV0dXJuIHN0YWNrLnRlbXBsYXRlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWROZXN0ZWRTdGFja3MoXG4gIHJvb3RTdGFja0FydGlmYWN0OiBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIHNkazogU0RLLFxuICBwYXJlbnRUZW1wbGF0ZXM6IFN0YWNrVGVtcGxhdGVzLFxuKTogUHJvbWlzZTx7IFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfT4ge1xuICBjb25zdCBsaXN0U3RhY2tSZXNvdXJjZXMgPSBwYXJlbnRUZW1wbGF0ZXMuZGVwbG95ZWRTdGFja05hbWVcbiAgICA/IG5ldyBMYXp5TGlzdFN0YWNrUmVzb3VyY2VzKHNkaywgcGFyZW50VGVtcGxhdGVzLmRlcGxveWVkU3RhY2tOYW1lKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBuZXN0ZWRTdGFja3M6IHsgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9ID0ge307XG4gIGZvciAoY29uc3QgW25lc3RlZFN0YWNrTG9naWNhbElkLCBnZW5lcmF0ZWROZXN0ZWRTdGFja1Jlc291cmNlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBwYXJlbnRUZW1wbGF0ZXMuZ2VuZXJhdGVkVGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9LFxuICApKSB7XG4gICAgaWYgKCFpc0Nka01hbmFnZWROZXN0ZWRTdGFjayhnZW5lcmF0ZWROZXN0ZWRTdGFja1Jlc291cmNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRQYXRoID0gZ2VuZXJhdGVkTmVzdGVkU3RhY2tSZXNvdXJjZS5NZXRhZGF0YVsnYXdzOmFzc2V0OnBhdGgnXTtcbiAgICBjb25zdCBuZXN0ZWRTdGFja1RlbXBsYXRlcyA9IGF3YWl0IGdldE5lc3RlZFN0YWNrVGVtcGxhdGVzKFxuICAgICAgcm9vdFN0YWNrQXJ0aWZhY3QsXG4gICAgICBhc3NldFBhdGgsXG4gICAgICBuZXN0ZWRTdGFja0xvZ2ljYWxJZCxcbiAgICAgIGxpc3RTdGFja1Jlc291cmNlcyxcbiAgICAgIHNkayxcbiAgICApO1xuXG4gICAgbmVzdGVkU3RhY2tzW25lc3RlZFN0YWNrTG9naWNhbElkXSA9IHtcbiAgICAgIGRlcGxveWVkVGVtcGxhdGU6IG5lc3RlZFN0YWNrVGVtcGxhdGVzLmRlcGxveWVkVGVtcGxhdGUsXG4gICAgICBnZW5lcmF0ZWRUZW1wbGF0ZTogbmVzdGVkU3RhY2tUZW1wbGF0ZXMuZ2VuZXJhdGVkVGVtcGxhdGUsXG4gICAgICBwaHlzaWNhbE5hbWU6IG5lc3RlZFN0YWNrVGVtcGxhdGVzLmRlcGxveWVkU3RhY2tOYW1lLFxuICAgICAgbmVzdGVkU3RhY2tUZW1wbGF0ZXM6IGF3YWl0IGxvYWROZXN0ZWRTdGFja3Mocm9vdFN0YWNrQXJ0aWZhY3QsIHNkaywgbmVzdGVkU3RhY2tUZW1wbGF0ZXMpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbmVzdGVkU3RhY2tzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROZXN0ZWRTdGFja1RlbXBsYXRlcyhcbiAgcm9vdFN0YWNrQXJ0aWZhY3Q6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgbmVzdGVkVGVtcGxhdGVBc3NldFBhdGg6IHN0cmluZyxcbiAgbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZyxcbiAgbGlzdFN0YWNrUmVzb3VyY2VzOiBMaXN0U3RhY2tSZXNvdXJjZXMgfCB1bmRlZmluZWQsXG4gIHNkazogU0RLLFxuKTogUHJvbWlzZTxTdGFja1RlbXBsYXRlcz4ge1xuICBjb25zdCBuZXN0ZWRUZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4ocm9vdFN0YWNrQXJ0aWZhY3QuYXNzZW1ibHkuZGlyZWN0b3J5LCBuZXN0ZWRUZW1wbGF0ZUFzc2V0UGF0aCk7XG5cbiAgLy8gQ0ZOIGdlbmVyYXRlcyB0aGUgbmVzdGVkIHN0YWNrIG5hbWUgaW4gdGhlIGZvcm0gYFBhcmVudFN0YWNrTmFtZS1OZXN0ZWRTdGFja0xvZ2ljYWxJRC1Tb21lSGFzaFdlQ2FuJ3RDb21wdXRlLFxuICAvLyB0aGUgYXJuIGlzIG9mIHRoZSBmb3JtOiBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOnJlZ2lvbjoxMjM0NTY3ODkwMTI6c3RhY2svTmVzdGVkU3RhY2tOYW1lL0Fub3RoZXJIYXNoV2VEb24ndE5lZWRcbiAgLy8gc28gd2UgZ2V0IHRoZSBBUk4gYW5kIG1hbnVhbGx5IGV4dHJhY3QgdGhlIG5hbWUuXG4gIGNvbnN0IG5lc3RlZFN0YWNrQXJuID0gYXdhaXQgZ2V0TmVzdGVkU3RhY2tBcm4obmVzdGVkU3RhY2tMb2dpY2FsSWQsIGxpc3RTdGFja1Jlc291cmNlcyk7XG4gIGNvbnN0IGRlcGxveWVkU3RhY2tOYW1lID0gbmVzdGVkU3RhY2tBcm4/LnNsaWNlKG5lc3RlZFN0YWNrQXJuLmluZGV4T2YoJy8nKSArIDEsIG5lc3RlZFN0YWNrQXJuLmxhc3RJbmRleE9mKCcvJykpO1xuXG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVkVGVtcGxhdGU6IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKG5lc3RlZFRlbXBsYXRlUGF0aCwgJ3V0Zi04JykpLFxuICAgIGRlcGxveWVkVGVtcGxhdGU6IGRlcGxveWVkU3RhY2tOYW1lID8gYXdhaXQgbG9hZEN1cnJlbnRTdGFja1RlbXBsYXRlKGRlcGxveWVkU3RhY2tOYW1lLCBzZGspIDoge30sXG4gICAgZGVwbG95ZWRTdGFja05hbWUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5lc3RlZFN0YWNrQXJuKFxuICBuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nLFxuICBsaXN0U3RhY2tSZXNvdXJjZXM/OiBMaXN0U3RhY2tSZXNvdXJjZXMsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgbGlzdFN0YWNrUmVzb3VyY2VzPy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM/LmZpbmQoKHNyKSA9PiBzci5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbmVzdGVkU3RhY2tMb2dpY2FsSWQpPy5QaHlzaWNhbFJlc291cmNlSWQ7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGlmIChmb3JtYXRFcnJvck1lc3NhZ2UoZSkuc3RhcnRzV2l0aCgnU3RhY2sgd2l0aCBpZCAnKSAmJiBmb3JtYXRFcnJvck1lc3NhZ2UoZSkuZW5kc1dpdGgoJyBkb2VzIG5vdCBleGlzdCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZGtNYW5hZ2VkTmVzdGVkU3RhY2soc3RhY2tSZXNvdXJjZTogYW55KTogc3RhY2tSZXNvdXJjZSBpcyBOZXN0ZWRTdGFja1Jlc291cmNlIHtcbiAgcmV0dXJuIChcbiAgICBzdGFja1Jlc291cmNlLlR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiZcbiAgICBzdGFja1Jlc291cmNlLk1ldGFkYXRhICYmXG4gICAgc3RhY2tSZXNvdXJjZS5NZXRhZGF0YVsnYXdzOmFzc2V0OnBhdGgnXVxuICApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5lc3RlZFN0YWNrVGVtcGxhdGVzIHtcbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGRlcGxveWVkVGVtcGxhdGU6IFRlbXBsYXRlO1xuICByZWFkb25seSBnZW5lcmF0ZWRUZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHJlYWRvbmx5IG5lc3RlZFN0YWNrVGVtcGxhdGVzOiB7XG4gICAgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFN0YWNrVGVtcGxhdGVzIHtcbiAgcmVhZG9ubHkgZ2VuZXJhdGVkVGVtcGxhdGU6IGFueTtcbiAgcmVhZG9ubHkgZGVwbG95ZWRUZW1wbGF0ZTogYW55O1xuICByZWFkb25seSBkZXBsb3llZFN0YWNrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgTmVzdGVkU3RhY2tSZXNvdXJjZSB7XG4gIHJlYWRvbmx5IE1ldGFkYXRhOiB7ICdhd3M6YXNzZXQ6cGF0aCc6IHN0cmluZyB9O1xuICByZWFkb25seSBQcm9wZXJ0aWVzOiBhbnk7XG59XG4iXX0=
@@ -0,0 +1,96 @@
1
+ import type { Stack, Tag } from '@aws-sdk/client-cloudformation';
2
+ import type { ICloudFormationClient } from '../aws-auth/private';
3
+ import { StackStatus } from '../stack-events';
4
+ export interface Template {
5
+ Parameters?: Record<string, TemplateParameter>;
6
+ [section: string]: any;
7
+ }
8
+ export interface TemplateParameter {
9
+ Type: string;
10
+ Default?: any;
11
+ Description?: string;
12
+ [key: string]: any;
13
+ }
14
+ /**
15
+ * Represents an (existing) Stack in CloudFormation
16
+ *
17
+ * Bundle and cache some information that we need during deployment (so we don't have to make
18
+ * repeated calls to CloudFormation).
19
+ */
20
+ export declare class CloudFormationStack {
21
+ private readonly cfn;
22
+ readonly stackName: string;
23
+ private readonly stack?;
24
+ private readonly retrieveProcessedTemplate;
25
+ static lookup(cfn: ICloudFormationClient, stackName: string, retrieveProcessedTemplate?: boolean): Promise<CloudFormationStack>;
26
+ /**
27
+ * Return a copy of the given stack that does not exist
28
+ *
29
+ * It's a little silly that it needs arguments to do that, but there we go.
30
+ */
31
+ static doesNotExist(cfn: ICloudFormationClient, stackName: string): CloudFormationStack;
32
+ /**
33
+ * From static information (for testing)
34
+ */
35
+ static fromStaticInformation(cfn: ICloudFormationClient, stackName: string, stack: Stack): CloudFormationStack;
36
+ private _template;
37
+ protected constructor(cfn: ICloudFormationClient, stackName: string, stack?: Stack | undefined, retrieveProcessedTemplate?: boolean);
38
+ /**
39
+ * Retrieve the stack's deployed template
40
+ *
41
+ * Cached, so will only be retrieved once. Will return an empty
42
+ * structure if the stack does not exist.
43
+ */
44
+ template(): Promise<Template>;
45
+ /**
46
+ * Whether the stack exists
47
+ */
48
+ get exists(): boolean;
49
+ /**
50
+ * The stack's ID (which is the same as its ARN)
51
+ *
52
+ * Throws if the stack doesn't exist.
53
+ */
54
+ get stackId(): string;
55
+ /**
56
+ * The stack's current outputs
57
+ *
58
+ * Empty object if the stack doesn't exist
59
+ */
60
+ get outputs(): Record<string, string>;
61
+ /**
62
+ * The stack's status
63
+ *
64
+ * Special status NOT_FOUND if the stack does not exist.
65
+ */
66
+ get stackStatus(): StackStatus;
67
+ /**
68
+ * The stack's current tags
69
+ *
70
+ * Empty list if the stack does not exist
71
+ */
72
+ get tags(): Tag[];
73
+ /**
74
+ * SNS Topic ARNs that will receive stack events.
75
+ *
76
+ * Empty list if the stack does not exist
77
+ */
78
+ get notificationArns(): string[];
79
+ /**
80
+ * Return the names of all current parameters to the stack
81
+ *
82
+ * Empty list if the stack does not exist.
83
+ */
84
+ get parameterNames(): string[];
85
+ /**
86
+ * Return the names and values of all current parameters to the stack
87
+ *
88
+ * Empty object if the stack does not exist.
89
+ */
90
+ get parameters(): Record<string, string>;
91
+ /**
92
+ * Return the termination protection of the stack
93
+ */
94
+ get terminationProtection(): boolean | undefined;
95
+ private assertExists;
96
+ }
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudFormationStack = void 0;
4
+ const util_1 = require("../../util");
5
+ const stack_events_1 = require("../stack-events");
6
+ const toolkit_error_1 = require("../toolkit-error");
7
+ /**
8
+ * Represents an (existing) Stack in CloudFormation
9
+ *
10
+ * Bundle and cache some information that we need during deployment (so we don't have to make
11
+ * repeated calls to CloudFormation).
12
+ */
13
+ class CloudFormationStack {
14
+ cfn;
15
+ stackName;
16
+ stack;
17
+ retrieveProcessedTemplate;
18
+ static async lookup(cfn, stackName, retrieveProcessedTemplate = false) {
19
+ try {
20
+ const response = await cfn.describeStacks({ StackName: stackName });
21
+ return new CloudFormationStack(cfn, stackName, response.Stacks && response.Stacks[0], retrieveProcessedTemplate);
22
+ }
23
+ catch (e) {
24
+ if (e.name === 'ValidationError' && (0, util_1.formatErrorMessage)(e) === `Stack with id ${stackName} does not exist`) {
25
+ return new CloudFormationStack(cfn, stackName, undefined);
26
+ }
27
+ throw e;
28
+ }
29
+ }
30
+ /**
31
+ * Return a copy of the given stack that does not exist
32
+ *
33
+ * It's a little silly that it needs arguments to do that, but there we go.
34
+ */
35
+ static doesNotExist(cfn, stackName) {
36
+ return new CloudFormationStack(cfn, stackName);
37
+ }
38
+ /**
39
+ * From static information (for testing)
40
+ */
41
+ static fromStaticInformation(cfn, stackName, stack) {
42
+ return new CloudFormationStack(cfn, stackName, stack);
43
+ }
44
+ _template;
45
+ constructor(cfn, stackName, stack, retrieveProcessedTemplate = false) {
46
+ this.cfn = cfn;
47
+ this.stackName = stackName;
48
+ this.stack = stack;
49
+ this.retrieveProcessedTemplate = retrieveProcessedTemplate;
50
+ }
51
+ /**
52
+ * Retrieve the stack's deployed template
53
+ *
54
+ * Cached, so will only be retrieved once. Will return an empty
55
+ * structure if the stack does not exist.
56
+ */
57
+ async template() {
58
+ if (!this.exists) {
59
+ return {};
60
+ }
61
+ if (this._template === undefined) {
62
+ const response = await this.cfn.getTemplate({
63
+ StackName: this.stackName,
64
+ TemplateStage: this.retrieveProcessedTemplate ? 'Processed' : 'Original',
65
+ });
66
+ this._template = (response.TemplateBody && (0, util_1.deserializeStructure)(response.TemplateBody)) || {};
67
+ }
68
+ return this._template;
69
+ }
70
+ /**
71
+ * Whether the stack exists
72
+ */
73
+ get exists() {
74
+ return this.stack !== undefined;
75
+ }
76
+ /**
77
+ * The stack's ID (which is the same as its ARN)
78
+ *
79
+ * Throws if the stack doesn't exist.
80
+ */
81
+ get stackId() {
82
+ this.assertExists();
83
+ return this.stack.StackId;
84
+ }
85
+ /**
86
+ * The stack's current outputs
87
+ *
88
+ * Empty object if the stack doesn't exist
89
+ */
90
+ get outputs() {
91
+ if (!this.exists) {
92
+ return {};
93
+ }
94
+ const result = {};
95
+ (this.stack.Outputs || []).forEach((output) => {
96
+ result[output.OutputKey] = output.OutputValue;
97
+ });
98
+ return result;
99
+ }
100
+ /**
101
+ * The stack's status
102
+ *
103
+ * Special status NOT_FOUND if the stack does not exist.
104
+ */
105
+ get stackStatus() {
106
+ if (!this.exists) {
107
+ return new stack_events_1.StackStatus('NOT_FOUND', 'Stack not found during lookup');
108
+ }
109
+ return stack_events_1.StackStatus.fromStackDescription(this.stack);
110
+ }
111
+ /**
112
+ * The stack's current tags
113
+ *
114
+ * Empty list if the stack does not exist
115
+ */
116
+ get tags() {
117
+ return this.stack?.Tags || [];
118
+ }
119
+ /**
120
+ * SNS Topic ARNs that will receive stack events.
121
+ *
122
+ * Empty list if the stack does not exist
123
+ */
124
+ get notificationArns() {
125
+ return this.stack?.NotificationARNs ?? [];
126
+ }
127
+ /**
128
+ * Return the names of all current parameters to the stack
129
+ *
130
+ * Empty list if the stack does not exist.
131
+ */
132
+ get parameterNames() {
133
+ return Object.keys(this.parameters);
134
+ }
135
+ /**
136
+ * Return the names and values of all current parameters to the stack
137
+ *
138
+ * Empty object if the stack does not exist.
139
+ */
140
+ get parameters() {
141
+ if (!this.exists) {
142
+ return {};
143
+ }
144
+ const ret = {};
145
+ for (const param of this.stack.Parameters ?? []) {
146
+ ret[param.ParameterKey] = param.ResolvedValue ?? param.ParameterValue;
147
+ }
148
+ return ret;
149
+ }
150
+ /**
151
+ * Return the termination protection of the stack
152
+ */
153
+ get terminationProtection() {
154
+ return this.stack?.EnableTerminationProtection;
155
+ }
156
+ assertExists() {
157
+ if (!this.exists) {
158
+ throw new toolkit_error_1.ToolkitError(`No stack named '${this.stackName}'`);
159
+ }
160
+ }
161
+ }
162
+ exports.CloudFormationStack = CloudFormationStack;
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2staGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUNBQXNFO0FBRXRFLGtEQUE4QztBQUM5QyxvREFBZ0Q7QUFjaEQ7Ozs7O0dBS0c7QUFDSCxNQUFhLG1CQUFtQjtJQW9DWDtJQUNEO0lBQ0M7SUFDQTtJQXRDWixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDeEIsR0FBMEIsRUFDMUIsU0FBaUIsRUFDakIsNEJBQXFDLEtBQUs7UUFFMUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGlCQUFpQixJQUFJLElBQUEseUJBQWtCLEVBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLFNBQVMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDMUcsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUEwQixFQUFFLFNBQWlCO1FBQ3RFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixD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QUNILElBQVcsVUFBVTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNqRCxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGNBQWUsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUM7SUFDakQsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksNEJBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBLRCxrREFvS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrLCBUYWcgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlLCBkZXNlcmlhbGl6ZVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IFN0YWNrU3RhdHVzIH0gZnJvbSAnLi4vc3RhY2stZXZlbnRzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPjtcbiAgW3NlY3Rpb246IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVBhcmFtZXRlciB7XG4gIFR5cGU6IHN0cmluZztcbiAgRGVmYXVsdD86IGFueTtcbiAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIChleGlzdGluZykgU3RhY2sgaW4gQ2xvdWRGb3JtYXRpb25cbiAqXG4gKiBCdW5kbGUgYW5kIGNhY2hlIHNvbWUgaW5mb3JtYXRpb24gdGhhdCB3ZSBuZWVkIGR1cmluZyBkZXBsb3ltZW50IChzbyB3ZSBkb24ndCBoYXZlIHRvIG1ha2VcbiAqIHJlcGVhdGVkIGNhbGxzIHRvIENsb3VkRm9ybWF0aW9uKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRm9ybWF0aW9uU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGxvb2t1cChcbiAgICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlOiBib29sZWFuID0gZmFsc2UsXG4gICk6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25TdGFjaz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNmbi5kZXNjcmliZVN0YWNrcyh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pO1xuICAgICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrKGNmbiwgc3RhY2tOYW1lLCByZXNwb25zZS5TdGFja3MgJiYgcmVzcG9uc2UuU3RhY2tzWzBdLCByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm5hbWUgPT09ICdWYWxpZGF0aW9uRXJyb3InICYmIGZvcm1hdEVycm9yTWVzc2FnZShlKSA9PT0gYFN0YWNrIHdpdGggaWQgJHtzdGFja05hbWV9IGRvZXMgbm90IGV4aXN0YCkge1xuICAgICAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBnaXZlbiBzdGFjayB0aGF0IGRvZXMgbm90IGV4aXN0XG4gICAqXG4gICAqIEl0J3MgYSBsaXR0bGUgc2lsbHkgdGhhdCBpdCBuZWVkcyBhcmd1bWVudHMgdG8gZG8gdGhhdCwgYnV0IHRoZXJlIHdlIGdvLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2VzTm90RXhpc3QoY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrKGNmbiwgc3RhY2tOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcm9tIHN0YXRpYyBpbmZvcm1hdGlvbiAoZm9yIHRlc3RpbmcpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdGF0aWNJbmZvcm1hdGlvbihjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCwgc3RhY2tOYW1lOiBzdHJpbmcsIHN0YWNrOiBTdGFjaykge1xuICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25TdGFjayhjZm4sIHN0YWNrTmFtZSwgc3RhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGVtcGxhdGU6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFjaz86IFN0YWNrLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc3RhY2sncyBkZXBsb3llZCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBDYWNoZWQsIHNvIHdpbGwgb25seSBiZSByZXRyaWV2ZWQgb25jZS4gV2lsbCByZXR1cm4gYW4gZW1wdHlcbiAgICogc3RydWN0dXJlIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0ZW1wbGF0ZSgpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2ZuLmdldFRlbXBsYXRlKHtcbiAgICAgICAgU3RhY2tOYW1lOiB0aGlzLnN0YWNrTmFtZSxcbiAgICAgICAgVGVtcGxhdGVTdGFnZTogdGhpcy5yZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlID8gJ1Byb2Nlc3NlZCcgOiAnT3JpZ2luYWwnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl90ZW1wbGF0ZSA9IChyZXNwb25zZS5UZW1wbGF0ZUJvZHkgJiYgZGVzZXJpYWxpemVTdHJ1Y3R1cmUocmVzcG9uc2UuVGVtcGxhdGVCb2R5KSkgfHwge307XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdGFjayBleGlzdHNcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhpc3RzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YWNrJ3MgSUQgKHdoaWNoIGlzIHRoZSBzYW1lIGFzIGl0cyBBUk4pXG4gICAqXG4gICAqIFRocm93cyBpZiB0aGUgc3RhY2sgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tJZCgpIHtcbiAgICB0aGlzLmFzc2VydEV4aXN0cygpO1xuICAgIHJldHVybiB0aGlzLnN0YWNrIS5TdGFja0lkITtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBjdXJyZW50IG91dHB1dHNcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgKHRoaXMuc3RhY2shLk91dHB1dHMgfHwgW10pLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgcmVzdWx0W291dHB1dC5PdXRwdXRLZXkhXSA9IG91dHB1dC5PdXRwdXRWYWx1ZSE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBzdGF0dXNcbiAgICpcbiAgICogU3BlY2lhbCBzdGF0dXMgTk9UX0ZPVU5EIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tTdGF0dXMoKTogU3RhY2tTdGF0dXMge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhY2tTdGF0dXMoJ05PVF9GT1VORCcsICdTdGFjayBub3QgZm91bmQgZHVyaW5nIGxvb2t1cCcpO1xuICAgIH1cbiAgICByZXR1cm4gU3RhY2tTdGF0dXMuZnJvbVN0YWNrRGVzY3JpcHRpb24odGhpcy5zdGFjayEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgdGFnc1xuICAgKlxuICAgKiBFbXB0eSBsaXN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgcHVibGljIGdldCB0YWdzKCk6IFRhZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjaz8uVGFncyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTTlMgVG9waWMgQVJOcyB0aGF0IHdpbGwgcmVjZWl2ZSBzdGFjayBldmVudHMuXG4gICAqXG4gICAqIEVtcHR5IGxpc3QgaWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbkFybnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5Ob3RpZmljYXRpb25BUk5zID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgbGlzdCBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdGhpcy5zdGFjayEuUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcmV0W3BhcmFtLlBhcmFtZXRlcktleSFdID0gcGFyYW0uUmVzb2x2ZWRWYWx1ZSA/PyBwYXJhbS5QYXJhbWV0ZXJWYWx1ZSE7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIG9mIHRoZSBzdGFja1xuICAgKi9cbiAgcHVibGljIGdldCB0ZXJtaW5hdGlvblByb3RlY3Rpb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2s/LkVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0RXhpc3RzKCkge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE5vIHN0YWNrIG5hbWVkICcke3RoaXMuc3RhY2tOYW1lfSdgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { type CloudFormationStackArtifact, type Environment } from '@aws-cdk/cx-api';
2
+ import type { AssetManifestBuilder } from '../deployments';
3
+ import type { EnvironmentResources } from '../environment';
4
+ import { type IoHelper } from '../io/private';
5
+ export type TemplateBodyParameter = {
6
+ TemplateBody?: string;
7
+ TemplateURL?: string;
8
+ };
9
+ /**
10
+ * Prepares the body parameter for +CreateChangeSet+.
11
+ *
12
+ * If the template is small enough to be inlined into the API call, just return
13
+ * it immediately.
14
+ *
15
+ * Otherwise, add it to the asset manifest to get uploaded to the staging
16
+ * bucket and return its coordinates. If there is no staging bucket, an error
17
+ * is thrown.
18
+ *
19
+ * @param stack the synthesized stack that provides the CloudFormation template
20
+ * @param toolkitInfo information about the toolkit stack
21
+ */
22
+ export declare function makeBodyParameter(ioHelper: IoHelper, stack: CloudFormationStackArtifact, resolvedEnvironment: Environment, assetManifest: AssetManifestBuilder, resources: EnvironmentResources, overrideTemplate?: any): Promise<TemplateBodyParameter>;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeBodyParameter = makeBodyParameter;
4
+ const fs = require("node:fs/promises");
5
+ const path = require("node:path");
6
+ const util = require("node:util");
7
+ const cx_api_1 = require("@aws-cdk/cx-api");
8
+ const client_s3_1 = require("@aws-sdk/client-s3");
9
+ const middleware_endpoint_1 = require("@smithy/middleware-endpoint");
10
+ const chalk = require("chalk");
11
+ const util_1 = require("../../util");
12
+ const private_1 = require("../io/private");
13
+ const toolkit_error_1 = require("../toolkit-error");
14
+ const LARGE_TEMPLATE_SIZE_KB = 50;
15
+ /**
16
+ * Prepares the body parameter for +CreateChangeSet+.
17
+ *
18
+ * If the template is small enough to be inlined into the API call, just return
19
+ * it immediately.
20
+ *
21
+ * Otherwise, add it to the asset manifest to get uploaded to the staging
22
+ * bucket and return its coordinates. If there is no staging bucket, an error
23
+ * is thrown.
24
+ *
25
+ * @param stack the synthesized stack that provides the CloudFormation template
26
+ * @param toolkitInfo information about the toolkit stack
27
+ */
28
+ async function makeBodyParameter(ioHelper, stack, resolvedEnvironment, assetManifest, resources, overrideTemplate) {
29
+ // If the template has already been uploaded to S3, just use it from there.
30
+ if (stack.stackTemplateAssetObjectUrl && !overrideTemplate) {
31
+ return {
32
+ TemplateURL: await restUrlFromManifest(stack.stackTemplateAssetObjectUrl, resolvedEnvironment),
33
+ };
34
+ }
35
+ // Otherwise, pass via API call (if small) or upload here (if large)
36
+ const templateJson = (0, util_1.toYAML)(overrideTemplate ?? stack.template);
37
+ if (templateJson.length <= LARGE_TEMPLATE_SIZE_KB * 1024) {
38
+ return { TemplateBody: templateJson };
39
+ }
40
+ const toolkitInfo = await resources.lookupToolkit();
41
+ if (!toolkitInfo.found) {
42
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_ERROR.msg(util.format(`The template for stack "${stack.displayName}" is ${Math.round(templateJson.length / 1024)}KiB. ` +
43
+ `Templates larger than ${LARGE_TEMPLATE_SIZE_KB}KiB must be uploaded to S3.\n` +
44
+ 'Run the following command in order to setup an S3 bucket in this environment, and then re-deploy:\n\n', chalk.blue(`\t$ cdk bootstrap ${resolvedEnvironment.name}\n`))));
45
+ throw new toolkit_error_1.ToolkitError('Template too large to deploy ("cdk bootstrap" is required)');
46
+ }
47
+ const templateHash = (0, util_1.contentHash)(templateJson);
48
+ const key = `cdk/${stack.id}/${templateHash}.yml`;
49
+ let templateFile = stack.templateFile;
50
+ if (overrideTemplate) {
51
+ // Add a variant of this template
52
+ templateFile = `${stack.templateFile}-${templateHash}.yaml`;
53
+ const templateFilePath = path.join(stack.assembly.directory, templateFile);
54
+ await fs.writeFile(templateFilePath, templateJson, { encoding: 'utf-8' });
55
+ }
56
+ assetManifest.addFileAsset(templateHash, {
57
+ path: templateFile,
58
+ }, {
59
+ bucketName: toolkitInfo.bucketName,
60
+ objectKey: key,
61
+ });
62
+ const templateURL = `${toolkitInfo.bucketUrl}/${key}`;
63
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Storing template in S3 at: ${templateURL}`));
64
+ return { TemplateURL: templateURL };
65
+ }
66
+ /**
67
+ * Format an S3 URL in the manifest for use with CloudFormation
68
+ *
69
+ * Replaces environment placeholders (which this field may contain),
70
+ * and reformats s3://.../... urls into S3 REST URLs (which CloudFormation
71
+ * expects)
72
+ */
73
+ async function restUrlFromManifest(url, environment) {
74
+ const doNotUseMarker = '**DONOTUSE**';
75
+ const region = environment.region;
76
+ // This URL may contain placeholders, so still substitute those.
77
+ url = cx_api_1.EnvironmentPlaceholders.replace(url, {
78
+ accountId: environment.account,
79
+ region,
80
+ partition: doNotUseMarker,
81
+ });
82
+ // Yes, this is extremely crude, but we don't actually need this so I'm not inclined to spend
83
+ // a lot of effort trying to thread the right value to this location.
84
+ if (url.indexOf(doNotUseMarker) > -1) {
85
+ throw new toolkit_error_1.ToolkitError("Cannot use '${AWS::Partition}' in the 'stackTemplateAssetObjectUrl' field");
86
+ }
87
+ const s3Url = url.match(/s3:\/\/([^/]+)\/(.*)$/);
88
+ if (!s3Url) {
89
+ return url;
90
+ }
91
+ // We need to pass an 'https://s3.REGION.amazonaws.com[.cn]/bucket/object' URL to CloudFormation, but we
92
+ // got an 's3://bucket/object' URL instead. Construct the rest API URL here.
93
+ const bucketName = s3Url[1];
94
+ const objectKey = s3Url[2];
95
+ // SDK v3 no longer allows for getting endpoints from only region.
96
+ // A command and client config must now be provided.
97
+ const s3 = new client_s3_1.S3Client({ region });
98
+ const endpoint = await (0, middleware_endpoint_1.getEndpointFromInstructions)({}, client_s3_1.HeadObjectCommand, {
99
+ ...s3.config,
100
+ });
101
+ endpoint.url.hostname;
102
+ return `${endpoint.url.origin}/${bucketName}/${objectKey}`;
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtYm9keS1wYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZS1ib2R5LXBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlDQSw4Q0E2REM7QUE5RkQsdUNBQXVDO0FBQ3ZDLGtDQUFrQztBQUNsQyxrQ0FBa0M7QUFDbEMsNENBQThHO0FBQzlHLGtEQUFpRTtBQUNqRSxxRUFBMEU7QUFDMUUsK0JBQStCO0FBQy9CLHFDQUFpRDtBQUdqRCwyQ0FBa0Q7QUFDbEQsb0RBQWdEO0FBT2hELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsUUFBa0IsRUFDbEIsS0FBa0MsRUFDbEMsbUJBQWdDLEVBQ2hDLGFBQW1DLEVBQ25DLFNBQStCLEVBQy9CLGdCQUFzQjtJQUV0QiwyRUFBMkU7SUFDM0UsSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNELE9BQU87WUFDTCxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsbUJBQW1CLENBQUM7U0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBQSxhQUFNLEVBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhFLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxzQkFBc0IsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxDQUFDLE1B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QUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxpREFBMkIsRUFBQyxFQUFFLEVBQUUsNkJBQWlCLEVBQUU7UUFDeEUsR0FBRyxFQUFFLENBQUMsTUFBTTtLQUNiLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBRXRCLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksU0FBUyxFQUFFLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgdHlwZSBDbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIHR5cGUgRW52aXJvbm1lbnQsIEVudmlyb25tZW50UGxhY2Vob2xkZXJzIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IEhlYWRPYmplY3RDb21tYW5kLCBTM0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQgeyBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMgfSBmcm9tICdAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgY29udGVudEhhc2gsIHRvWUFNTCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBBc3NldE1hbmlmZXN0QnVpbGRlciB9IGZyb20gJy4uL2RlcGxveW1lbnRzJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRSZXNvdXJjZXMgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJTywgdHlwZSBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC1lcnJvcic7XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlQm9keVBhcmFtZXRlciA9IHtcbiAgVGVtcGxhdGVCb2R5Pzogc3RyaW5nO1xuICBUZW1wbGF0ZVVSTD86IHN0cmluZztcbn07XG5cbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfS0IgPSA1MDtcblxuLyoqXG4gKiBQcmVwYXJlcyB0aGUgYm9keSBwYXJhbWV0ZXIgZm9yICtDcmVhdGVDaGFuZ2VTZXQrLlxuICpcbiAqIElmIHRoZSB0ZW1wbGF0ZSBpcyBzbWFsbCBlbm91Z2ggdG8gYmUgaW5saW5lZCBpbnRvIHRoZSBBUEkgY2FsbCwganVzdCByZXR1cm5cbiAqIGl0IGltbWVkaWF0ZWx5LlxuICpcbiAqIE90aGVyd2lzZSwgYWRkIGl0IHRvIHRoZSBhc3NldCBtYW5pZmVzdCB0byBnZXQgdXBsb2FkZWQgdG8gdGhlIHN0YWdpbmdcbiAqIGJ1Y2tldCBhbmQgcmV0dXJuIGl0cyBjb29yZGluYXRlcy4gSWYgdGhlcmUgaXMgbm8gc3RhZ2luZyBidWNrZXQsIGFuIGVycm9yXG4gKiBpcyB0aHJvd24uXG4gKlxuICogQHBhcmFtIHN0YWNrICAgICB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgdGhhdCBwcm92aWRlcyB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAqIEBwYXJhbSB0b29sa2l0SW5mbyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG9vbGtpdCBzdGFja1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFrZUJvZHlQYXJhbWV0ZXIoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2s6IENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCxcbiAgcmVzb2x2ZWRFbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gIGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3RCdWlsZGVyLFxuICByZXNvdXJjZXM6IEVudmlyb25tZW50UmVzb3VyY2VzLFxuICBvdmVycmlkZVRlbXBsYXRlPzogYW55LFxuKTogUHJvbWlzZTxUZW1wbGF0ZUJvZHlQYXJhbWV0ZXI+IHtcbiAgLy8gSWYgdGhlIHRlbXBsYXRlIGhhcyBhbHJlYWR5IGJlZW4gdXBsb2FkZWQgdG8gUzMsIGp1c3QgdXNlIGl0IGZyb20gdGhlcmUuXG4gIGlmIChzdGFjay5zdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmwgJiYgIW92ZXJyaWRlVGVtcGxhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgVGVtcGxhdGVVUkw6IGF3YWl0IHJlc3RVcmxGcm9tTWFuaWZlc3Qoc3RhY2suc3RhY2tUZW1wbGF0ZUFzc2V0T2JqZWN0VXJsLCByZXNvbHZlZEVudmlyb25tZW50KSxcbiAgICB9O1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBwYXNzIHZpYSBBUEkgY2FsbCAoaWYgc21hbGwpIG9yIHVwbG9hZCBoZXJlIChpZiBsYXJnZSlcbiAgY29uc3QgdGVtcGxhdGVKc29uID0gdG9ZQU1MKG92ZXJyaWRlVGVtcGxhdGUgPz8gc3RhY2sudGVtcGxhdGUpO1xuXG4gIGlmICh0ZW1wbGF0ZUpzb24ubGVuZ3RoIDw9IExBUkdFX1RFTVBMQVRFX1NJWkVfS0IgKiAxMDI0KSB7XG4gICAgcmV0dXJuIHsgVGVtcGxhdGVCb2R5OiB0ZW1wbGF0ZUpzb24gfTtcbiAgfVxuXG4gIGNvbnN0IHRvb2xraXRJbmZvID0gYXdhaXQgcmVzb3VyY2VzLmxvb2t1cFRvb2xraXQoKTtcbiAgaWYgKCF0b29sa2l0SW5mby5mb3VuZCkge1xuICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShcbiAgICAgIElPLkRFRkFVTFRfVE9PTEtJVF9FUlJPUi5tc2codXRpbC5mb3JtYXQoXG4gICAgICAgIGBUaGUgdGVtcGxhdGUgZm9yIHN0YWNrIFwiJHtzdGFjay5kaXNwbGF5TmFtZX1cIiBpcyAke01hdGgucm91bmQodGVtcGxhdGVKc29uLmxlbmd0aCAvIDEwMjQpfUtpQi4gYCArXG4gICAgICAgIGBUZW1wbGF0ZXMgbGFyZ2VyIHRoYW4gJHtMQVJHRV9URU1QTEFURV9TSVpFX0tCfUtpQiBtdXN0IGJlIHVwbG9hZGVkIHRvIFMzLlxcbmAgK1xuICAgICAgICAnUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiBvcmRlciB0byBzZXR1cCBhbiBTMyBidWNrZXQgaW4gdGhpcyBlbnZpcm9ubWVudCwgYW5kIHRoZW4gcmUtZGVwbG95OlxcblxcbicsXG4gICAgICAgIGNoYWxrLmJsdWUoYFxcdCQgY2RrIGJvb3RzdHJhcCAke3Jlc29sdmVkRW52aXJvbm1lbnQubmFtZX1cXG5gKSxcbiAgICAgICkpLFxuICAgICk7XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUZW1wbGF0ZSB0b28gbGFyZ2UgdG8gZGVwbG95IChcImNkayBib290c3RyYXBcIiBpcyByZXF1aXJlZCknKTtcbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlSGFzaCA9IGNvbnRlbnRIYXNoKHRlbXBsYXRlSnNvbik7XG4gIGNvbnN0IGtleSA9IGBjZGsvJHtzdGFjay5pZH0vJHt0ZW1wbGF0ZUhhc2h9LnltbGA7XG5cbiAgbGV0IHRlbXBsYXRlRmlsZSA9IHN0YWNrLnRlbXBsYXRlRmlsZTtcbiAgaWYgKG92ZXJyaWRlVGVtcGxhdGUpIHtcbiAgICAvLyBBZGQgYSB2YXJpYW50IG9mIHRoaXMgdGVtcGxhdGVcbiAgICB0ZW1wbGF0ZUZpbGUgPSBgJHtzdGFjay50ZW1wbGF0ZUZpbGV9LSR7dGVtcGxhdGVIYXNofS55YW1sYDtcbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGVQYXRoID0gcGF0aC5qb2luKHN0YWNrLmFzc2VtYmx5LmRpcmVjdG9yeSwgdGVtcGxhdGVGaWxlKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGVtcGxhdGVGaWxlUGF0aCwgdGVtcGxhdGVKc29uLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9XG5cbiAgYXNzZXRNYW5pZmVzdC5hZGRGaWxlQXNzZXQoXG4gICAgdGVtcGxhdGVIYXNoLFxuICAgIHtcbiAgICAgIHBhdGg6IHRlbXBsYXRlRmlsZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgICBvYmplY3RLZXk6IGtleSxcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHRlbXBsYXRlVVJMID0gYCR7dG9vbGtpdEluZm8uYnVja2V0VXJsfS8ke2tleX1gO1xuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgU3RvcmluZyB0ZW1wbGF0ZSBpbiBTMyBhdDogJHt0ZW1wbGF0ZVVSTH1gKSk7XG4gIHJldHVybiB7IFRlbXBsYXRlVVJMOiB0ZW1wbGF0ZVVSTCB9O1xufVxuXG4vKipcbiAqIEZvcm1hdCBhbiBTMyBVUkwgaW4gdGhlIG1hbmlmZXN0IGZvciB1c2Ugd2l0aCBDbG91ZEZvcm1hdGlvblxuICpcbiAqIFJlcGxhY2VzIGVudmlyb25tZW50IHBsYWNlaG9sZGVycyAod2hpY2ggdGhpcyBmaWVsZCBtYXkgY29udGFpbiksXG4gKiBhbmQgcmVmb3JtYXRzIHMzOi8vLi4uLy4uLiB1cmxzIGludG8gUzMgUkVTVCBVUkxzICh3aGljaCBDbG91ZEZvcm1hdGlvblxuICogZXhwZWN0cylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzdFVybEZyb21NYW5pZmVzdCh1cmw6IHN0cmluZywgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZG9Ob3RVc2VNYXJrZXIgPSAnKipET05PVFVTRSoqJztcbiAgY29uc3QgcmVnaW9uID0gZW52aXJvbm1lbnQucmVnaW9uO1xuICAvLyBUaGlzIFVSTCBtYXkgY29udGFpbiBwbGFjZWhvbGRlcnMsIHNvIHN0aWxsIHN1YnN0aXR1dGUgdGhvc2UuXG4gIHVybCA9IEVudmlyb25tZW50UGxhY2Vob2xkZXJzLnJlcGxhY2UodXJsLCB7XG4gICAgYWNjb3VudElkOiBlbnZpcm9ubWVudC5hY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICBwYXJ0aXRpb246IGRvTm90VXNlTWFya2VyLFxuICB9KTtcblxuICAvLyBZZXMsIHRoaXMgaXMgZXh0cmVtZWx5IGNydWRlLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIHNvIEknbSBub3QgaW5jbGluZWQgdG8gc3BlbmRcbiAgLy8gYSBsb3Qgb2YgZWZmb3J0IHRyeWluZyB0byB0aHJlYWQgdGhlIHJpZ2h0IHZhbHVlIHRvIHRoaXMgbG9jYXRpb24uXG4gIGlmICh1cmwuaW5kZXhPZihkb05vdFVzZU1hcmtlcikgPiAtMSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXCJDYW5ub3QgdXNlICcke0FXUzo6UGFydGl0aW9ufScgaW4gdGhlICdzdGFja1RlbXBsYXRlQXNzZXRPYmplY3RVcmwnIGZpZWxkXCIpO1xuICB9XG5cbiAgY29uc3QgczNVcmwgPSB1cmwubWF0Y2goL3MzOlxcL1xcLyhbXi9dKylcXC8oLiopJC8pO1xuICBpZiAoIXMzVXJsKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gcGFzcyBhbiAnaHR0cHM6Ly9zMy5SRUdJT04uYW1hem9uYXdzLmNvbVsuY25dL2J1Y2tldC9vYmplY3QnIFVSTCB0byBDbG91ZEZvcm1hdGlvbiwgYnV0IHdlXG4gIC8vIGdvdCBhbiAnczM6Ly9idWNrZXQvb2JqZWN0JyBVUkwgaW5zdGVhZC4gQ29uc3RydWN0IHRoZSByZXN0IEFQSSBVUkwgaGVyZS5cbiAgY29uc3QgYnVja2V0TmFtZSA9IHMzVXJsWzFdO1xuICBjb25zdCBvYmplY3RLZXkgPSBzM1VybFsyXTtcblxuICAvLyBTREsgdjMgbm8gbG9uZ2VyIGFsbG93cyBmb3IgZ2V0dGluZyBlbmRwb2ludHMgZnJvbSBvbmx5IHJlZ2lvbi5cbiAgLy8gQSBjb21tYW5kIGFuZCBjbGllbnQgY29uZmlnIG11c3Qgbm93IGJlIHByb3ZpZGVkLlxuICBjb25zdCBzMyA9IG5ldyBTM0NsaWVudCh7IHJlZ2lvbiB9KTtcbiAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMoe30sIEhlYWRPYmplY3RDb21tYW5kLCB7XG4gICAgLi4uczMuY29uZmlnLFxuICB9KTtcbiAgZW5kcG9pbnQudXJsLmhvc3RuYW1lO1xuXG4gIHJldHVybiBgJHtlbmRwb2ludC51cmwub3JpZ2lufS8ke2J1Y2tldE5hbWV9LyR7b2JqZWN0S2V5fWA7XG59XG4iXX0=
@@ -0,0 +1,40 @@
1
+ import { Settings } from './settings';
2
+ export { TRANSIENT_CONTEXT_KEY } from './settings';
3
+ export declare const PROJECT_CONTEXT = "cdk.context.json";
4
+ interface ContextBag {
5
+ /**
6
+ * The file name of the context. Will be used to potentially
7
+ * save new context back to the original file.
8
+ */
9
+ fileName?: string;
10
+ /**
11
+ * The context values.
12
+ */
13
+ bag: Settings;
14
+ }
15
+ /**
16
+ * Class that supports overlaying property bags
17
+ *
18
+ * Reads come from the first property bag that can has the given key,
19
+ * writes go to the first property bag that is not readonly. A write
20
+ * will remove the value from all property bags after the first
21
+ * writable one.
22
+ */
23
+ export declare class Context {
24
+ private readonly bags;
25
+ private readonly fileNames;
26
+ constructor(...bags: ContextBag[]);
27
+ get keys(): string[];
28
+ has(key: string): boolean;
29
+ get all(): {
30
+ [key: string]: any;
31
+ };
32
+ get(key: string): any;
33
+ set(key: string, value: any): void;
34
+ unset(key: string): void;
35
+ clear(): void;
36
+ /**
37
+ * Save a specific context file
38
+ */
39
+ save(fileName: string): Promise<this>;
40
+ }